diff --git a/data/config/default/e.src b/data/config/default/e.src index a017effa9..c5ae0fe59 100644 --- a/data/config/default/e.src +++ b/data/config/default/e.src @@ -1,5 +1,5 @@ group "E_Config" struct { - value "config_version" int: 1000029; + value "config_version" int: 1000030; value "config_type" uint: 0; // this profile seems to just be super minimalist value "show_splash" int: 0; value "desktop_default_name" string: "%i-%i"; diff --git a/data/config/standard/e.src b/data/config/standard/e.src index bc9fc5dad..8f2a0243f 100644 --- a/data/config/standard/e.src +++ b/data/config/standard/e.src @@ -1,5 +1,5 @@ group "E_Config" struct { - value "config_version" int: 1000029; + value "config_version" int: 1000030; value "config_type" uint: 3; value "show_splash" int: 1; value "desktop_default_name" string: "%i-%i"; diff --git a/data/config/tiling/e.src b/data/config/tiling/e.src index 2d81e5a6d..41ab40264 100644 --- a/data/config/tiling/e.src +++ b/data/config/tiling/e.src @@ -1,5 +1,5 @@ group "E_Config" struct { - value "config_version" int: 1000029; + value "config_version" int: 1000030; value "config_type" uint: 3; value "show_splash" int: 1; value "desktop_default_name" string: "%i-%i"; diff --git a/src/bin/e_config.c b/src/bin/e_config.c index 00fe41138..d1cbaecf3 100644 --- a/src/bin/e_config.c +++ b/src/bin/e_config.c @@ -1601,6 +1601,23 @@ e_config_load(void) } e_config_save_queue(); } + CONFIG_VERSION_CHECK(30) + { + Eina_List *l; + E_Config_Module *em; + + CONFIG_VERSION_UPDATE_INFO(30); + EINA_LIST_FOREACH(e_config->modules, l, em) + { + if (!em->enabled) continue; + if (!em->name) continue; + if (eina_streq(em->name, "pager_plain")) + { + eina_stringshare_replace(&(em->name), "pager"); + } + } + e_config_save_queue(); + } } elm_config_profile_set(_e_config_profile); if (!e_config->remember_internal_fm_windows) diff --git a/src/bin/e_config.h b/src/bin/e_config.h index 3eeb395fb..7bb7711a0 100644 --- a/src/bin/e_config.h +++ b/src/bin/e_config.h @@ -46,7 +46,7 @@ typedef enum /* increment this whenever a new set of config values are added but the users * config doesn't need to be wiped - simply new values need to be put in */ -#define E_CONFIG_FILE_GENERATION 29 +#define E_CONFIG_FILE_GENERATION 30 #define E_CONFIG_FILE_VERSION ((E_CONFIG_FILE_EPOCH * 1000000) + E_CONFIG_FILE_GENERATION) #define E_CONFIG_BINDINGS_VERSION 0 // DO NOT INCREMENT UNLESS YOU WANT TO WIPE ALL BINDINGS!!!!! diff --git a/src/bin/e_module.c b/src/bin/e_module.c index 548697abc..af5cf1f15 100644 --- a/src/bin/e_module.c +++ b/src/bin/e_module.c @@ -759,7 +759,6 @@ _e_module_whitelist_check(void) "notification", "ofono", "pager", - "pager_plain", "quickaccess", "shot", "start", diff --git a/src/modules/meson.build b/src/modules/meson.build index a244bd320..1ca09b64b 100644 --- a/src/modules/meson.build +++ b/src/modules/meson.build @@ -8,7 +8,6 @@ mods = [ # standard run of the mill modules with cion and desktop 'ibar', 'pager', - 'pager_plain', 'temperature', 'mixer', 'notification', diff --git a/src/modules/pager_plain/e-module-pager_plain.edj b/src/modules/pager_plain/e-module-pager_plain.edj deleted file mode 100644 index 75aa3dc0b..000000000 Binary files a/src/modules/pager_plain/e-module-pager_plain.edj and /dev/null differ diff --git a/src/modules/pager_plain/e_mod_config.c b/src/modules/pager_plain/e_mod_config.c deleted file mode 100644 index f056d9b30..000000000 --- a/src/modules/pager_plain/e_mod_config.c +++ /dev/null @@ -1,520 +0,0 @@ -#include "e.h" -#include "e_mod_main.h" - -#define BUTTON_DRAG 0 -#define BUTTON_NOPLACE 1 -#define BUTTON_DESK 2 - -struct _E_Config_Dialog_Data -{ - struct - { - int show, urgent_show, urgent_stick, urgent_focus; - double speed, urgent_speed; - int height, act_height; - } popup; - struct - { - unsigned int drag, noplace, desk; - } btn; - struct - { - Ecore_X_Window bind_win; - E_Grab_Dialog *dia; - Eina_List *hdls; - int btn; - } grab; - struct - { - Evas_Object *ob1, *ob2, *ob3; - Eina_List *popup_list, *urgent_list; - } gui; - int drag_resist, flip_desk, show_desk_names, live_preview; - E_Config_Dialog *cfd; -}; - -/* local function prototypes */ -static void *_create_data(E_Config_Dialog *cfd); -static void _fill_data(E_Config_Dialog_Data *cfdata); -static void _free_data(E_Config_Dialog *cfd EINA_UNUSED, E_Config_Dialog_Data *cfdata); -static Evas_Object *_basic_create(E_Config_Dialog *cfd EINA_UNUSED, Evas *evas, E_Config_Dialog_Data *cfdata); -static int _basic_apply(E_Config_Dialog *cfd EINA_UNUSED, E_Config_Dialog_Data *cfdata); -static int _basic_check_changed(E_Config_Dialog *cfd EINA_UNUSED, E_Config_Dialog_Data *cfdata); -static Evas_Object *_adv_create(E_Config_Dialog *cfd EINA_UNUSED, Evas *evas, E_Config_Dialog_Data *cfdata); -static int _adv_apply(E_Config_Dialog *cfd EINA_UNUSED, E_Config_Dialog_Data *cfdata); -static int _adv_check_changed(E_Config_Dialog *cfd EINA_UNUSED, E_Config_Dialog_Data *cfdata); -static void _update_btns(E_Config_Dialog_Data *cfdata); -static void _update_btn(E_Config_Dialog_Data *cfdata, Evas_Object *button, const int mouse_button); -static void _grab_window_show(void *data1, void *data2); -static Eina_Bool _grab_cb_mouse_down(void *data, int type, void *event); -static Eina_Bool _grab_cb_key_down(void *data, int type, void *event); -static void _cb_disable_check_list(void *data, Evas_Object *obj); - -EINTERN void -_config_pager_module(Config_Item *ci) -{ - E_Config_Dialog *cfd; - E_Config_Dialog_View *v; - char buff[PATH_MAX]; - - v = E_NEW(E_Config_Dialog_View, 1); - if (!v) return; - - v->create_cfdata = _create_data; - v->free_cfdata = _free_data; - v->basic.create_widgets = _basic_create; - v->basic.apply_cfdata = _basic_apply; - v->basic.check_changed = _basic_check_changed; - v->advanced.create_widgets = _adv_create; - v->advanced.apply_cfdata = _adv_apply; - v->advanced.check_changed = _adv_check_changed; - - snprintf(buff, sizeof(buff), "%s/e-module-pager-plain.edj", - pager_config->module->dir); - cfd = e_config_dialog_new(NULL, _("Pager Settings"), "E", - "_e_mod_pager_config_dialog", buff, 0, v, ci); - pager_config->config_dialog = cfd; -} - -/* local function prototypes */ -static void * -_create_data(E_Config_Dialog *cfd EINA_UNUSED) -{ - E_Config_Dialog_Data *cfdata; - - cfdata = E_NEW(E_Config_Dialog_Data, 1); - _fill_data(cfdata); - return cfdata; -} - -static void -_fill_data(E_Config_Dialog_Data *cfdata) -{ - cfdata->popup.show = pager_config->popup; - cfdata->popup.speed = pager_config->popup_speed; - cfdata->popup.urgent_show = pager_config->popup_urgent; - cfdata->popup.urgent_stick = pager_config->popup_urgent_stick; - cfdata->popup.urgent_focus = pager_config->popup_urgent_focus; - cfdata->popup.urgent_speed = pager_config->popup_urgent_speed; - cfdata->popup.height = pager_config->popup_height; - cfdata->popup.act_height = pager_config->popup_act_height; - cfdata->drag_resist = pager_config->drag_resist; - cfdata->btn.drag = pager_config->btn_drag; - cfdata->btn.noplace = pager_config->btn_noplace; - cfdata->btn.desk = pager_config->btn_desk; - cfdata->flip_desk = pager_config->flip_desk; - cfdata->live_preview = !pager_config->disable_live_preview; - cfdata->show_desk_names = pager_config->show_desk_names; -} - -static void -_free_data(E_Config_Dialog *cfd EINA_UNUSED, E_Config_Dialog_Data *cfdata) -{ - cfdata->gui.popup_list = eina_list_free(cfdata->gui.popup_list); - cfdata->gui.urgent_list = eina_list_free(cfdata->gui.urgent_list); - pager_config->config_dialog = NULL; - E_FREE(cfdata); -} - -static Evas_Object * -_basic_create(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cfdata) -{ - Evas_Object *ol, *of, *ow; - - e_dialog_resizable_set(cfd->dia, 1); - cfdata->cfd = cfd; - ol = e_widget_list_add(evas, 0, 0); - - of = e_widget_framelist_add(evas, _("General"), 0); - ow = e_widget_check_add(evas, _("Flip desktop on mouse wheel"), - &(cfdata->flip_desk)); - e_widget_framelist_object_append(of, ow); - ow = e_widget_check_add(evas, _("Always show desktop names"), - &(cfdata->show_desk_names)); - e_widget_framelist_object_append(of, ow); - ow = e_widget_check_add(evas, _("Live preview"), - &(cfdata->live_preview)); - e_widget_framelist_object_append(of, ow); - e_widget_list_object_append(ol, of, 1, 0, 0.5); - - of = e_widget_framelist_add(evas, _("Popup"), 0); - ow = e_widget_check_add(evas, _("Show popup on desktop change"), - &(cfdata->popup.show)); - e_widget_framelist_object_append(of, ow); - ow = e_widget_check_add(evas, _("Show popup for urgent windows"), - &(cfdata->popup.urgent_show)); - e_widget_framelist_object_append(of, ow); - e_widget_list_object_append(ol, of, 1, 0, 0.5); - - return ol; -} - -static int -_basic_apply(E_Config_Dialog *cfd EINA_UNUSED, E_Config_Dialog_Data *cfdata) -{ - pager_config->popup = cfdata->popup.show; - pager_config->flip_desk = cfdata->flip_desk; - pager_config->disable_live_preview = !cfdata->live_preview; - pager_config->show_desk_names = cfdata->show_desk_names; - pager_config->popup_urgent = cfdata->popup.urgent_show; - _pager_cb_config_updated(); - e_config_save_queue(); - return 1; -} - -static int -_basic_check_changed(E_Config_Dialog *cfd EINA_UNUSED, E_Config_Dialog_Data *cfdata) -{ - if ((int)pager_config->popup != cfdata->popup.show) return 1; - if ((int)pager_config->flip_desk != cfdata->flip_desk) return 1; - if ((int)pager_config->disable_live_preview != !cfdata->live_preview) return 1; - if ((int)pager_config->show_desk_names != cfdata->show_desk_names) return 1; - if ((int)pager_config->popup_urgent != cfdata->popup.urgent_show) return 1; - - return 0; -} - -static Evas_Object * -_adv_create(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cfdata) -{ - Evas_Object *otb, *ol, *ow; - Evas_Object *pc, *uc; - - e_dialog_resizable_set(cfd->dia, 1); - cfdata->cfd = cfd; - otb = e_widget_toolbook_add(evas, (48 * e_scale), (48 * e_scale)); - - /* General Page */ - ol = e_widget_list_add(evas, 0, 0); - ow = e_widget_check_add(evas, _("Flip desktop on mouse wheel"), - &(cfdata->flip_desk)); - e_widget_list_object_append(ol, ow, 1, 0, 0.5); - ow = e_widget_check_add(evas, _("Always show desktop names"), - &(cfdata->show_desk_names)); - e_widget_list_object_append(ol, ow, 1, 0, 0.5); - ow = e_widget_check_add(evas, _("Live preview"), - &(cfdata->live_preview)); - e_widget_list_object_append(ol, ow, 1, 0, 0.5); - ow = e_widget_label_add(evas, _("Resistance to dragging")); - e_widget_list_object_append(ol, ow, 1, 0, 0.5); - ow = e_widget_slider_add(evas, 1, 0, _("%.0f pixels"), 0.0, 10.0, 1.0, 0, NULL, - &(cfdata->drag_resist), 100); - e_widget_list_object_append(ol, ow, 1, 0, 0.5); - -#if 0 - ow = e_widget_label_add(evas, _("Select and Slide button")); - e_widget_list_object_append(ol, ow, 1, 0, 0.5); - ow = e_widget_button_add(evas, _("Click to set"), NULL, - _grab_window_show, (void *)BUTTON_DRAG, cfdata); - cfdata->gui.ob1 = ow; - e_widget_list_object_append(ol, ow, 1, 0, 0.5); -#endif - - ow = e_widget_label_add(evas, _("Drag and Drop button")); - e_widget_list_object_append(ol, ow, 1, 0, 0.5); - ow = e_widget_button_add(evas, _("Click to set"), NULL, - _grab_window_show, (void *)BUTTON_NOPLACE, cfdata); - cfdata->gui.ob2 = ow; - e_widget_list_object_append(ol, ow, 1, 0, 0.5); - ow = e_widget_label_add(evas, _("Drag whole desktop")); - e_widget_list_object_append(ol, ow, 1, 0, 0.5); - ow = e_widget_button_add(evas, _("Click to set"), NULL, - _grab_window_show, (void *)BUTTON_DESK, cfdata); - cfdata->gui.ob3 = ow; - e_widget_list_object_append(ol, ow, 1, 0, 0.5); - _update_btns(cfdata); - e_widget_toolbook_page_append(otb, NULL, _("General"), ol, 1, 0, 1, 0, - 0.5, 0.0); - - /* Popup Page */ - ol = e_widget_list_add(evas, 0, 0); - pc = e_widget_check_add(evas, _("Show popup on desktop change"), - &(cfdata->popup.show)); - e_widget_list_object_append(ol, pc, 1, 0, 0.5); - - ow = e_widget_label_add(evas, _("Popup pager height")); - cfdata->gui.popup_list = eina_list_append(cfdata->gui.popup_list, ow); - e_widget_disabled_set(ow, !cfdata->popup.show); - e_widget_list_object_append(ol, ow, 1, 0, 0.5); - ow = e_widget_slider_add(evas, 1, 0, _("%.0f pixels"), 20.0, 200.0, 1.0, 0, NULL, - &(cfdata->popup.height), 100); - cfdata->gui.popup_list = eina_list_append(cfdata->gui.popup_list, ow); - e_widget_disabled_set(ow, !cfdata->popup.show); - e_widget_list_object_append(ol, ow, 1, 0, 0.5); - - ow = e_widget_label_add(evas, _("Popup duration")); - cfdata->gui.popup_list = eina_list_append(cfdata->gui.popup_list, ow); - e_widget_disabled_set(ow, !cfdata->popup.show); - e_widget_list_object_append(ol, ow, 1, 0, 0.5); - ow = e_widget_slider_add(evas, 1, 0, _("%1.1f seconds"), 0.1, 10.0, 0.1, 0, - &(cfdata->popup.speed), NULL, 100); - cfdata->gui.popup_list = eina_list_append(cfdata->gui.popup_list, ow); - e_widget_disabled_set(ow, !cfdata->popup.show); - e_widget_list_object_append(ol, ow, 1, 0, 0.5); - e_widget_on_change_hook_set(pc, _cb_disable_check_list, - cfdata->gui.popup_list); - ow = e_widget_label_add(evas, _("Pager action popup height")); - e_widget_list_object_append(ol, ow, 1, 0, 0.5); - ow = e_widget_slider_add(evas, 1, 0, _("%.0f pixels"), 20.0, 200.0, 1.0, 0, NULL, - &(cfdata->popup.act_height), 100); - e_widget_list_object_append(ol, ow, 1, 0, 0.5); - e_widget_toolbook_page_append(otb, NULL, _("Popup"), ol, 1, 0, 1, 0, - 0.5, 0.0); - - /* Urgent Page */ - ol = e_widget_list_add(evas, 0, 0); - uc = e_widget_check_add(evas, _("Show popup for urgent window"), - &(cfdata->popup.urgent_show)); - e_widget_list_object_append(ol, uc, 1, 0, 0.5); - - ow = e_widget_check_add(evas, _("Urgent popup sticks on screen"), - &(cfdata->popup.urgent_stick)); - cfdata->gui.urgent_list = eina_list_append(cfdata->gui.urgent_list, ow); - e_widget_disabled_set(ow, !cfdata->popup.urgent_show); - e_widget_list_object_append(ol, ow, 1, 0, 0.5); - - ow = e_widget_check_add(evas, _("Show popup for focused windows"), - &(cfdata->popup.urgent_focus)); - cfdata->gui.urgent_list = eina_list_append(cfdata->gui.urgent_list, ow); - e_widget_disabled_set(ow, !cfdata->popup.urgent_show); - e_widget_list_object_append(ol, ow, 1, 0, 0.5); - - ow = e_widget_label_add(evas, _("Urgent popup duration")); - cfdata->gui.urgent_list = eina_list_append(cfdata->gui.urgent_list, ow); - e_widget_disabled_set(ow, !cfdata->popup.urgent_show); - e_widget_list_object_append(ol, ow, 1, 0, 0.5); - ow = e_widget_slider_add(evas, 1, 0, _("%1.1f seconds"), 0.1, 10.0, 0.1, 0, - &(cfdata->popup.urgent_speed), NULL, 100); - cfdata->gui.urgent_list = eina_list_append(cfdata->gui.urgent_list, ow); - e_widget_disabled_set(ow, !cfdata->popup.urgent_show); - e_widget_list_object_append(ol, ow, 1, 0, 0.5); - e_widget_on_change_hook_set(uc, _cb_disable_check_list, - cfdata->gui.urgent_list); - e_widget_toolbook_page_append(otb, NULL, _("Urgent Windows"), ol, - 1, 0, 1, 0, 0.5, 0.0); - - e_widget_toolbook_page_show(otb, 0); - return otb; -} - -static int -_adv_apply(E_Config_Dialog *cfd EINA_UNUSED, E_Config_Dialog_Data *cfdata) -{ - pager_config->popup = cfdata->popup.show; - pager_config->popup_speed = cfdata->popup.speed; - pager_config->flip_desk = cfdata->flip_desk; - pager_config->disable_live_preview = !cfdata->live_preview; - pager_config->popup_urgent = cfdata->popup.urgent_show; - pager_config->popup_urgent_stick = cfdata->popup.urgent_stick; - pager_config->popup_urgent_focus = cfdata->popup.urgent_focus; - pager_config->popup_urgent_speed = cfdata->popup.urgent_speed; - pager_config->show_desk_names = cfdata->show_desk_names; - pager_config->popup_height = cfdata->popup.height; - pager_config->popup_act_height = cfdata->popup.act_height; - pager_config->drag_resist = cfdata->drag_resist; - pager_config->btn_drag = cfdata->btn.drag; - pager_config->btn_noplace = cfdata->btn.noplace; - pager_config->btn_desk = cfdata->btn.desk; - _pager_cb_config_updated(); - e_config_save_queue(); - return 1; -} - -static int -_adv_check_changed(E_Config_Dialog *cfd EINA_UNUSED, E_Config_Dialog_Data *cfdata) -{ - if ((int)pager_config->popup != cfdata->popup.show) return 1; - if (!EINA_DBL_EQ(pager_config->popup_speed, cfdata->popup.speed)) return 1; - if ((int)pager_config->flip_desk != cfdata->flip_desk) return 1; - if ((int)pager_config->disable_live_preview != !cfdata->live_preview) return 1; - if ((int)pager_config->popup_urgent != cfdata->popup.urgent_show) return 1; - if ((int)pager_config->popup_urgent_stick != cfdata->popup.urgent_stick) - return 1; - if ((int)pager_config->popup_urgent_focus != cfdata->popup.urgent_focus) - return 1; - if (!EINA_DBL_EQ(pager_config->popup_urgent_speed, cfdata->popup.urgent_speed)) - return 1; - if ((int)pager_config->show_desk_names != cfdata->show_desk_names) return 1; - if (pager_config->popup_height != cfdata->popup.height) return 1; - if (pager_config->popup_act_height != cfdata->popup.act_height) return 1; - if ((int)pager_config->drag_resist != cfdata->drag_resist) return 1; - if (pager_config->btn_drag != cfdata->btn.drag) return 1; - if (pager_config->btn_noplace != cfdata->btn.noplace) return 1; - if (pager_config->btn_desk != cfdata->btn.desk) return 1; - - return 0; -} - -static void -_update_btns(E_Config_Dialog_Data *cfdata) -{ -#if 0 - _update_btn(cfdata, cfdata->gui.ob1, cfdata->btn.drag); -#endif - - _update_btn(cfdata, cfdata->gui.ob2, cfdata->btn.noplace); - _update_btn(cfdata, cfdata->gui.ob3, cfdata->btn.desk); -} - -static void -_update_btn(E_Config_Dialog_Data *cfdata EINA_UNUSED, Evas_Object *button, const int mouse_button) -{ - char lbl[256]; - char *icon = NULL; - Evas_Object *ic = NULL; - - switch (mouse_button) - { - case 0: - snprintf(lbl, sizeof(lbl), _("Click to set")); - break; - case 1: - if (e_config->mouse_hand == E_MOUSE_HAND_RIGHT) - { - snprintf(lbl, sizeof(lbl), _("Left button")); - icon = "preferences-desktop-mouse-left"; - } - else if (e_config->mouse_hand == E_MOUSE_HAND_LEFT) - { - snprintf(lbl, sizeof(lbl), _("Right button")); - icon = "preferences-desktop-mouse-right"; - } - else - { - snprintf(lbl, sizeof(lbl), _("Button %i"), mouse_button); - icon = "preferences-desktop-mouse-extra"; - } - break; - case 2: - snprintf(lbl, sizeof(lbl), _("Middle button")); - icon = "preferences-desktop-mouse-middle"; - break; - case 3: - if (e_config->mouse_hand == E_MOUSE_HAND_RIGHT) - { - snprintf(lbl, sizeof(lbl), _("Right button")); - icon = "preferences-desktop-mouse-right"; - } - else if (e_config->mouse_hand == E_MOUSE_HAND_LEFT) - { - snprintf(lbl, sizeof(lbl), _("Left button")); - icon = "preferences-desktop-mouse-left"; - } - else - { - snprintf(lbl, sizeof(lbl), _("Button %i"), mouse_button); - icon = "preferences-desktop-mouse-extra"; - } - break; - default: - snprintf(lbl, sizeof(lbl), _("Button %i"), mouse_button); - icon = "preferences-desktop-mouse-extra"; - break; - } - e_widget_button_label_set(button, lbl); - if (icon) - { - ic = e_icon_add(evas_object_evas_get(button)); - e_util_icon_theme_set(ic, icon); - } - e_widget_button_icon_set(button, ic); -} - -static void -_grab_window_del(void *data) -{ - E_Config_Dialog_Data *cfdata; - - cfdata = e_object_data_get(data); - if (!cfdata) return; - cfdata->grab.dia = NULL; - _update_btns(cfdata); -} - -static void -_grab_window_show(void *data1, void *data2) -{ - E_Config_Dialog_Data *cfdata; - - if (!(cfdata = data2)) return; - - cfdata->grab.btn = 0; - if ((long)data1 == BUTTON_DRAG) - cfdata->grab.btn = 1; - else if ((long)data1 == BUTTON_NOPLACE) - cfdata->grab.btn = 2; - - cfdata->grab.dia = e_grab_dialog_show(cfdata->cfd->dia->win, EINA_TRUE, _grab_cb_key_down, _grab_cb_mouse_down, NULL, cfdata); - e_object_data_set(E_OBJECT(cfdata->grab.dia), cfdata); - e_object_del_attach_func_set(E_OBJECT(cfdata->grab.dia), _grab_window_del); -} - -static Eina_Bool -_grab_cb_mouse_down(void *data, EINA_UNUSED int type, void *event) -{ - E_Config_Dialog_Data *cfdata = NULL; - Ecore_Event_Mouse_Button *ev; - - ev = event; - if (!(cfdata = data)) return ECORE_CALLBACK_PASS_ON; - if (ev->buttons == 3) - { - e_util_dialog_show(_("Attention"), - _("You cannot use the right mouse button in the" - "shelf for this as it is already taken by internal" - "code for context menus." - "This button only works in the popup.")); - } - else - { - if (ev->buttons == cfdata->btn.drag) - cfdata->btn.drag = 0; - else if (ev->buttons == cfdata->btn.noplace) - cfdata->btn.noplace = 0; - else if (ev->buttons == cfdata->btn.desk) - cfdata->btn.desk = 0; - - if (cfdata->grab.btn == 1) - cfdata->btn.drag = ev->buttons; - else if (cfdata->grab.btn == 2) - cfdata->btn.noplace = ev->buttons; - else - cfdata->btn.desk = ev->buttons; - } - - e_object_del(E_OBJECT(cfdata->grab.dia)); - return ECORE_CALLBACK_PASS_ON; -} - -static Eina_Bool -_grab_cb_key_down(void *data, EINA_UNUSED int type, void *event) -{ - E_Config_Dialog_Data *cfdata = NULL; - Ecore_Event_Key *ev; - - ev = event; - if (!(cfdata = data)) return ECORE_CALLBACK_PASS_ON; - if (!strcmp(ev->key, "Delete")) - { - if (cfdata->grab.btn == 1) - cfdata->btn.drag = 0; - else if (cfdata->grab.btn == 2) - cfdata->btn.noplace = 0; - else - cfdata->btn.desk = 0; - } - e_object_del(E_OBJECT(cfdata->grab.dia)); - return ECORE_CALLBACK_PASS_ON; -} - -static void -_cb_disable_check_list(void *data, Evas_Object *obj) -{ - Eina_List *list = (Eina_List *)data; - Eina_List *l; - Evas_Object *o; - - EINA_LIST_FOREACH(list, l, o) - e_widget_disabled_set(o, !e_widget_check_checked_get(obj)); -} - diff --git a/src/modules/pager_plain/e_mod_main.c b/src/modules/pager_plain/e_mod_main.c deleted file mode 100644 index 2d14edc39..000000000 --- a/src/modules/pager_plain/e_mod_main.c +++ /dev/null @@ -1,2990 +0,0 @@ -#include "e.h" -#include "e_mod_main.h" - -/* gadcon requirements */ -static E_Gadcon_Client *_gc_init(E_Gadcon *gc, const char *name, const char *id, const char *style); -static void _gc_shutdown(E_Gadcon_Client *gcc); -static void _gc_orient(E_Gadcon_Client *gcc, E_Gadcon_Orient orient EINA_UNUSED); -static const char *_gc_label(const E_Gadcon_Client_Class *client_class EINA_UNUSED); -static Evas_Object *_gc_icon(const E_Gadcon_Client_Class *client_class EINA_UNUSED, Evas *evas); -static const char *_gc_id_new(const E_Gadcon_Client_Class *client_class EINA_UNUSED); - -/* and actually define the gadcon class that this module provides (just 1) */ -static const E_Gadcon_Client_Class _gadcon_class = -{ - GADCON_CLIENT_CLASS_VERSION, - "pager", - { - _gc_init, _gc_shutdown, _gc_orient, _gc_label, _gc_icon, _gc_id_new, NULL, - e_gadcon_site_is_not_toolbar - }, - E_GADCON_CLIENT_STYLE_INSET -}; - -/* actual module specifics */ -typedef struct _Instance Instance; -typedef struct _Pager Pager; -typedef struct _Pager_Desk Pager_Desk; -typedef struct _Pager_Win Pager_Win; -typedef struct _Pager_Popup Pager_Popup; - -struct _Instance -{ - E_Gadcon_Client *gcc; - Evas_Object *o_pager; /* table */ - Pager *pager; -}; - -struct _Pager -{ - Instance *inst; - E_Drop_Handler *drop_handler; - Pager_Popup *popup; - Evas_Object *o_table; - E_Zone *zone; - int xnum, ynum; - Eina_List *desks; - Pager_Desk *active_pd; - unsigned char dragging E_BITFIELD; - unsigned char just_dragged E_BITFIELD; - Evas_Coord dnd_x, dnd_y; - Pager_Desk *active_drop_pd; - Eina_Bool invert E_BITFIELD; -}; - -struct _Pager_Desk -{ - Pager *pager; - E_Desk *desk; - Eina_List *wins; - Evas_Object *o_desk; - Evas_Object *o_layout; - Evas_Object *o_bg; - int xpos, ypos, urgent; - int current E_BITFIELD; - struct - { - Pager *from_pager; - unsigned char in_pager E_BITFIELD; - unsigned char start E_BITFIELD; - int x, y, dx, dy, button; - } drag; -}; - -struct _Pager_Win -{ - E_Client *client; - Pager_Desk *desk; - Evas_Object *o_window; - Evas_Object *o_icon; - unsigned char skip_winlist E_BITFIELD; - struct - { - Pager *from_pager; - unsigned char start E_BITFIELD; - unsigned char in_pager E_BITFIELD; - unsigned char desktop E_BITFIELD; - int x, y, dx, dy, button; - } drag; -}; - -struct _Pager_Popup -{ - Evas_Object *popup; - Pager *pager; - Evas_Object *o_bg; - Ecore_Timer *timer; - unsigned char urgent E_BITFIELD; -}; - -static void _pager_desk_livethumb_setup(Pager_Desk *pd); -static void _pager_cb_obj_moveresize(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED); -static void _button_cb_mouse_down(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info); -static void _pager_inst_cb_menu_configure(void *data EINA_UNUSED, E_Menu *m EINA_UNUSED, E_Menu_Item *mi EINA_UNUSED); -static void _pager_inst_cb_menu_virtual_desktops_dialog(void *data, E_Menu *m EINA_UNUSED, E_Menu_Item *mi EINA_UNUSED); -static void _pager_instance_drop_zone_recalc(Instance *inst); -static Eina_Bool _pager_cb_event_bg_update(void *data EINA_UNUSED, int type EINA_UNUSED, void *event); -static Eina_Bool _pager_cb_event_client_resize(void *data EINA_UNUSED, int type EINA_UNUSED, void *event); -static Eina_Bool _pager_cb_event_client_move(void *data EINA_UNUSED, int type EINA_UNUSED, void *event); -static Eina_Bool _pager_cb_event_client_add(void *data EINA_UNUSED, int type EINA_UNUSED, void *event); -static Eina_Bool _pager_cb_event_client_remove(void *data EINA_UNUSED, int type EINA_UNUSED, void *event); -static Eina_Bool _pager_cb_event_client_iconify(void *data EINA_UNUSED, int type EINA_UNUSED, void *event); -static Eina_Bool _pager_cb_event_client_uniconify(void *data EINA_UNUSED, int type EINA_UNUSED, void *event); -static Eina_Bool _pager_cb_event_client_stick(void *data EINA_UNUSED, int type EINA_UNUSED, void *event); -static Eina_Bool _pager_cb_event_client_unstick(void *data EINA_UNUSED, int type EINA_UNUSED, void *event); -static Eina_Bool _pager_cb_event_client_desk_set(void *data EINA_UNUSED, int type EINA_UNUSED, void *event); -static Eina_Bool _pager_cb_event_client_stack(void *data EINA_UNUSED, int type EINA_UNUSED, void *event); -static Eina_Bool _pager_cb_event_client_icon_change(void *data EINA_UNUSED, int type EINA_UNUSED, void *event); -static Eina_Bool _pager_cb_event_client_urgent_change(void *data EINA_UNUSED, int type EINA_UNUSED, void *event); -static Eina_Bool _pager_cb_event_client_focus_in(void *data EINA_UNUSED, int type EINA_UNUSED, void *event); -static Eina_Bool _pager_cb_event_client_focus_out(void *data EINA_UNUSED, int type EINA_UNUSED, void *event); -static Eina_Bool _pager_cb_event_client_property(void *data EINA_UNUSED, int type EINA_UNUSED, void *event); -static Eina_Bool _pager_cb_event_zone_desk_count_set(void *data EINA_UNUSED, int type EINA_UNUSED, void *event); -static Eina_Bool _pager_cb_event_desk_show(void *data EINA_UNUSED, int type EINA_UNUSED, void *event); -static Eina_Bool _pager_cb_event_desk_name_change(void *data EINA_UNUSED, int type EINA_UNUSED, void *event); -static Eina_Bool _pager_cb_event_compositor_resize(void *data EINA_UNUSED, int type EINA_UNUSED, void *event); -static void _pager_window_cb_mouse_down(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info); -static void _pager_window_cb_mouse_up(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info); -static void _pager_window_cb_mouse_move(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info); -static void *_pager_window_cb_drag_convert(E_Drag *drag, const char *type); -static void _pager_window_cb_drag_finished(E_Drag *drag, int dropped); -static void _pager_drop_cb_enter(void *data, const char *type EINA_UNUSED, void *event_info); -static void _pager_drop_cb_move(void *data, const char *type EINA_UNUSED, void *event_info); -static void _pager_drop_cb_leave(void *data, const char *type EINA_UNUSED, void *event_info EINA_UNUSED); -static void _pager_drop_cb_drop(void *data, const char *type, void *event_info); -static void _pager_inst_cb_scroll(void *data); -static void _pager_update_drop_position(Pager *p, Evas_Coord x, Evas_Coord y); -static void _pager_desk_cb_mouse_down(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info); -static void _pager_desk_cb_mouse_up(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info); -static void _pager_desk_cb_mouse_move(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info); -static void _pager_desk_cb_drag_finished(E_Drag *drag, int dropped); -static void _pager_desk_cb_mouse_wheel(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info); -static Eina_Bool _pager_popup_cb_timeout(void *data); -static Pager *_pager_new(Evas *evas, E_Zone *zone, E_Gadcon *gc); -static void _pager_free(Pager *p); -static void _pager_fill(Pager *p, E_Gadcon *gc); -static void _pager_empty(Pager *p); -static Pager_Desk *_pager_desk_new(Pager *p, E_Desk *desk, int xpos, int ypos, Eina_Bool invert); -static void _pager_desk_free(Pager_Desk *pd); -static Pager_Desk *_pager_desk_at_coord(Pager *p, Evas_Coord x, Evas_Coord y); -static void _pager_desk_select(Pager_Desk *pd); -static Pager_Desk *_pager_desk_find(Pager *p, E_Desk *desk); -static void _pager_desk_switch(Pager_Desk *pd1, Pager_Desk *pd2); -static Pager_Win *_pager_window_new(Pager_Desk *pd, E_Client *client); -static void _pager_window_free(Pager_Win *pw); -static void _pager_window_move(Pager_Win *pw); -static Pager_Win *_pager_window_find(Pager *p, E_Client *client); -static Pager_Win *_pager_desk_window_find(Pager_Desk *pd, E_Client *client); -static Pager_Popup *_pager_popup_new(E_Zone *zone, int keyaction); -static void _pager_popup_free(Pager_Popup *pp); -static Pager_Popup *_pager_popup_find(E_Zone *zone); - -/* functions for pager popup on key actions */ -static int _pager_popup_show(void); -static void _pager_popup_hide(int switch_desk); -static Eina_Bool _pager_popup_cb_mouse_down(void *data EINA_UNUSED, int type EINA_UNUSED, void *event); -static Eina_Bool _pager_popup_cb_mouse_up(void *data EINA_UNUSED, int type EINA_UNUSED, void *event); -static Eina_Bool _pager_popup_cb_mouse_move(void *data EINA_UNUSED, int type EINA_UNUSED, void *event); -static Eina_Bool _pager_popup_cb_mouse_wheel(void *data EINA_UNUSED, int type EINA_UNUSED, void *event); -static void _pager_popup_desk_switch(int x, int y); -static void _pager_popup_modifiers_set(int mod); -static Eina_Bool _pager_popup_cb_key_down(void *data EINA_UNUSED, int type EINA_UNUSED, void *event); -static Eina_Bool _pager_popup_cb_key_up(void *data EINA_UNUSED, int type EINA_UNUSED, void *event); -static void _pager_popup_cb_action_show(E_Object *obj EINA_UNUSED, const char *params EINA_UNUSED, Ecore_Event_Key *ev EINA_UNUSED); -static void _pager_popup_cb_action_switch(E_Object *obj EINA_UNUSED, const char *params, Ecore_Event_Key *ev); - -/* variables for pager popup on key actions */ -static E_Action *act_popup_show = NULL; -static E_Action *act_popup_switch = NULL; -static Ecore_Window input_window = 0; -static Eina_List *handlers = NULL; -static Pager_Popup *act_popup = NULL; /* active popup */ -static int hold_count = 0; -static int hold_mod = 0; -static E_Desk *current_desk = NULL; -static E_Config_DD *conf_edd = NULL; -static Eina_List *pagers = NULL; - -Config *pager_config = NULL; - -static E_Gadcon_Client * -_gc_init(E_Gadcon *gc, const char *name, const char *id, const char *style) -{ - Pager *p; - Evas_Object *o; - E_Gadcon_Client *gcc; - Instance *inst; - Evas_Coord x, y, w, h; - const char *drop[] = - { - "enlightenment/pager_win", "enlightenment/border", - "enlightenment/vdesktop" - }; - - inst = E_NEW(Instance, 1); - - p = _pager_new(gc->evas, gc->zone, gc); - p->inst = inst; - inst->pager = p; - o = p->o_table; - gcc = e_gadcon_client_new(gc, name, id, style, o); - gcc->data = inst; - - inst->gcc = gcc; - inst->o_pager = o; - - evas_object_geometry_get(o, &x, &y, &w, &h); - p->drop_handler = - e_drop_handler_add(E_OBJECT(inst->gcc), NULL, p, - _pager_drop_cb_enter, _pager_drop_cb_move, - _pager_drop_cb_leave, _pager_drop_cb_drop, - drop, 3, x, y, w, h); - evas_object_event_callback_add(o, EVAS_CALLBACK_MOVE, - _pager_cb_obj_moveresize, inst); - evas_object_event_callback_add(o, EVAS_CALLBACK_RESIZE, - _pager_cb_obj_moveresize, inst); - evas_object_event_callback_add(o, EVAS_CALLBACK_MOUSE_DOWN, - _button_cb_mouse_down, inst); - pager_config->instances = eina_list_append(pager_config->instances, inst); - return gcc; -} - -static void -_gc_shutdown(E_Gadcon_Client *gcc) -{ - Instance *inst; - - inst = gcc->data; - pager_config->instances = eina_list_remove(pager_config->instances, inst); - e_drop_handler_del(inst->pager->drop_handler); - _pager_free(inst->pager); - free(inst); -} - -static void -_gc_orient(E_Gadcon_Client *gcc, E_Gadcon_Orient orient EINA_UNUSED) -{ - Instance *inst; - int aspect_w, aspect_h; - double aspect_ratio; - - inst = gcc->data; - if (inst->pager->invert) - { - aspect_w = inst->pager->ynum * inst->pager->zone->w; - aspect_h = inst->pager->xnum * inst->pager->zone->h; - } - else - { - aspect_w = inst->pager->xnum * inst->pager->zone->w; - aspect_h = inst->pager->ynum * inst->pager->zone->h; - } - - e_gadcon_client_aspect_set(gcc, aspect_w, aspect_h); - aspect_ratio = (double)aspect_w / (double)aspect_h; - - if (aspect_ratio > 1.0) - e_gadcon_client_min_size_set(gcc, 16 * aspect_ratio, 16); - else - e_gadcon_client_min_size_set(gcc, 16, 16 * aspect_ratio); -} - -static const char * -_gc_label(const E_Gadcon_Client_Class *client_class EINA_UNUSED) -{ - return _("Pager"); -} - -static Evas_Object * -_gc_icon(const E_Gadcon_Client_Class *client_class EINA_UNUSED, Evas *evas) -{ - Evas_Object *o; - char buf[PATH_MAX]; - - o = edje_object_add(evas); - snprintf(buf, sizeof(buf), "%s/e-module-pager-plain.edj", - e_module_dir_get(pager_config->module)); - edje_object_file_set(o, buf, "icon"); - return o; -} - -static const char * -_gc_id_new(const E_Gadcon_Client_Class *client_class) -{ - static char buf[4096]; - - snprintf(buf, sizeof(buf), "%s.%d", client_class->name, - eina_list_count(pager_config->instances) + 1); - return buf; -} - -static Pager * -_pager_new(Evas *evas, E_Zone *zone, E_Gadcon *gc) -{ - Pager *p; - - p = E_NEW(Pager, 1); - p->inst = NULL; - p->popup = NULL; - p->o_table = elm_table_add(e_win_evas_win_get(evas)); - E_FILL(p->o_table); - elm_table_homogeneous_set(p->o_table, 1); - p->zone = zone; - _pager_fill(p, gc); - pagers = eina_list_append(pagers, p); - return p; -} - -static void -_pager_free(Pager *p) -{ - _pager_empty(p); - evas_object_del(p->o_table); - pagers = eina_list_remove(pagers, p); - free(p); -} - -static void -_pager_fill(Pager *p, E_Gadcon *gc) -{ - int x, y; - - if (gc) - { - switch (gc->orient) - { - - case E_GADCON_ORIENT_TOP: - case E_GADCON_ORIENT_BOTTOM: - case E_GADCON_ORIENT_CORNER_TL: - case E_GADCON_ORIENT_CORNER_TR: - case E_GADCON_ORIENT_CORNER_BL: - case E_GADCON_ORIENT_CORNER_BR: - case E_GADCON_ORIENT_HORIZ: - case E_GADCON_ORIENT_FLOAT: - p->invert = EINA_FALSE; - break; - case E_GADCON_ORIENT_VERT: - case E_GADCON_ORIENT_LEFT: - case E_GADCON_ORIENT_RIGHT: - case E_GADCON_ORIENT_CORNER_LT: - case E_GADCON_ORIENT_CORNER_RT: - case E_GADCON_ORIENT_CORNER_LB: - case E_GADCON_ORIENT_CORNER_RB: - default: - p->invert = EINA_TRUE; - } - } - e_zone_desk_count_get(p->zone, &(p->xnum), &(p->ynum)); - if (p->ynum != 1) p->invert = EINA_FALSE; - for (x = 0; x < p->xnum; x++) - { - for (y = 0; y < p->ynum; y++) - { - Pager_Desk *pd; - E_Desk *desk; - - desk = e_desk_at_xy_get(p->zone, x, y); - if (desk) - { - pd = _pager_desk_new(p, desk, x, y, p->invert); - if (pd) - { - p->desks = eina_list_append(p->desks, pd); - if (desk == e_desk_current_get(desk->zone)) - _pager_desk_select(pd); - } - } - } - } -} - -static void -_pager_empty(Pager *p) -{ - p->active_pd = NULL; - while (p->desks) - { - _pager_desk_free(p->desks->data); - p->desks = eina_list_remove_list(p->desks, p->desks); - } -} - -static void -_pager_desk_livethumb_setup(Pager_Desk *pd) -{ - const char *bgfile; - Evas *e; - Evas_Object *o; - - e = evas_object_evas_get(pd->pager->o_table); - - if (!pd->o_bg) - { - pd->o_bg = e_livethumb_add(e); - e_livethumb_vsize_set(pd->o_bg, pd->desk->zone->w / 16, pd->desk->zone->h / 16); -// edje_extern_object_aspect_set(pd->o_bg, EDJE_ASPECT_CONTROL_NEITHER, -// pd->desk->zone->w / 16, pd->desk->zone->h / 16); - edje_object_part_swallow(pd->o_desk, "e.background", pd->o_bg); - } - - o = e_livethumb_thumb_get(pd->o_bg); - if (!o) o = edje_object_add(e_livethumb_evas_get(pd->o_bg)); - bgfile = e_bg_file_get(pd->desk->zone->num, pd->desk->x, pd->desk->y); - edje_object_file_set(o, bgfile, "e/desktop/background"); - e_livethumb_thumb_set(pd->o_bg, o); - eina_stringshare_del(bgfile); -} - -static Pager_Desk * -_pager_desk_new(Pager *p, E_Desk *desk, int xpos, int ypos, Eina_Bool invert) -{ - Pager_Desk *pd; - Evas_Object *o, *evo; - E_Client *ec; - int w, h; - Evas *e; - - if (!desk) return NULL; - pd = E_NEW(Pager_Desk, 1); - if (!pd) return NULL; - - pd->xpos = xpos; - pd->ypos = ypos; - pd->urgent = 0; - pd->desk = desk; - e_object_ref(E_OBJECT(desk)); - pd->pager = p; - - e = evas_object_evas_get(p->o_table); - o = edje_object_add(e); - pd->o_desk = o; - e_theme_edje_object_set(o, "base/theme/modules/pager", - "e/modules/pager/desk"); - edje_object_part_text_set(o, "e.text.label", desk->name); - if (pager_config->show_desk_names) - edje_object_signal_emit(o, "e,name,show", "e"); - - if (pager_config->disable_live_preview) - edje_object_signal_emit(pd->o_desk, "e,preview,off", "e"); - else - { - _pager_desk_livethumb_setup(pd); - edje_object_signal_emit(pd->o_desk, "e,preview,on", "e"); - } - - edje_object_size_min_calc(o, &w, &h); - E_EXPAND(o); - E_FILL(o); - evas_object_size_hint_min_set(o, w, h); - if (invert) - elm_table_pack(p->o_table, o, ypos, xpos, 1, 1); - else - elm_table_pack(p->o_table, o, xpos, ypos, 1, 1); - - evo = (Evas_Object *)edje_object_part_object_get(o, "e.eventarea"); - if (!evo) evo = o; - - evas_object_event_callback_add(evo, EVAS_CALLBACK_MOUSE_DOWN, - _pager_desk_cb_mouse_down, pd); - evas_object_event_callback_add(evo, EVAS_CALLBACK_MOUSE_UP, - _pager_desk_cb_mouse_up, pd); - evas_object_event_callback_add(evo, EVAS_CALLBACK_MOUSE_MOVE, - _pager_desk_cb_mouse_move, pd); - evas_object_event_callback_add(evo, EVAS_CALLBACK_MOUSE_WHEEL, - _pager_desk_cb_mouse_wheel, pd); - evas_object_show(o); - - o = e_layout_add(e); - pd->o_layout = o; - - e_layout_virtual_size_set(o, desk->zone->w, desk->zone->h); - edje_object_part_swallow(pd->o_desk, "e.swallow.content", pd->o_layout); - evas_object_show(o); - - E_CLIENT_FOREACH(ec) - { - Pager_Win *pw; - - if (e_client_util_ignored_get(ec)) continue; - if ((ec->new_client) || (ec->zone != desk->zone) || - ((ec->desk != desk) && (!ec->sticky))) - continue; - pw = _pager_window_new(pd, ec); - if (pw) pd->wins = eina_list_append(pd->wins, pw); - } - return pd; -} - -static void -_pager_desk_free(Pager_Desk *pd) -{ - Pager_Win *w; - - evas_object_del(pd->o_desk); - evas_object_del(pd->o_bg); - evas_object_del(pd->o_layout); - EINA_LIST_FREE(pd->wins, w) - _pager_window_free(w); - e_object_unref(E_OBJECT(pd->desk)); - free(pd); -} - -static Pager_Desk * -_pager_desk_at_coord(Pager *p, Evas_Coord x, Evas_Coord y) -{ - Eina_List *l; - Pager_Desk *pd; - - EINA_LIST_FOREACH(p->desks, l, pd) - { - Evas_Coord dx, dy, dw, dh; - - evas_object_geometry_get(pd->o_desk, &dx, &dy, &dw, &dh); - if (E_INSIDE(x, y, dx, dy, dw, dh)) return pd; - } - return NULL; -} - -static void -_pager_desk_select(Pager_Desk *pd) -{ - if (pd->current) return; - if (pd->pager->active_pd) - { - pd->pager->active_pd->current = 0; - edje_object_signal_emit(pd->pager->active_pd->o_desk, "e,state,unselected", "e"); - } - pd->current = 1; - evas_object_raise(pd->o_desk); - edje_object_signal_emit(pd->o_desk, "e,state,selected", "e"); - pd->pager->active_pd = pd; -} - -static Pager_Desk * -_pager_desk_find(Pager *p, E_Desk *desk) -{ - Eina_List *l; - Pager_Desk *pd; - - EINA_LIST_FOREACH(p->desks, l, pd) - if (pd->desk == desk) return pd; - - return NULL; -} - -static void -_pager_desk_switch(Pager_Desk *pd1, Pager_Desk *pd2) -{ - int c; - E_Zone *zone1, *zone2; - E_Desk *desk1, *desk2; - Pager_Win *pw; - Eina_List *l; - - if ((!pd1) || (!pd2) || (!pd1->desk) || (!pd2->desk)) return; - if (pd1 == pd2) return; - - desk1 = pd1->desk; - desk2 = pd2->desk; - zone1 = pd1->desk->zone; - zone2 = pd2->desk->zone; - - /* Move opened windows from on desk to the other */ - EINA_LIST_FOREACH(pd1->wins, l, pw) - { - if ((!pw) || (!pw->client) || (pw->client->iconic)) continue; - pw->client->hidden = 0; - e_client_desk_set(pw->client, desk2); - } - EINA_LIST_FOREACH(pd2->wins, l, pw) - { - if ((!pw) || (!pw->client) || (pw->client->iconic)) continue; - pw->client->hidden = 0; - e_client_desk_set(pw->client, desk1); - } - - /* Modify desktop names in the config */ - for (l = e_config->desktop_names, c = 0; l && c < 2; l = l->next) - { - E_Config_Desktop_Name *tmp_dn; - - tmp_dn = l->data; - if (!tmp_dn) continue; - if ((tmp_dn->desk_x == desk1->x) && - (tmp_dn->desk_y == desk1->y) && - (tmp_dn->zone == (int)desk1->zone->num)) - { - tmp_dn->desk_x = desk2->x; - tmp_dn->desk_y = desk2->y; - tmp_dn->zone = desk2->zone->num; - c++; - } - else if ((tmp_dn->desk_x == desk2->x) && - (tmp_dn->desk_y == desk2->y) && - (tmp_dn->zone == (int)desk2->zone->num)) - { - tmp_dn->desk_x = desk1->x; - tmp_dn->desk_y = desk1->y; - tmp_dn->zone = desk1->zone->num; - c++; - } - } - if (c > 0) e_config_save(); - e_desk_name_update(); - - /* Modify desktop backgrounds in the config */ - for (l = e_config->desktop_backgrounds, c = 0; l && c < 2; l = l->next) - { - E_Config_Desktop_Background *tmp_db; - - tmp_db = l->data; - if (!tmp_db) continue; - if ((tmp_db->desk_x == desk1->x) && - (tmp_db->desk_y == desk1->y) && - (tmp_db->zone == (int)desk1->zone->num)) - { - tmp_db->desk_x = desk2->x; - tmp_db->desk_y = desk2->y; - tmp_db->zone = desk2->zone->num; - c++; - } - else if ((tmp_db->desk_x == desk2->x) && - (tmp_db->desk_y == desk2->y) && - (tmp_db->zone == (int)desk2->zone->num)) - { - tmp_db->desk_x = desk1->x; - tmp_db->desk_y = desk1->y; - tmp_db->zone = desk1->zone->num; - c++; - } - } - if (c > 0) e_config_save(); - - /* If the current desktop has been switched, force to update of the screen */ - if (desk2 == e_desk_current_get(zone2)) - { - desk2->visible = 0; - e_desk_show(desk2); - } - if (desk1 == e_desk_current_get(zone1)) - { - desk1->visible = 0; - e_desk_show(desk1); - } -} - -static Pager_Win * -_pager_window_new(Pager_Desk *pd, E_Client *client) -{ - Pager_Win *pw; - Evas_Object *o; - int visible; - - if (!client) return NULL; - pw = E_NEW(Pager_Win, 1); - if (!pw) return NULL; - - pw->client = client; - e_object_ref(E_OBJECT(client)); - - visible = ((!client->iconic) && (!client->netwm.state.skip_pager)); - pw->skip_winlist = client->netwm.state.skip_pager; - pw->desk = pd; - - o = edje_object_add(evas_object_evas_get(pd->pager->o_table)); - pw->o_window = o; - e_theme_edje_object_set(o, "base/theme/modules/pager", - "e/modules/pager/window"); - if (visible) evas_object_show(o); - - e_layout_pack(pd->o_layout, pw->o_window); - e_layout_child_raise(pw->o_window); - - evas_object_event_callback_add(o, EVAS_CALLBACK_MOUSE_DOWN, - _pager_window_cb_mouse_down, pw); - evas_object_event_callback_add(o, EVAS_CALLBACK_MOUSE_UP, - _pager_window_cb_mouse_up, pw); - evas_object_event_callback_add(o, EVAS_CALLBACK_MOUSE_MOVE, - _pager_window_cb_mouse_move, pw); - - o = e_client_icon_add(client, evas_object_evas_get(pd->pager->o_table)); - if (o) - { - pw->o_icon = o; - evas_object_show(o); - edje_object_part_swallow(pw->o_window, "e.swallow.icon", o); - } - - if (client->urgent) - { - if (!(client->iconic)) - edje_object_signal_emit(pd->o_desk, "e,state,urgent", "e"); - edje_object_signal_emit(pw->o_window, "e,state,urgent", "e"); - } - - evas_object_show(o); - - _pager_window_move(pw); - return pw; -} - -static void -_pager_window_free(Pager_Win *pw) -{ - if ((pw->drag.from_pager) && (pw->desk->pager->dragging)) - pw->desk->pager->dragging = 0; - if (pw->o_window) evas_object_del(pw->o_window); - if (pw->o_icon) evas_object_del(pw->o_icon); - e_object_unref(E_OBJECT(pw->client)); - free(pw); -} - -static void -_pager_window_move(Pager_Win *pw) -{ - e_layout_child_move(pw->o_window, - pw->client->x - pw->client->zone->x, - pw->client->y - pw->client->zone->y); - e_layout_child_resize(pw->o_window, pw->client->w, pw->client->h); -} - -static Pager_Win * -_pager_window_find(Pager *p, E_Client *client) -{ - Eina_List *l; - Pager_Desk *pd; - - EINA_LIST_FOREACH(p->desks, l, pd) - { - Pager_Win *pw; - - pw = _pager_desk_window_find(pd, client); - if (pw) return pw; - } - return NULL; -} - -static Pager_Win * -_pager_desk_window_find(Pager_Desk *pd, E_Client *client) -{ - Eina_List *l; - Pager_Win *pw; - - EINA_LIST_FOREACH(pd->wins, l, pw) - if (pw->client == client) return pw; - - return NULL; -} - -static void -_pager_popup_cb_del(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) -{ - Pager_Popup *pp = data; - E_FREE_FUNC(pp->timer, ecore_timer_del); - _pager_free(pp->pager); - free(pp); -} - -static Pager_Popup * -_pager_popup_new(E_Zone *zone, int keyaction) -{ - Pager_Popup *pp; - Evas_Coord w, h, zx, zy, zw, zh; - int x, y, height, width; - E_Desk *desk; - - pp = E_NEW(Pager_Popup, 1); - if (!pp) return NULL; - - /* Show popup */ - pp->pager = _pager_new(e_comp->evas, zone, NULL); - - pp->pager->popup = pp; - pp->urgent = 0; - - e_zone_desk_count_get(zone, &x, &y); - - if (keyaction) - height = pager_config->popup_act_height * y; - else - height = pager_config->popup_height * y; - - width = height * (zone->w * x) / (zone->h * y); - - evas_object_move(pp->pager->o_table, 0, 0); - evas_object_resize(pp->pager->o_table, width, height); - - pp->o_bg = edje_object_add(e_comp->evas); - evas_object_name_set(pp->o_bg, "pager_popup"); - e_theme_edje_object_set(pp->o_bg, "base/theme/modules/pager", - "e/modules/pager/popup"); - desk = e_desk_current_get(zone); - if (desk) - edje_object_part_text_set(pp->o_bg, "e.text.label", desk->name); - - evas_object_size_hint_min_set(pp->pager->o_table, width, height); - edje_object_part_swallow(pp->o_bg, "e.swallow.content", pp->pager->o_table); - edje_object_size_min_calc(pp->o_bg, &w, &h); - - pp->popup = e_comp_object_util_add(pp->o_bg, E_COMP_OBJECT_TYPE_POPUP); - evas_object_layer_set(pp->popup, E_LAYER_CLIENT_POPUP); - evas_object_pass_events_set(pp->popup, 1); - e_zone_useful_geometry_get(zone, &zx, &zy, &zw, &zh); - evas_object_geometry_set(pp->popup, zx, zy, w, h); - e_comp_object_util_center(pp->popup); - evas_object_event_callback_add(pp->popup, EVAS_CALLBACK_DEL, _pager_popup_cb_del, pp); - evas_object_show(pp->popup); - - pp->timer = NULL; - - return pp; -} - -static void -_pager_popup_free(Pager_Popup *pp) -{ - E_FREE_FUNC(pp->timer, ecore_timer_del); - evas_object_hide(pp->popup); - evas_object_del(pp->popup); -} - -static Pager_Popup * -_pager_popup_find(E_Zone *zone) -{ - Eina_List *l; - Pager *p; - - EINA_LIST_FOREACH(pagers, l, p) - if ((p->popup) && (p->zone == zone)) - return p->popup; - - return NULL; -} - -static void -_pager_cb_obj_moveresize(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) -{ - Instance *inst; - - inst = data; - _pager_instance_drop_zone_recalc(inst); -} - -static void -_button_cb_mouse_down(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info) -{ - Instance *inst; - Evas_Event_Mouse_Down *ev; - E_Menu *m; - E_Menu_Item *mi; - int cx, cy; - - inst = data; - ev = event_info; - if (ev->button != 3) return; - if (inst->gcc->menu) return; - - m = e_menu_new(); - mi = e_menu_item_new(m); - e_menu_item_label_set(mi, _("Settings")); - e_util_menu_item_theme_icon_set(mi, "configure"); - e_menu_item_callback_set(mi, _pager_inst_cb_menu_configure, NULL); - - m = e_gadcon_client_util_menu_items_append(inst->gcc, m, 0); - if (e_configure_registry_exists("screen/virtual_desktops")) - { - mi = e_menu_item_new_relative(m, NULL); - e_menu_item_label_set(mi, _("Virtual Desktops Settings")); - e_util_menu_item_theme_icon_set(mi, "preferences-desktop"); - e_menu_item_callback_set(mi, _pager_inst_cb_menu_virtual_desktops_dialog, inst); - } - - e_gadcon_canvas_zone_geometry_get(inst->gcc->gadcon, &cx, &cy, - NULL, NULL); - e_menu_activate_mouse(m, e_zone_current_get(), - cx + ev->output.x, cy + ev->output.y, 1, 1, - E_MENU_POP_DIRECTION_DOWN, ev->timestamp); - evas_event_feed_mouse_up(inst->gcc->gadcon->evas, ev->button, - EVAS_BUTTON_NONE, ev->timestamp, NULL); -} - -static void -_pager_inst_cb_menu_configure(void *data EINA_UNUSED, E_Menu *m EINA_UNUSED, E_Menu_Item *mi EINA_UNUSED) -{ - if (!pager_config) return; - if (pager_config->config_dialog) return; - /* FIXME: pass zone config item */ - _config_pager_module(NULL); -} - -static E_Config_Dialog * -_pager_config_dialog(Evas_Object *parent EINA_UNUSED, const char *params EINA_UNUSED) -{ - if (!pager_config) return NULL; - if (pager_config->config_dialog) return NULL; - /* FIXME: pass zone config item */ - _config_pager_module(NULL); - return pager_config->config_dialog; -} - -static void -_pager_inst_cb_menu_virtual_desktops_dialog(void *data EINA_UNUSED, E_Menu *m EINA_UNUSED, E_Menu_Item *mi EINA_UNUSED) -{ - e_configure_registry_call("screen/virtual_desktops", NULL, NULL); -} - -static void -_pager_instance_drop_zone_recalc(Instance *inst) -{ - Evas_Coord x, y, w, h; - - e_gadcon_client_viewport_geometry_get(inst->gcc, &x, &y, &w, &h); - e_drop_handler_geometry_set(inst->pager->drop_handler, x, y, w, h); -} - -EINTERN void -_pager_cb_config_updated(void) -{ - Pager *p; - Pager_Desk *pd; - Eina_List *l, *ll; - if (!pager_config) return; - EINA_LIST_FOREACH(pagers, l, p) - EINA_LIST_FOREACH(p->desks, ll, pd) - { - if (pager_config->disable_live_preview) - { - if (pd->o_bg) evas_object_del(pd->o_bg); - pd->o_bg = NULL; - edje_object_signal_emit(pd->o_desk, "e,preview,off", "e"); - } - else - { - _pager_desk_livethumb_setup(pd); - edje_object_signal_emit(pd->o_desk, "e,preview,on", "e"); - } - if (pd->current) - edje_object_signal_emit(pd->o_desk, "e,state,selected", "e"); - else - edje_object_signal_emit(pd->o_desk, "e,state,unselected", "e"); - if (pager_config->show_desk_names) - edje_object_signal_emit(pd->o_desk, "e,name,show", "e"); - else - edje_object_signal_emit(pd->o_desk, "e,name,hide", "e"); - } -} - -static Eina_Bool -_pager_cb_event_client_resize(void *data EINA_UNUSED, int type EINA_UNUSED, void *event) -{ - E_Event_Client *ev = event; - Eina_List *l, *l2; - Pager *p; - - EINA_LIST_FOREACH(pagers, l, p) - { - Pager_Desk *pd; - - if (p->zone != ev->ec->zone) continue; - EINA_LIST_FOREACH(p->desks, l2, pd) - { - Pager_Win *pw; - - pw = _pager_desk_window_find(pd, ev->ec); - if (pw) _pager_window_move(pw); - } - } - return ECORE_CALLBACK_PASS_ON; -} - -static Eina_Bool -_pager_cb_event_client_move(void *data EINA_UNUSED, int type EINA_UNUSED, void *event) -{ - E_Event_Client *ev = event; - Eina_List *l; - Pager_Win *pw; - Pager_Desk *pd; - Pager *p; - - EINA_LIST_FOREACH(pagers, l, p) - { - Eina_List *l2; - - if (p->zone != ev->ec->zone) continue; - EINA_LIST_FOREACH(p->desks, l2, pd) - { - pw = _pager_desk_window_find(pd, ev->ec); - if (pw) _pager_window_move(pw); - } - } - - if ((act_popup) && (act_popup->pager->zone == ev->ec->zone)) - { - EINA_LIST_FOREACH(act_popup->pager->desks, l, pd) - { - pw = _pager_desk_window_find(pd, ev->ec); - if (pw) _pager_window_move(pw); - } - } - - return ECORE_CALLBACK_PASS_ON; -} - -static Eina_Bool -_pager_cb_event_client_add(void *data EINA_UNUSED, int type EINA_UNUSED, void *event) -{ - E_Event_Client *ev = event; - Eina_List *l; - Pager *p; - - EINA_LIST_FOREACH(pagers, l, p) - { - Pager_Desk *pd; - Pager_Win *pw; - - if ((p->zone != ev->ec->zone) || - (_pager_window_find(p, ev->ec))) - continue; - pd = _pager_desk_find(p, ev->ec->desk); - if (!pd) continue; - pw = _pager_window_new(pd, ev->ec); - if (pw) pd->wins = eina_list_append(pd->wins, pw); - } - - return ECORE_CALLBACK_PASS_ON; -} - -static Eina_Bool -_pager_cb_event_client_remove(void *data EINA_UNUSED, int type EINA_UNUSED, void *event) -{ - E_Event_Client *ev = event; - Eina_List *l; - Pager *p; - - EINA_LIST_FOREACH(pagers, l, p) - { - Eina_List *l2; - Pager_Desk *pd; - - if (p->zone != ev->ec->zone) continue; - - EINA_LIST_FOREACH(p->desks, l2, pd) - { - Pager_Win *pw; - - pw = _pager_desk_window_find(pd, ev->ec); - if (!pw) continue; - pd->wins = eina_list_remove(pd->wins, pw); - _pager_window_free(pw); - } - } - return ECORE_CALLBACK_PASS_ON; -} - -static Eina_Bool -_pager_cb_event_client_iconify(void *data EINA_UNUSED, int type EINA_UNUSED, void *event) -{ - E_Event_Client *ev = event; - Eina_List *l; - Pager *p; - - EINA_LIST_FOREACH(pagers, l, p) - { - Eina_List *l2; - Pager_Desk *pd; - - if (p->zone != ev->ec->zone) continue; - - EINA_LIST_FOREACH(p->desks, l2, pd) - { - Pager_Win *pw; - - pw = _pager_desk_window_find(pd, ev->ec); - if (!pw) continue; - if ((pw->drag.from_pager) && (pw->desk->pager->dragging)) - pw->desk->pager->dragging = 0; - evas_object_hide(pw->o_window); - } - } - - return ECORE_CALLBACK_PASS_ON; -} - -static Eina_Bool -_pager_cb_event_client_uniconify(void *data EINA_UNUSED, int type EINA_UNUSED, void *event) -{ - E_Event_Client *ev = event; - Eina_List *l; - Pager *p; - - EINA_LIST_FOREACH(pagers, l, p) - { - Eina_List *l2; - Pager_Desk *pd; - - if (p->zone != ev->ec->zone) continue; - - EINA_LIST_FOREACH(p->desks, l2, pd) - { - Pager_Win *pw; - - pw = _pager_desk_window_find(pd, ev->ec); - if ((pw) && (!pw->skip_winlist)) evas_object_show(pw->o_window); - } - } - - return ECORE_CALLBACK_PASS_ON; -} - -static Eina_Bool -_pager_cb_event_client_stick(void *data EINA_UNUSED, int type EINA_UNUSED, void *event) -{ - E_Event_Client_Property *ev = event; - Eina_List *l; - Pager *p; - - if ((!(ev->property & E_CLIENT_PROPERTY_STICKY)) || (!ev->ec->sticky)) return ECORE_CALLBACK_RENEW; - EINA_LIST_FOREACH(pagers, l, p) - { - Eina_List *l2; - Pager_Desk *pd; - Pager_Win *pw; - - if (p->zone != ev->ec->zone) continue; - pw = _pager_window_find(p, ev->ec); - if (!pw) continue; - - EINA_LIST_FOREACH(p->desks, l2, pd) - if ((ev->ec->desk != pd->desk) && (!_pager_desk_window_find(pd, ev->ec))) - { - pw = _pager_window_new(pd, ev->ec); - if (pw) pd->wins = eina_list_append(pd->wins, pw); - } - } - - return ECORE_CALLBACK_PASS_ON; -} - -static Eina_Bool -_pager_cb_event_client_unstick(void *data EINA_UNUSED, int type EINA_UNUSED, void *event) -{ - E_Event_Client_Property *ev = event; - Eina_List *l; - Pager *p; - - if ((!(ev->property & E_CLIENT_PROPERTY_STICKY)) || (ev->ec->sticky)) return ECORE_CALLBACK_RENEW; - EINA_LIST_FOREACH(pagers, l, p) - { - Pager_Desk *pd; - Eina_List *l2; - - if (p->zone != ev->ec->zone) continue; - - EINA_LIST_FOREACH(p->desks, l2, pd) - if (ev->ec->desk != pd->desk) - { - Pager_Win *pw; - - pw = _pager_desk_window_find(pd, ev->ec); - if (pw) - { - pd->wins = eina_list_remove(pd->wins, pw); - _pager_window_free(pw); - } - } - } - return ECORE_CALLBACK_PASS_ON; -} - -static void -_pager_window_desk_change(Pager *pager, E_Client *ec) -{ - Eina_List *l; - Pager_Win *pw; - Pager_Desk *pd; - - /* if this pager is not for the zone of the client */ - if (pager->zone != ec->zone) - { - /* look at all desks in the pager */ - EINA_LIST_FOREACH(pager->desks, l, pd) - { - /* find this client in this desk */ - pw = _pager_desk_window_find(pd, ec); - if (!pw) continue; - /* if it is found - remove it. it does not belong in this - * pager as it probably moves zones */ - pd->wins = eina_list_remove(pd->wins, pw); - _pager_window_free(pw); - } - return; - } - /* and this pager zone is for this client */ - /* see if the window is in this pager at all */ - pw = _pager_window_find(pager, ec); - if (pw) - { - /* is it sticky */ - if (ec->sticky) - { - /* if its sticky and in this pager - its already everywhere, so abort - * doing anything else */ - return; - } - /* move it to the right desk */ - /* find the pager desk of the target desk */ - pd = _pager_desk_find(pager, ec->desk); - if (pd) - { - Pager_Win *pw2 = NULL; - E_Client *ec_above; - - /* remove it from whatever desk it was on */ - pw->desk->wins = eina_list_remove(pw->desk->wins, pw); - e_layout_unpack(pw->o_window); - - /* add it to the one its MEANT to be on */ - pw->desk = pd; - pd->wins = eina_list_append(pd->wins, pw); - e_layout_pack(pd->o_layout, pw->o_window); - - ec_above = e_util_desk_client_above(pw->client); - if (ec_above) - pw2 = _pager_desk_window_find(pd, ec_above); - if (pw2) - e_layout_child_lower_below(pw->o_window, pw2->o_window); - else - e_layout_child_raise(pw->o_window); - - _pager_window_move(pw); - } - } - /* the client isn't in this pager at all - it must have moved zones */ - else - { - if (!ec->sticky) - { - /* find the pager desk it needs to go to */ - pd = _pager_desk_find(pager, ec->desk); - if ((pd) && (!_pager_desk_window_find(pd, ec))) - { - /* create it and add it */ - pw = _pager_window_new(pd, ec); - if (pw) - { - Pager_Win *pw2 = NULL; - E_Client *ec_above; - - pd->wins = eina_list_append(pd->wins, pw); - ec_above = e_util_desk_client_above(pw->client); - if (ec_above) - pw2 = _pager_desk_window_find(pd, ec_above); - if (pw2) - e_layout_child_lower_below(pw->o_window, pw2->o_window); - else - e_layout_child_raise(pw->o_window); - _pager_window_move(pw); - } - } - } - else - { - /* go through all desks */ - EINA_LIST_FOREACH(pager->desks, l, pd) - { - /* create it and add it */ - if (_pager_desk_window_find(pd, ec)) continue; - pw = _pager_window_new(pd, ec); - if (pw) - { - Pager_Win *pw2 = NULL; - E_Client *ec_above; - - pd->wins = eina_list_append(pd->wins, pw); - ec_above = e_util_desk_client_above(pw->client); - if (ec_above) - pw2 = _pager_desk_window_find(pd, ec_above); - if (pw2) - e_layout_child_lower_below(pw->o_window, pw2->o_window); - else - e_layout_child_raise(pw->o_window); - _pager_window_move(pw); - } - } - } - } -} - -static Eina_Bool -_pager_cb_event_client_desk_set(void *data EINA_UNUSED, int type EINA_UNUSED, void *event) -{ - E_Event_Client_Desk_Set *ev = event; - Eina_List *l; - Pager *p; - - EINA_LIST_FOREACH(pagers, l, p) - _pager_window_desk_change(p, ev->ec); - - return ECORE_CALLBACK_PASS_ON; -} - -static Eina_Bool -_pager_cb_event_client_stack(void *data EINA_UNUSED, int type EINA_UNUSED, void *event) -{ - E_Event_Client *ev = event; - Eina_List *l; - Pager *p; - - EINA_LIST_FOREACH(pagers, l, p) - { - Eina_List *l2; - Pager_Desk *pd; - - if (p->zone != ev->ec->zone) continue; - EINA_LIST_FOREACH(p->desks, l2, pd) - { - Pager_Win *pw, *pw2 = NULL; - - pw = _pager_desk_window_find(pd, ev->ec); - if (pw) - { - E_Client *ec; - - ec = e_util_desk_client_below(ev->ec); - if (ec) pw2 = _pager_desk_window_find(pd, ec); - if (pw2) - { - e_layout_child_raise_above(pw->o_window, pw2->o_window); - continue; - } - ec = e_util_desk_client_above(ev->ec); - if (ec) pw2 = _pager_desk_window_find(pd, ec); - if (pw2) - { - e_layout_child_lower_below(pw->o_window, pw2->o_window); - continue; - } - } - } - } - - return ECORE_CALLBACK_PASS_ON; -} - -static Eina_Bool -_pager_cb_event_client_icon_change(void *data EINA_UNUSED, int type EINA_UNUSED, void *event) -{ - E_Event_Client_Property *ev = event; - Eina_List *l; - Pager *p; - - if (!(ev->property & E_CLIENT_PROPERTY_ICON)) return ECORE_CALLBACK_RENEW; - EINA_LIST_FOREACH(pagers, l, p) - { - Eina_List *l2; - Pager_Desk *pd; - - if (p->zone != ev->ec->zone) continue; - EINA_LIST_FOREACH(p->desks, l2, pd) - { - Pager_Win *pw; - - pw = _pager_desk_window_find(pd, ev->ec); - if (pw) - { - Evas_Object *o; - - if (pw->o_icon) - { - evas_object_del(pw->o_icon); - pw->o_icon = NULL; - } - o = e_client_icon_add(ev->ec, - evas_object_evas_get(p->o_table)); - if (o) - { - pw->o_icon = o; - evas_object_show(o); - edje_object_part_swallow(pw->o_window, - "e.swallow.icon", o); - } - } - } - } - - return ECORE_CALLBACK_PASS_ON; -} - -static Eina_Bool -_pager_cb_event_client_urgent_change(void *data EINA_UNUSED, int type EINA_UNUSED, void *event) -{ - E_Event_Client_Property *ev = event; - Eina_List *l, *l2; - Pager_Popup *pp; - E_Zone *zone; - int urgent; - Pager *p; - Pager_Desk *pd; - Pager_Win *pw; - - if (!(ev->property & E_CLIENT_PROPERTY_URGENCY)) return ECORE_CALLBACK_RENEW; - zone = ev->ec->zone; - urgent = ev->ec->urgent || ev->ec->icccm.urgent; - - if (pager_config->popup_urgent && (!e_client_util_desk_visible(ev->ec, e_desk_current_get(ev->ec->zone))) && - (pager_config->popup_urgent_focus || - ((!pager_config->popup_urgent_focus) && (!ev->ec->focused) && (!ev->ec->want_focus)))) - { - pp = _pager_popup_find(zone); - - if ((!pp) && (urgent) && !(ev->ec->iconic)) - { - pp = _pager_popup_new(zone, 0); - - if ((pp) && (!pager_config->popup_urgent_stick)) - pp->timer = ecore_timer_loop_add(pager_config->popup_urgent_speed, - _pager_popup_cb_timeout, pp); - if (pp) pp->urgent = 1; - } - } - - EINA_LIST_FOREACH(pagers, l, p) - { - if (p->zone != zone) continue; - - EINA_LIST_FOREACH(p->desks, l2, pd) - { - pw = _pager_desk_window_find(pd, ev->ec); - if (pw) - { - if (ev->ec->urgent) - { - if (!(ev->ec->iconic)) - { - if ((pd->pager) && (pd->pager->inst) && - (!pager_config->popup_urgent)) - e_gadcon_urgent_show(pd->pager->inst->gcc->gadcon); - edje_object_signal_emit(pd->o_desk, - "e,state,urgent", "e"); - } - edje_object_signal_emit(pw->o_window, - "e,state,urgent", "e"); - } - else - { - if (!(ev->ec->iconic)) - edje_object_signal_emit(pd->o_desk, - "e,state,not_urgent", "e"); - edje_object_signal_emit(pw->o_window, - "e,state,not_urgent", "e"); - } - } - } - } - - return ECORE_CALLBACK_PASS_ON; -} - -static Eina_Bool -_pager_cb_event_client_focus_in(void *data EINA_UNUSED, int type EINA_UNUSED, void *event) -{ - E_Event_Client *ev = event; - Instance *inst; - Eina_List *l, *l2; - Pager_Popup *pp; - Pager_Desk *pd; - Pager_Win *pw; - E_Zone *zone; - - zone = ev->ec->zone; - - EINA_LIST_FOREACH(pager_config->instances, l, inst) - { - if (inst->pager->zone != zone) continue; - - EINA_LIST_FOREACH(inst->pager->desks, l2, pd) - { - pw = _pager_desk_window_find(pd, ev->ec); - if (pw) - { - edje_object_signal_emit(pw->o_window, - "e,state,focused", "e"); - break; - } - } - } - - pp = _pager_popup_find(zone); - if (!pp) return ECORE_CALLBACK_PASS_ON; - - EINA_LIST_FOREACH(pp->pager->desks, l, pd) - { - pw = _pager_desk_window_find(pd, ev->ec); - if (pw) - { - edje_object_signal_emit(pw->o_window, - "e,state,focused", "e"); - break; - } - } - - return ECORE_CALLBACK_PASS_ON; -} - -static Eina_Bool -_pager_cb_event_client_focus_out(void *data EINA_UNUSED, int type EINA_UNUSED, void *event) -{ - E_Event_Client *ev = event; - Eina_List *l; - Pager_Popup *pp; - Pager_Desk *pd; - Pager_Win *pw; - Instance *inst; - E_Zone *zone; - - zone = ev->ec->zone; - - EINA_LIST_FOREACH(pager_config->instances, l, inst) - { - Eina_List *l2; - - if (inst->pager->zone != zone) continue; - - EINA_LIST_FOREACH(inst->pager->desks, l2, pd) - { - pw = _pager_desk_window_find(pd, ev->ec); - if (pw) - { - edje_object_signal_emit(pw->o_window, - "e,state,unfocused", "e"); - break; - } - } - } - - pp = _pager_popup_find(zone); - if (!pp) return ECORE_CALLBACK_PASS_ON; - - EINA_LIST_FOREACH(pp->pager->desks, l, pd) - { - pw = _pager_desk_window_find(pd, ev->ec); - if (pw) - { - edje_object_signal_emit(pw->o_window, - "e,state,unfocused", "e"); - break; - } - } - - return ECORE_CALLBACK_PASS_ON; -} - -static Eina_Bool -_pager_cb_event_client_property(void *data EINA_UNUSED, int type EINA_UNUSED, void *event) -{ - E_Event_Client_Property *ev = event; - Eina_List *l, *l2; - int found = 0; - Pager *p; - Pager_Win *pw; - Pager_Desk *pd; - - if (!(ev->property & E_CLIENT_PROPERTY_NETWM_STATE)) return ECORE_CALLBACK_RENEW; - EINA_LIST_FOREACH(pagers, l, p) - { - if (p->zone != ev->ec->zone) continue; - - EINA_LIST_FOREACH(p->desks, l2, pd) - { - pw = _pager_desk_window_find(pd, ev->ec); - if (pw) - { - found = 1; - if (ev->ec->netwm.state.skip_pager) - { - pd->wins = eina_list_remove(pd->wins, pw); - _pager_window_free(pw); - } - } - } - } - if (found) return ECORE_CALLBACK_PASS_ON; - - /* If we did not find this window in the pager, then add it because - * the skip_pager state may have changed to 1 */ - EINA_LIST_FOREACH(pagers, l, p) - { - if ((p->zone != ev->ec->zone) || - (_pager_window_find(p, ev->ec))) - continue; - if (!ev->ec->sticky) - { - pd = _pager_desk_find(p, ev->ec->desk); - if ((pd) && (!_pager_desk_window_find(pd, ev->ec))) - { - pw = _pager_window_new(pd, ev->ec); - if (pw) - { - Pager_Win *pw2 = NULL; - E_Client *ec; - - pd->wins = eina_list_append(pd->wins, pw); - ec = e_util_desk_client_above(pw->client); - if (ec) - pw2 = _pager_desk_window_find(pd, ec); - if (pw2) - e_layout_child_lower_below(pw->o_window, pw2->o_window); - else - e_layout_child_raise(pw->o_window); - _pager_window_move(pw); - } - } - } - else - { - EINA_LIST_FOREACH(p->desks, l2, pd) - { - if (_pager_desk_window_find(pd, ev->ec)) continue; - pw = _pager_window_new(pd, ev->ec); - if (pw) - { - Pager_Win *pw2 = NULL; - E_Client *ec; - - pd->wins = eina_list_append(pd->wins, pw); - ec = e_util_desk_client_above(pw->client); - if (ec) - pw2 = _pager_desk_window_find(pd, ec); - if (pw2) - e_layout_child_lower_below(pw->o_window, pw2->o_window); - else - e_layout_child_raise(pw->o_window); - _pager_window_move(pw); - } - } - } - } - - return ECORE_CALLBACK_PASS_ON; -} - -static Eina_Bool -_pager_cb_event_zone_desk_count_set(void *data EINA_UNUSED, int type EINA_UNUSED, void *event EINA_UNUSED) -{ - Eina_List *l; - Pager *p; - - EINA_LIST_FOREACH(pagers, l, p) - { - _pager_empty(p); - _pager_fill(p, p->inst ? p->inst->gcc->gadcon : NULL); - if (p->inst) _gc_orient(p->inst->gcc, p->inst->gcc->gadcon->orient); - } - - return ECORE_CALLBACK_PASS_ON; -} - -static Eina_Bool -_pager_cb_event_desk_show(void *data EINA_UNUSED, int type EINA_UNUSED, void *event) -{ - E_Event_Desk_Show *ev = event; - Eina_List *l; - Pager *p; - Pager_Popup *pp; - Pager_Desk *pd; - - EINA_LIST_FOREACH(pagers, l, p) - { - if (p->zone != ev->desk->zone) continue; - pd = _pager_desk_find(p, ev->desk); - if (pd) _pager_desk_select(pd); - - if (p->popup) - edje_object_part_text_set(p->popup->o_bg, "e.text.label", ev->desk->name); - } - - if ((pager_config->popup) && (!act_popup)) - { - if ((pp = _pager_popup_find(ev->desk->zone))) - evas_object_show(pp->popup); - else - pp = _pager_popup_new(ev->desk->zone, 0); - if (pp->timer) - ecore_timer_loop_reset(pp->timer); - else - pp->timer = ecore_timer_loop_add(pager_config->popup_speed, - _pager_popup_cb_timeout, pp); - } - - return ECORE_CALLBACK_PASS_ON; -} - -static Eina_Bool -_pager_cb_event_desk_name_change(void *data EINA_UNUSED, int type EINA_UNUSED, void *event) -{ - E_Event_Desk_Name_Change *ev = event; - Eina_List *l; - Pager *p; - - EINA_LIST_FOREACH(pagers, l, p) - { - Pager_Desk *pd; - - if (p->zone != ev->desk->zone) continue; - pd = _pager_desk_find(p, ev->desk); - if (pager_config->show_desk_names) - { - if (pd) - edje_object_part_text_set(pd->o_desk, "e.text.label", - ev->desk->name); - } - else - { - if (pd) - edje_object_part_text_set(pd->o_desk, "e.text.label", ""); - } - } - - return ECORE_CALLBACK_PASS_ON; -} - -static Eina_Bool -_pager_cb_event_bg_update(void *data EINA_UNUSED, int type EINA_UNUSED, void *event) -{ - E_Event_Bg_Update *ev = event; - Eina_List *l, *ll; - Pager *p; - Pager_Desk *pd; - E_Zone *zone; - E_Desk *desk; - - if (ev->zone == -1) - { - EINA_LIST_FOREACH(pagers, l, p) - EINA_LIST_FOREACH(p->desks, ll, pd) - _pager_desk_livethumb_setup(pd); - return ECORE_CALLBACK_RENEW; - } - zone = eina_list_nth(e_comp->zones, ev->zone); - if (!zone) return ECORE_CALLBACK_RENEW; - desk = e_desk_at_xy_get(zone, ev->desk_x, ev->desk_y); - if (!desk) return ECORE_CALLBACK_RENEW; - EINA_LIST_FOREACH(pagers, l, p) - { - pd = _pager_desk_find(p, desk); - if (!pd) continue; - _pager_desk_livethumb_setup(pd); - continue; - } - return ECORE_CALLBACK_RENEW; -} - -static Eina_Bool -_pager_cb_event_compositor_resize(void *data EINA_UNUSED, int type EINA_UNUSED, void *event EINA_UNUSED) -{ - Eina_List *l; - Pager *p; - - EINA_LIST_FOREACH(pagers, l, p) - { - Eina_List *l2; - Pager_Desk *pd; - - EINA_LIST_FOREACH(p->desks, l2, pd) - e_layout_virtual_size_set(pd->o_layout, pd->desk->zone->w, - pd->desk->zone->h); - - if (p->inst) _gc_orient(p->inst->gcc, p->inst->gcc->gadcon->orient); - /* TODO if (p->popup) */ - } - - return ECORE_CALLBACK_PASS_ON; -} - -static void -_pager_window_cb_mouse_down(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info) -{ - Evas_Event_Mouse_Down *ev; - Pager_Win *pw; - - ev = event_info; - pw = data; - - if (!pw) return; - if (pw->desk->pager->popup && !act_popup) return; - if (!pw->desk->pager->popup && ev->button == 3) return; - if (e_client_util_ignored_get(pw->client) || e_client_util_is_popup(pw->client)) return; - if (ev->button == (int)pager_config->btn_desk) return; - if ((ev->button == (int)pager_config->btn_drag) || - (ev->button == (int)pager_config->btn_noplace)) - { - Evas_Coord ox, oy; - - evas_object_geometry_get(pw->o_window, &ox, &oy, NULL, NULL); - pw->drag.in_pager = 1; - pw->drag.x = ev->canvas.x; - pw->drag.y = ev->canvas.y; - pw->drag.dx = ox - ev->canvas.x; - pw->drag.dy = oy - ev->canvas.y; - pw->drag.start = 1; - pw->drag.button = ev->button; - } -} - -static void -_pager_window_cb_mouse_up(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info) -{ - Evas_Event_Mouse_Up *ev; - Pager_Win *pw; - Pager *p; - - ev = event_info; - pw = data; - if (!pw) return; - - p = pw->desk->pager; - - if (pw->desk->pager->popup && !act_popup) return; - if (ev->button == (int)pager_config->btn_desk) return; - if ((ev->button == (int)pager_config->btn_drag) || - (ev->button == (int)pager_config->btn_noplace)) - { - if (!pw->drag.from_pager) - { - edje_object_signal_emit(pw->desk->o_desk, "e,action,drag,out", "e"); - e_comp_object_effect_unclip(pw->client->frame); - if (!pw->drag.start) p->just_dragged = 1; - pw->drag.in_pager = 0; - pw->drag.start = 0; - p->dragging = 0; - } - } -} - -static void -_pager_window_cb_mouse_move(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info) -{ - Evas_Event_Mouse_Move *ev = event_info; - Pager_Win *pw = data; - E_Drag *drag; - Evas_Object *o, *oo; - Evas_Coord x, y, w, h; - const char *drag_types[] = - { "enlightenment/pager_win", "enlightenment/border" }; - Evas_Coord dx, dy; - unsigned int resist = 0; - Evas_Coord mx, my, vx, vy; - Pager_Desk *pd; - - if (pw->client->lock_user_location) return; - if ((pw->desk->pager->popup) && (!act_popup)) return; - - /* prevent drag for a few pixels */ - if (pw->drag.start) - { - dx = pw->drag.x - ev->cur.output.x; - dy = pw->drag.y - ev->cur.output.y; - resist = pager_config->drag_resist; - - if ((unsigned int)(dx * dx) + (unsigned int)(dy * dy) <= resist * resist) - return; - - pw->desk->pager->dragging = 1; - edje_object_signal_emit(pw->desk->o_desk, "e,action,drag,in", "e"); - pw->desk->pager->active_drop_pd = pw->desk; - pw->drag.start = 0; - e_comp_object_effect_clip(pw->client->frame); - } - - /* dragging this win around inside the pager */ - if (pw->drag.in_pager) - { - /* m for mouse */ - mx = ev->cur.canvas.x; - my = ev->cur.canvas.y; - - /* find desk at pointer */ - pd = _pager_desk_at_coord(pw->desk->pager, mx, my); - if (pd) - { - int zx, zy, zw, zh; - E_Client *ec = pw->client; - - e_zone_useful_geometry_get(pd->desk->zone, &zx, &zy, &zw, &zh); - e_layout_coord_canvas_to_virtual(pd->o_layout, - mx + pw->drag.dx, - my + pw->drag.dy, &vx, &vy); - if (pd != pw->desk) - { - E_Desk *old_desk = ec->desk; - Eina_Bool was_focused = e_client_stack_focused_get(ec); - - edje_object_signal_emit(pw->desk->o_desk, "e,action,drag,out", "e"); - ec->hidden = 0; - e_client_desk_set(ec, pd->desk); - if (was_focused) - e_desk_last_focused_focus(old_desk); - edje_object_signal_emit(pd->o_desk, "e,action,drag,in", "e"); - pd->pager->active_drop_pd = pd; - } - mx = E_CLAMP(vx + zx, zx, zx + zw - ec->w); - my = E_CLAMP(vy + zy, zy, zy + zh - ec->h); - evas_object_move(ec->frame, mx, my); - } - else - { - evas_object_geometry_get(pw->o_window, &x, &y, &w, &h); - evas_object_hide(pw->o_window); - - drag = e_drag_new(x, y, drag_types, 2, pw, -1, - _pager_window_cb_drag_convert, - _pager_window_cb_drag_finished); - drag->button_mask = evas_pointer_button_down_mask_get(e_comp->evas); - - o = edje_object_add(drag->evas); - e_theme_edje_object_set(o, "base/theme/modules/pager", - "e/modules/pager/window"); - evas_object_show(o); - - oo = e_client_icon_add(pw->client, drag->evas); - if (oo) - { - evas_object_show(oo); - edje_object_part_swallow(o, "e.swallow.icon", oo); - } - - e_drag_object_set(drag, o); - e_drag_resize(drag, w, h); - e_drag_start(drag, x - pw->drag.dx, y - pw->drag.dy); - e_comp_object_util_del_list_append(drag->comp_object, oo); - - /* this prevents the desk from switching on drags */ - pw->drag.from_pager = pw->desk->pager; - pw->drag.from_pager->dragging = 1; - pw->drag.in_pager = 0; - } - } -} - -static void * -_pager_window_cb_drag_convert(E_Drag *drag, const char *type) -{ - Pager_Win *pw; - - pw = drag->data; - if (!strcmp(type, "enlightenment/pager_win")) return pw; - if (!strcmp(type, "enlightenment/border")) return pw->client; - return NULL; -} - -static void -_pager_window_cb_drag_finished(E_Drag *drag, int dropped) -{ - Pager_Win *pw; - E_Zone *zone; - E_Desk *desk; - int x = 0, y = 0, dx, dy; - - pw = drag->data; - if (!pw) return; - evas_object_show(pw->o_window); - if (!dropped) - { - int zx, zy, zw, zh; - E_Client *ec = pw->client; - - /* wasn't dropped (on pager). move it to position of mouse on screen */ - zone = e_zone_current_get(); - desk = e_desk_current_get(zone); - - e_client_zone_set(ec, zone); - if ((ec->desk != desk) && desk->visible) - { - ec->hidden = 0; - e_client_desk_set(ec, desk); - } - -#ifndef HAVE_WAYLAND_ONLY - ecore_x_pointer_last_xy_get(&x, &y); -#endif - - dx = (ec->w / 2); - dy = (ec->h / 2); - - e_zone_useful_geometry_get(zone, &zx, &zy, &zw, &zh); - - /* offset so that center of window is on mouse, but keep within desk bounds */ - if (dx < x) - { - x -= dx; - if ((ec->w < zw) && (x + ec->w > zx + zw)) - x -= x + ec->w - (zx + zw); - } - else x = 0; - - if (dy < y) - { - y -= dy; - if ((ec->h < zh) && (y + ec->h > zy + zh)) - y -= y + ec->h - (zy + zh); - } - else y = 0; - evas_object_move(ec->frame, x, y); - - if (!(ec->lock_user_stacking)) evas_object_raise(ec->frame); - } - if (pw->desk->pager->active_drop_pd) - { - edje_object_signal_emit(pw->desk->pager->active_drop_pd->o_desk, "e,action,drag,out", "e"); - pw->desk->pager->active_drop_pd = NULL; - } - if (pw->drag.from_pager) pw->drag.from_pager->dragging = 0; - pw->drag.from_pager = NULL; - e_comp_object_effect_unclip(pw->client->frame); - if (act_popup) - { - if (e_comp->comp_type == E_PIXMAP_TYPE_X) - e_grabinput_get(input_window, 0, input_window); - else - e_comp_grab_input(1, 1); - if (!hold_count) _pager_popup_hide(1); - } -} - -static void -_pager_inst_cb_scroll(void *data) -{ - Pager *p; - - p = data; - _pager_update_drop_position(p, p->dnd_x, p->dnd_y); -} - -static void -_pager_update_drop_position(Pager *p, Evas_Coord x, Evas_Coord y) -{ - Pager_Desk *pd; - - p->dnd_x = x; - p->dnd_y = y; - pd = _pager_desk_at_coord(p, x, y); - if (pd == p->active_drop_pd) return; - if (pd) - edje_object_signal_emit(pd->o_desk, "e,action,drag,in", "e"); - if (p->active_drop_pd) - edje_object_signal_emit(p->active_drop_pd->o_desk, "e,action,drag,out", "e"); - p->active_drop_pd = pd; -} - -static void -_pager_drop_cb_enter(void *data, const char *type EINA_UNUSED, void *event_info EINA_UNUSED) -{ - Pager *p = data; - - /* FIXME this fixes a segv, but the case is not easy - * reproduceable. this makes no sense either since - * the same 'pager' is passed to e_drop_handler_add - * and it works without this almost all the time. - * so this must be an issue with e_dnd code... i guess */ - if (act_popup) p = act_popup->pager; - - if (p->inst) - e_gadcon_client_autoscroll_cb_set(p->inst->gcc, _pager_inst_cb_scroll, p); -} - -static void -_pager_drop_cb_move(void *data, const char *type EINA_UNUSED, void *event_info) -{ - E_Event_Dnd_Move *ev; - Pager *p; - - ev = event_info; - p = data; - - if (act_popup) p = act_popup->pager; - - _pager_update_drop_position(p, ev->x, ev->y); - - if (p->inst) - e_gadcon_client_autoscroll_update(p->inst->gcc, ev->x, ev->y); -} - -static void -_pager_drop_cb_leave(void *data, const char *type EINA_UNUSED, void *event_info EINA_UNUSED) -{ - Pager *p = data; - - if (act_popup) p = act_popup->pager; - - if (p->active_drop_pd) - edje_object_signal_emit(p->active_drop_pd->o_desk, "e,action,drag,out", "e"); - p->active_drop_pd = NULL; - - if (p->inst) e_gadcon_client_autoscroll_cb_set(p->inst->gcc, NULL, NULL); -} - -static void -_pager_drop_cb_drop(void *data, const char *type, void *event_info) -{ - E_Event_Dnd_Drop *ev; - Pager_Desk *pd; - Pager_Desk *pd2 = NULL; - E_Client *ec = NULL; - Eina_List *l; - int dx = 0, dy = 0; - Pager_Win *pw = NULL; - Evas_Coord wx, wy, wx2, wy2; - Evas_Coord nx, ny; - Pager *p; - - ev = event_info; - p = data; - - if (act_popup) p = act_popup->pager; - - pd = _pager_desk_at_coord(p, ev->x, ev->y); - if (pd) - { - if (!strcmp(type, "enlightenment/pager_win")) - { - pw = (Pager_Win *)(ev->data); - if (pw) - { - ec = pw->client; - dx = pw->drag.dx; - dy = pw->drag.dy; - } - } - else if (!strcmp(type, "enlightenment/border")) - { - ec = ev->data; - e_layout_coord_virtual_to_canvas(pd->o_layout, ec->x, ec->y, - &wx, &wy); - e_layout_coord_virtual_to_canvas(pd->o_layout, ec->x + ec->w, - ec->y + ec->h, &wx2, &wy2); - dx = (wx - wx2) / 2; - dy = (wy - wy2) / 2; - } - else if (!strcmp(type, "enlightenment/vdesktop")) - { - pd2 = ev->data; - if (!pd2) return; - _pager_desk_switch(pd, pd2); - } - else - return; - - if (ec) - { - E_Maximize max = ec->maximized; - E_Fullscreen fs = ec->fullscreen_policy; - Eina_Bool fullscreen = ec->fullscreen; - E_Desk *old_desk = ec->desk; - Eina_Bool was_focused = e_client_stack_focused_get(ec); - - if (ec->iconic) e_client_uniconify(ec); - if (ec->maximized) - e_client_unmaximize(ec, E_MAXIMIZE_BOTH); - if (fullscreen) e_client_unfullscreen(ec); - if (pd->desk->visible) - ec->hidden = 0; - e_client_desk_set(ec, pd->desk); - if (was_focused) - e_desk_last_focused_focus(old_desk); - evas_object_raise(ec->frame); - - if ((!max) && (!fullscreen)) - { - int zx, zy, zw, zh, mx, my; - - e_layout_coord_canvas_to_virtual(pd->o_layout, - ev->x + dx, - ev->y + dy, - &nx, &ny); - e_zone_useful_geometry_get(pd->desk->zone, - &zx, &zy, &zw, &zh); - - mx = E_CLAMP(nx + zx, zx, zx + zw - ec->w); - my = E_CLAMP(ny + zy, zy, zy + zh - ec->h); - evas_object_move(ec->frame, mx, my); - } - if (max) e_client_maximize(ec, max); - if (fullscreen) e_client_fullscreen(ec, fs); - } - } - - EINA_LIST_FOREACH(p->desks, l, pd) - { - if (!p->active_drop_pd) break; - if (pd == p->active_drop_pd) - { - edje_object_signal_emit(pd->o_desk, "e,action,drag,out", "e"); - p->active_drop_pd = NULL; - } - } - - if (p->inst) e_gadcon_client_autoscroll_cb_set(p->inst->gcc, NULL, NULL); -} - -static void -_pager_desk_cb_mouse_down(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info) -{ - Evas_Event_Mouse_Down *ev; - Pager_Desk *pd; - Evas_Coord ox, oy; - - ev = event_info; - pd = data; - if (!pd) return; - if ((!pd->pager->popup) && (ev->button == 3)) return; - if (ev->button == (int)pager_config->btn_desk) - { - evas_object_geometry_get(pd->o_desk, &ox, &oy, NULL, NULL); - pd->drag.start = 1; - pd->drag.in_pager = 1; - pd->drag.dx = ox - ev->canvas.x; - pd->drag.dy = oy - ev->canvas.y; - pd->drag.x = ev->canvas.x; - pd->drag.y = ev->canvas.y; - pd->drag.button = ev->button; - } - else - { - pd->drag.dx = pd->drag.dy = pd->drag.x = pd->drag.y = 0; - } - pd->pager->just_dragged = 0; -} - -static void -_pager_desk_cb_mouse_up(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info) -{ - Evas_Event_Mouse_Up *ev; - Pager_Desk *pd; - Pager *p; - - ev = event_info; - pd = data; - - if (!pd) return; - p = pd->pager; - - /* FIXME: pd->pager->dragging is 0 when finishing a drag from desk to desk */ - if ((ev->button == 1) && (!pd->pager->dragging) && - (!pd->pager->just_dragged)) - { - current_desk = pd->desk; - e_desk_show(pd->desk); - pd->drag.start = 0; - pd->drag.in_pager = 0; - p->active_drop_pd = NULL; - } - else if (ev->button == (int)pager_config->btn_desk) - { - if (pd->pager->dragging) pd->pager->dragging = 0; - pd->drag.start = 0; - pd->drag.in_pager = 0; - } - - if ((p->popup) && (p->popup->urgent)) _pager_popup_free(p->popup); -} - -static void -_pager_desk_cb_mouse_move(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info) -{ - Evas_Event_Mouse_Move *ev; - Pager_Desk *pd; - Evas_Coord dx, dy; - unsigned int resist = 0; - E_Drag *drag; - Evas_Object *o, *oo, *o_icon; - Evas_Coord x, y, w, h; - const char *drag_types[] = { "enlightenment/vdesktop" }; - Pager_Win *pw; - Eina_List *l; - - ev = event_info; - - pd = data; - if (!pd) return; - /* prevent drag for a few pixels */ - if (pd->drag.start) - { - dx = pd->drag.x - ev->cur.output.x; - dy = pd->drag.y - ev->cur.output.y; - if ((pd->pager) && (pd->pager->inst)) - resist = pager_config->drag_resist; - - if (((unsigned int)(dx * dx) + (unsigned int)(dy * dy)) <= - (resist * resist)) return; - - if (pd->pager) pd->pager->dragging = 1; - pd->drag.start = 0; - } - - if (pd->drag.in_pager && pd->pager) - { - evas_object_geometry_get(pd->o_desk, &x, &y, &w, &h); - drag = e_drag_new(x, y, drag_types, 1, pd, -1, - NULL, _pager_desk_cb_drag_finished); - drag->button_mask = evas_pointer_button_down_mask_get(e_comp->evas); - - /* redraw the desktop theme above */ - o = edje_object_add(drag->evas); - e_theme_edje_object_set(o, "base/theme/modules/pager", - "e/modules/pager/desk"); - evas_object_show(o); - e_drag_object_set(drag, o); - - /* and redraw is content */ - oo = e_layout_add(drag->evas); - e_layout_virtual_size_set(oo, pd->pager->zone->w, pd->pager->zone->h); - edje_object_part_swallow(o, "e.swallow.content", oo); - e_comp_object_util_del_list_append(drag->comp_object, oo); - evas_object_show(oo); - - EINA_LIST_FOREACH(pd->wins, l, pw) - { - int zx, zy; - - if ((!pw) || (pw->client->iconic) - || (pw->client->netwm.state.skip_pager)) - continue; - - o = edje_object_add(drag->evas); - e_theme_edje_object_set(o, "base/theme/modules/pager", - "e/modules/pager/window"); - e_layout_pack(oo, o); - e_layout_child_raise(o); - e_zone_useful_geometry_get(pw->desk->desk->zone, - &zx, &zy, NULL, NULL); - e_layout_child_move(o, pw->client->x - zx, pw->client->y - zy); - e_layout_child_resize(o, pw->client->w, pw->client->h); - e_comp_object_util_del_list_append(drag->comp_object, o); - evas_object_show(o); - - if ((o_icon = e_client_icon_add(pw->client, drag->evas))) - { - evas_object_show(o_icon); - edje_object_part_swallow(o, "e.swallow.icon", o_icon); - e_comp_object_util_del_list_append(drag->comp_object, o_icon); - } - } - e_drag_resize(drag, w, h); - e_drag_start(drag, x - pd->drag.dx, y - pd->drag.dy); - - pd->drag.from_pager = pd->pager; - pd->drag.from_pager->dragging = 1; - pd->drag.in_pager = 0; - } -} - -static void -_pager_desk_cb_drag_finished(E_Drag *drag, int dropped) -{ - Pager_Desk *pd; - Pager_Desk *pd2 = NULL; - Eina_List *l; - E_Desk *desk; - E_Zone *zone; - Pager *p; - - pd = drag->data; - if (!pd) return; - if (!dropped) - { - /* wasn't dropped on pager, switch with current desktop */ - if (!pd->desk) return; - zone = e_zone_current_get(); - desk = e_desk_current_get(zone); - EINA_LIST_FOREACH(pagers, l, p) - { - pd2 = _pager_desk_find(p, desk); - if (pd2) break; - } - _pager_desk_switch(pd, pd2); - } - if (pd->drag.from_pager) - { - pd->drag.from_pager->dragging = 0; - pd->drag.from_pager->just_dragged = 0; - } - if (pd->pager->active_drop_pd) - { - edje_object_signal_emit(pd->pager->active_drop_pd->o_desk, "e,action,drag,out", "e"); - pd->pager->active_drop_pd = NULL; - } - pd->drag.from_pager = NULL; - - if (act_popup) - { - if (e_comp->comp_type == E_PIXMAP_TYPE_X) - e_grabinput_get(input_window, 0, input_window); - else - e_comp_grab_input(1, 1); - if (!hold_count) _pager_popup_hide(1); - } -} - -static void -_pager_desk_cb_mouse_wheel(void *data, Evas *e EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info) -{ - Evas_Event_Mouse_Wheel *ev; - Pager_Desk *pd; - - ev = event_info; - pd = data; - - if (pd->pager->popup) return; - - if (pager_config->flip_desk) - e_zone_desk_linear_flip_by(pd->desk->zone, ev->z); -} - -static Eina_Bool -_pager_popup_cb_timeout(void *data) -{ - Pager_Popup *pp; - - pp = data; - pp->timer = NULL; - _pager_popup_free(pp); - -#ifndef HAVE_WAYLAND_ONLY - if (e_comp->comp_type == E_PIXMAP_TYPE_X) - { - if (input_window) - { - e_grabinput_release(input_window, input_window); - ecore_x_window_free(input_window); - input_window = 0; - } - } -#endif - if (e_comp->comp_type == E_PIXMAP_TYPE_WL) - { - e_comp_ungrab_input(1, 1); - input_window = 0; - } - - return ECORE_CALLBACK_CANCEL; -} - -/************************************************************************/ -/* popup-on-keyaction functions */ -static int -_pager_popup_show(void) -{ - E_Zone *zone; - int x, y, w, h; - Pager_Popup *pp; - //const char *drop[] = - //{ - //"enlightenment/pager_win", "enlightenment/border", - //"enlightenment/vdesktop" - //}; - - if ((act_popup) || (input_window)) return 0; - - zone = e_zone_current_get(); - - pp = _pager_popup_find(zone); - if (pp) _pager_popup_free(pp); - -#ifndef HAVE_WAYLAND_ONLY - if (e_comp->comp_type == E_PIXMAP_TYPE_X) - { - input_window = ecore_x_window_input_new(e_comp->win, 0, 0, 1, 1); - ecore_x_window_show(input_window); - if (!e_grabinput_get(input_window, 0, input_window)) - { - ecore_x_window_free(input_window); - input_window = 0; - return 0; - } - } -#endif - if (e_comp->comp_type == E_PIXMAP_TYPE_WL) - { - input_window = e_comp->ee_win; - e_comp_grab_input(1, 1); - } - - handlers = eina_list_append - (handlers, ecore_event_handler_add - (ECORE_EVENT_KEY_DOWN, _pager_popup_cb_key_down, NULL)); - handlers = eina_list_append - (handlers, ecore_event_handler_add - (ECORE_EVENT_KEY_UP, _pager_popup_cb_key_up, NULL)); - handlers = eina_list_append - (handlers, ecore_event_handler_add - (ECORE_EVENT_MOUSE_BUTTON_DOWN, _pager_popup_cb_mouse_down, NULL)); - handlers = eina_list_append - (handlers, ecore_event_handler_add - (ECORE_EVENT_MOUSE_BUTTON_UP, _pager_popup_cb_mouse_up, NULL)); - handlers = eina_list_append - (handlers, ecore_event_handler_add - (ECORE_EVENT_MOUSE_WHEEL, _pager_popup_cb_mouse_wheel, NULL)); - handlers = eina_list_append - (handlers, ecore_event_handler_add - (ECORE_EVENT_MOUSE_MOVE, _pager_popup_cb_mouse_move, NULL)); - - act_popup = _pager_popup_new(zone, 1); - - evas_object_geometry_get(act_popup->pager->o_table, &x, &y, &w, &h); - - current_desk = e_desk_current_get(zone); - - return 1; -} - -static void -_pager_popup_hide(int switch_desk) -{ - hold_count = 0; - hold_mod = 0; - while (handlers) - { - ecore_event_handler_del(handlers->data); - handlers = eina_list_remove_list(handlers, handlers); - } - - act_popup->timer = ecore_timer_loop_add(0.1, _pager_popup_cb_timeout, act_popup); - - if ((switch_desk) && (current_desk)) e_desk_show(current_desk); - - act_popup = NULL; -} - -static void -_pager_popup_modifiers_set(int mod) -{ - if (!act_popup) return; - hold_mod = mod; - hold_count = 0; - if (hold_mod & ECORE_EVENT_MODIFIER_SHIFT) hold_count++; - if (hold_mod & ECORE_EVENT_MODIFIER_CTRL) hold_count++; - if (hold_mod & ECORE_EVENT_MODIFIER_ALT) hold_count++; - if (hold_mod & ECORE_EVENT_MODIFIER_WIN) hold_count++; -} - -static void -_pager_popup_desk_switch(int x, int y) -{ - int max_x, max_y, desk_x, desk_y; - Pager_Desk *pd; - Pager_Popup *pp = act_popup; - - e_zone_desk_count_get(pp->pager->zone, &max_x, &max_y); - - desk_x = current_desk->x + x; - desk_y = current_desk->y + y; - - if (desk_x < 0) - desk_x = max_x - 1; - else if (desk_x >= max_x) - desk_x = 0; - - if (desk_y < 0) - desk_y = max_y - 1; - else if (desk_y >= max_y) - desk_y = 0; - - current_desk = e_desk_at_xy_get(pp->pager->zone, desk_x, desk_y); - - pd = _pager_desk_find(pp->pager, current_desk); - if (pd) _pager_desk_select(pd); - - edje_object_part_text_set(pp->o_bg, "e.text.label", current_desk->name); -} - -static void -_pager_popup_cb_action_show(E_Object *obj EINA_UNUSED, const char *params EINA_UNUSED, Ecore_Event_Key *ev EINA_UNUSED) -{ - if (_pager_popup_show()) - _pager_popup_modifiers_set(ev->modifiers); -} - -static void -_pager_popup_cb_action_switch(E_Object *obj EINA_UNUSED, const char *params, Ecore_Event_Key *ev) -{ - int max_x, max_y, desk_x; - int x = 0, y = 0; - - if (!act_popup) - { - if (_pager_popup_show()) - _pager_popup_modifiers_set(ev->modifiers); - else - return; - } - - e_zone_desk_count_get(act_popup->pager->zone, &max_x, &max_y); - desk_x = current_desk->x /* + x <=this is always 0 */; - - if (!strcmp(params, "left")) - x = -1; - else if (!strcmp(params, "right")) - x = 1; - else if (!strcmp(params, "up")) - y = -1; - else if (!strcmp(params, "down")) - y = 1; - else if (!strcmp(params, "next")) - { - x = 1; - if (desk_x == max_x - 1) - y = 1; - } - else if (!strcmp(params, "prev")) - { - x = -1; - if (desk_x == 0) - y = -1; - } - - _pager_popup_desk_switch(x, y); -} - -static Eina_Bool -_pager_popup_cb_mouse_down(void *data EINA_UNUSED, int type EINA_UNUSED, void *event) -{ - Ecore_Event_Mouse_Button *ev; - Pager_Popup *pp = act_popup; - - ev = event; - if (ev->window != input_window) return ECORE_CALLBACK_PASS_ON; - - evas_event_feed_mouse_down(evas_object_evas_get(pp->popup), ev->buttons, - 0, ev->timestamp, NULL); - return ECORE_CALLBACK_PASS_ON; -} - -static Eina_Bool -_pager_popup_cb_mouse_up(void *data EINA_UNUSED, int type EINA_UNUSED, void *event) -{ - Ecore_Event_Mouse_Button *ev; - Pager_Popup *pp = act_popup; - - ev = event; - if (ev->window != input_window) return ECORE_CALLBACK_PASS_ON; - - evas_event_feed_mouse_up(evas_object_evas_get(pp->popup), ev->buttons, - 0, ev->timestamp, NULL); - return ECORE_CALLBACK_PASS_ON; -} - -static Eina_Bool -_pager_popup_cb_mouse_move(void *data EINA_UNUSED, int type EINA_UNUSED, void *event) -{ - Ecore_Event_Mouse_Move *ev; - Pager_Popup *pp = act_popup; - int x, y; - - ev = event; - if (ev->window != input_window) return 1; - - evas_object_geometry_get(pp->popup, &x, &y, NULL, NULL); - evas_event_feed_mouse_move(evas_object_evas_get(pp->popup), - ev->x - x + pp->pager->zone->x, - ev->y - y + pp->pager->zone->y, - ev->timestamp, NULL); - return ECORE_CALLBACK_PASS_ON; -} - -static Eina_Bool -_pager_popup_cb_mouse_wheel(void *data EINA_UNUSED, int type EINA_UNUSED, void *event) -{ - Ecore_Event_Mouse_Wheel *ev = event; - Pager_Popup *pp = act_popup; - int max_x; - - e_zone_desk_count_get(pp->pager->zone, &max_x, NULL); - - if (current_desk->x + ev->z >= max_x) - _pager_popup_desk_switch(1, 1); - else if (current_desk->x + ev->z < 0) - _pager_popup_desk_switch(-1, -1); - else - _pager_popup_desk_switch(ev->z, 0); - - return ECORE_CALLBACK_PASS_ON; -} - -static Eina_Bool -_pager_popup_cb_key_down(void *data EINA_UNUSED, int type EINA_UNUSED, void *event) -{ - Ecore_Event_Key *ev; - - ev = event; - if (ev->window != input_window) return ECORE_CALLBACK_PASS_ON; - if (!strcmp(ev->key, "Up")) - _pager_popup_desk_switch(0, -1); - else if (!strcmp(ev->key, "Down")) - _pager_popup_desk_switch(0, 1); - else if (!strcmp(ev->key, "Left")) - _pager_popup_desk_switch(-1, 0); - else if (!strcmp(ev->key, "Right")) - _pager_popup_desk_switch(1, 0); - else if (!strcmp(ev->key, "Escape")) - _pager_popup_hide(0); - else if ((!strcmp(ev->key, "Return")) || (!strcmp(ev->key, "KP_Enter")) || - (!strcmp(ev->key, "space"))) - { - Pager_Popup *pp = act_popup; - - if (pp) - { - E_Desk *desk; - - desk = e_desk_at_xy_get(pp->pager->zone, - current_desk->x, current_desk->y); - if (desk) e_desk_show(desk); - } - _pager_popup_hide(0); - } - else - { - E_Config_Binding_Key *binding; - Eina_List *l; - - EINA_LIST_FOREACH(e_bindings->key_bindings, l, binding) - { - E_Binding_Modifier mod = 0; - - if ((binding->action) && (strcmp(binding->action, "pager_switch"))) - continue; - - if (ev->modifiers & ECORE_EVENT_MODIFIER_SHIFT) - mod |= E_BINDING_MODIFIER_SHIFT; - if (ev->modifiers & ECORE_EVENT_MODIFIER_CTRL) - mod |= E_BINDING_MODIFIER_CTRL; - if (ev->modifiers & ECORE_EVENT_MODIFIER_ALT) - mod |= E_BINDING_MODIFIER_ALT; - if (ev->modifiers & ECORE_EVENT_MODIFIER_WIN) - mod |= E_BINDING_MODIFIER_WIN; - - if (binding->key && (!strcmp(binding->key, ev->key)) && - ((binding->modifiers == mod))) - { - E_Action *act; - - act = e_action_find(binding->action); - - if (act) - { - if (act->func.go_key) - act->func.go_key(NULL, binding->params, ev); - } - } - } - } - return ECORE_CALLBACK_PASS_ON; -} - -static Eina_Bool -_pager_popup_cb_key_up(void *data EINA_UNUSED, int type EINA_UNUSED, void *event) -{ - Ecore_Event_Key *ev; - - ev = event; - if (!(act_popup)) return ECORE_CALLBACK_PASS_ON; - - if (hold_mod) - { - if ((hold_mod & ECORE_EVENT_MODIFIER_SHIFT) && - (!strcmp(ev->key, "Shift_L"))) hold_count--; - else if ((hold_mod & ECORE_EVENT_MODIFIER_SHIFT) && - (!strcmp(ev->key, "Shift_R"))) - hold_count--; - else if ((hold_mod & ECORE_EVENT_MODIFIER_CTRL) && - (!strcmp(ev->key, "Control_L"))) - hold_count--; - else if ((hold_mod & ECORE_EVENT_MODIFIER_CTRL) && - (!strcmp(ev->key, "Control_R"))) - hold_count--; - else if ((hold_mod & ECORE_EVENT_MODIFIER_ALT) && - (!strcmp(ev->key, "Alt_L"))) - hold_count--; - else if ((hold_mod & ECORE_EVENT_MODIFIER_ALT) && - (!strcmp(ev->key, "Alt_R"))) - hold_count--; - else if ((hold_mod & ECORE_EVENT_MODIFIER_ALT) && - (!strcmp(ev->key, "Meta_L"))) - hold_count--; - else if ((hold_mod & ECORE_EVENT_MODIFIER_ALT) && - (!strcmp(ev->key, "Meta_R"))) - hold_count--; - else if ((hold_mod & ECORE_EVENT_MODIFIER_ALT) && - (!strcmp(ev->key, "Super_L"))) - hold_count--; - else if ((hold_mod & ECORE_EVENT_MODIFIER_ALT) && - (!strcmp(ev->key, "Super_R"))) - hold_count--; - else if ((hold_mod & ECORE_EVENT_MODIFIER_WIN) && - (!strcmp(ev->key, "Super_L"))) - hold_count--; - else if ((hold_mod & ECORE_EVENT_MODIFIER_WIN) && - (!strcmp(ev->key, "Super_R"))) - hold_count--; - else if ((hold_mod & ECORE_EVENT_MODIFIER_WIN) && - (!strcmp(ev->key, "Mode_switch"))) - hold_count--; - else if ((hold_mod & ECORE_EVENT_MODIFIER_WIN) && - (!strcmp(ev->key, "Meta_L"))) - hold_count--; - else if ((hold_mod & ECORE_EVENT_MODIFIER_WIN) && - (!strcmp(ev->key, "Meta_R"))) - hold_count--; - if ((hold_count <= 0) && (!act_popup->pager->dragging)) - { - _pager_popup_hide(1); - return ECORE_CALLBACK_PASS_ON; - } - } - - return ECORE_CALLBACK_PASS_ON; -} - -/***************************************************************************/ -/* module setup */ -E_API E_Module_Api e_modapi = -{ - E_MODULE_API_VERSION, "Pager" -}; - -E_API void * -e_modapi_init(E_Module *m) -{ - E_Module *p; - - p = e_module_find("pager"); - if (p && p->enabled) - { - e_util_dialog_show(_("Error"), _("Pager Plain module cannot be loaded at the same time as Pager!")); - return NULL; - } - conf_edd = E_CONFIG_DD_NEW("Pager_Config", Config); -#undef T -#undef D -#define T Config -#define D conf_edd - E_CONFIG_VAL(D, T, popup, UINT); - E_CONFIG_VAL(D, T, popup_speed, DOUBLE); - E_CONFIG_VAL(D, T, popup_urgent, UINT); - E_CONFIG_VAL(D, T, popup_urgent_stick, UINT); - E_CONFIG_VAL(D, T, popup_urgent_speed, DOUBLE); - E_CONFIG_VAL(D, T, show_desk_names, UINT); - E_CONFIG_VAL(D, T, popup_height, INT); - E_CONFIG_VAL(D, T, popup_act_height, INT); - E_CONFIG_VAL(D, T, drag_resist, UINT); - E_CONFIG_VAL(D, T, btn_drag, UCHAR); - E_CONFIG_VAL(D, T, btn_noplace, UCHAR); - E_CONFIG_VAL(D, T, btn_desk, UCHAR); - E_CONFIG_VAL(D, T, flip_desk, UCHAR); - E_CONFIG_VAL(D, T, disable_live_preview, UCHAR); - - pager_config = e_config_domain_load("module.pager_plain", conf_edd); - - if (!pager_config) - { - pager_config = E_NEW(Config, 1); - pager_config->popup = 1; - pager_config->popup_speed = 1.0; - pager_config->popup_urgent = 0; - pager_config->popup_urgent_stick = 0; - pager_config->popup_urgent_speed = 1.5; - pager_config->show_desk_names = 0; - pager_config->popup_height = 60; - pager_config->popup_act_height = 60; - pager_config->drag_resist = 3; - pager_config->btn_drag = 1; - pager_config->btn_noplace = 2; - pager_config->btn_desk = 2; - pager_config->flip_desk = 0; - pager_config->disable_live_preview = 1; - } - E_CONFIG_LIMIT(pager_config->popup, 0, 1); - E_CONFIG_LIMIT(pager_config->popup_speed, 0.1, 10.0); - E_CONFIG_LIMIT(pager_config->popup_urgent, 0, 1); - E_CONFIG_LIMIT(pager_config->popup_urgent_stick, 0, 1); - E_CONFIG_LIMIT(pager_config->popup_urgent_speed, 0.1, 10.0); - E_CONFIG_LIMIT(pager_config->show_desk_names, 0, 1); - E_CONFIG_LIMIT(pager_config->popup_height, 20, 200); - E_CONFIG_LIMIT(pager_config->popup_act_height, 20, 200); - E_CONFIG_LIMIT(pager_config->drag_resist, 0, 50); - E_CONFIG_LIMIT(pager_config->flip_desk, 0, 1); - E_CONFIG_LIMIT(pager_config->btn_drag, 0, 32); - E_CONFIG_LIMIT(pager_config->btn_noplace, 0, 32); - E_CONFIG_LIMIT(pager_config->btn_desk, 0, 32); - E_CONFIG_LIMIT(pager_config->disable_live_preview, 0, 1); - - E_LIST_HANDLER_APPEND(pager_config->handlers, E_EVENT_CLIENT_RESIZE, _pager_cb_event_client_resize, NULL); - E_LIST_HANDLER_APPEND(pager_config->handlers, E_EVENT_CLIENT_MOVE, _pager_cb_event_client_move, NULL); - E_LIST_HANDLER_APPEND(pager_config->handlers, E_EVENT_CLIENT_ADD, _pager_cb_event_client_add, NULL); - E_LIST_HANDLER_APPEND(pager_config->handlers, E_EVENT_CLIENT_REMOVE, _pager_cb_event_client_remove, NULL); - E_LIST_HANDLER_APPEND(pager_config->handlers, E_EVENT_CLIENT_ICONIFY, _pager_cb_event_client_iconify, NULL); - E_LIST_HANDLER_APPEND(pager_config->handlers, E_EVENT_CLIENT_UNICONIFY, _pager_cb_event_client_uniconify, NULL); - E_LIST_HANDLER_APPEND(pager_config->handlers, E_EVENT_CLIENT_PROPERTY, _pager_cb_event_client_stick, NULL); - E_LIST_HANDLER_APPEND(pager_config->handlers, E_EVENT_CLIENT_PROPERTY, _pager_cb_event_client_unstick, NULL); - E_LIST_HANDLER_APPEND(pager_config->handlers, E_EVENT_CLIENT_DESK_SET, _pager_cb_event_client_desk_set, NULL); - E_LIST_HANDLER_APPEND(pager_config->handlers, E_EVENT_CLIENT_STACK, _pager_cb_event_client_stack, NULL); - E_LIST_HANDLER_APPEND(pager_config->handlers, E_EVENT_CLIENT_PROPERTY, _pager_cb_event_client_icon_change, NULL); - E_LIST_HANDLER_APPEND(pager_config->handlers, E_EVENT_CLIENT_PROPERTY, _pager_cb_event_client_urgent_change, NULL); - E_LIST_HANDLER_APPEND(pager_config->handlers, E_EVENT_CLIENT_FOCUS_IN, _pager_cb_event_client_focus_in, NULL); - E_LIST_HANDLER_APPEND(pager_config->handlers, E_EVENT_CLIENT_FOCUS_OUT, _pager_cb_event_client_focus_out, NULL); - E_LIST_HANDLER_APPEND(pager_config->handlers, E_EVENT_CLIENT_PROPERTY, _pager_cb_event_client_property, NULL); - E_LIST_HANDLER_APPEND(pager_config->handlers, E_EVENT_ZONE_DESK_COUNT_SET, _pager_cb_event_zone_desk_count_set, NULL); - E_LIST_HANDLER_APPEND(pager_config->handlers, E_EVENT_DESK_SHOW, _pager_cb_event_desk_show, NULL); - E_LIST_HANDLER_APPEND(pager_config->handlers, E_EVENT_DESK_NAME_CHANGE, _pager_cb_event_desk_name_change, NULL); - E_LIST_HANDLER_APPEND(pager_config->handlers, E_EVENT_COMPOSITOR_UPDATE, _pager_cb_event_compositor_resize, NULL); - E_LIST_HANDLER_APPEND(pager_config->handlers, E_EVENT_BG_UPDATE, _pager_cb_event_bg_update, NULL); - - pager_config->module = m; - - e_gadcon_provider_register(&_gadcon_class); - - e_configure_registry_item_add("extensions/pager", 40, _("Pager"), NULL, - "preferences-pager", _pager_config_dialog); - - act_popup_show = e_action_add("pager_show"); - if (act_popup_show) - { - act_popup_show->func.go_key = _pager_popup_cb_action_show; - e_action_predef_name_set(N_("Pager"), N_("Show Pager Popup"), - "pager_show", "", NULL, 0); - } - act_popup_switch = e_action_add("pager_switch"); - if (act_popup_switch) - { - act_popup_switch->func.go_key = _pager_popup_cb_action_switch; - e_action_predef_name_set(N_("Pager"), N_("Popup Desk Right"), - "pager_switch", "right", NULL, 0); - e_action_predef_name_set(N_("Pager"), N_("Popup Desk Left"), - "pager_switch", "left", NULL, 0); - e_action_predef_name_set(N_("Pager"), N_("Popup Desk Up"), - "pager_switch", "up", NULL, 0); - e_action_predef_name_set(N_("Pager"), N_("Popup Desk Down"), - "pager_switch", "down", NULL, 0); - e_action_predef_name_set(N_("Pager"), N_("Popup Desk Next"), - "pager_switch", "next", NULL, 0); - e_action_predef_name_set(N_("Pager"), N_("Popup Desk Previous"), - "pager_switch", "prev", NULL, 0); - } - - return m; -} - -E_API int -e_modapi_shutdown(E_Module *m EINA_UNUSED) -{ - e_gadcon_provider_unregister(&_gadcon_class); - - if (pager_config->config_dialog) - e_object_del(E_OBJECT(pager_config->config_dialog)); - E_FREE_LIST(pager_config->handlers, ecore_event_handler_del); - - e_configure_registry_item_del("extensions/pager"); - - e_action_del("pager_show"); - e_action_del("pager_switch"); - - e_action_predef_name_del("Pager", "Popup Desk Right"); - e_action_predef_name_del("Pager", "Popup Desk Left"); - e_action_predef_name_del("Pager", "Popup Desk Up"); - e_action_predef_name_del("Pager", "Popup Desk Down"); - e_action_predef_name_del("Pager", "Popup Desk Next"); - e_action_predef_name_del("Pager", "Popup Desk Previous"); - - E_FREE(pager_config); - E_CONFIG_DD_FREE(conf_edd); - return 1; -} - -E_API int -e_modapi_save(E_Module *m EINA_UNUSED) -{ - e_config_domain_save("module.pager_plain", conf_edd, pager_config); - return 1; -} - diff --git a/src/modules/pager_plain/e_mod_main.h b/src/modules/pager_plain/e_mod_main.h deleted file mode 100644 index 49eb5c084..000000000 --- a/src/modules/pager_plain/e_mod_main.h +++ /dev/null @@ -1,63 +0,0 @@ -#ifndef E_MOD_MAIN_H -#define E_MOD_MAIN_H - -typedef struct _Config Config; -typedef struct _Config_Item Config_Item; - -#define PAGER_RESIZE_NONE 0 -#define PAGER_RESIZE_HORZ 1 -#define PAGER_RESIZE_VERT 2 -#define PAGER_RESIZE_BOTH 3 - -#define PAGER_DESKNAME_NONE 0 -#define PAGER_DESKNAME_TOP 1 -#define PAGER_DESKNAME_BOTTOM 2 -#define PAGER_DESKNAME_LEFT 3 -#define PAGER_DESKNAME_RIGHT 4 - -struct _Config -{ - unsigned int popup; - double popup_speed; - unsigned int popup_urgent; - unsigned int popup_urgent_stick; - unsigned int popup_urgent_focus; - double popup_urgent_speed; - unsigned int show_desk_names; - int popup_act_height; /*keyaction popup */ - int popup_height; /* urgent/on-deskswitch popup*/ - unsigned int drag_resist; - unsigned int btn_drag; - unsigned int btn_noplace; - unsigned int btn_desk; - unsigned int flip_desk; - unsigned int disable_live_preview; - - /* just config state */ - E_Module *module; - E_Config_Dialog *config_dialog; - Eina_List *instances, *handlers; -}; - -E_API extern E_Module_Api e_modapi; - -E_API void *e_modapi_init(E_Module *m); -E_API int e_modapi_shutdown(E_Module *m); -E_API int e_modapi_save(E_Module *m); - -EINTERN void _pager_cb_config_updated(void); -EINTERN void _config_pager_module(Config_Item *ci); -extern Config *pager_config; - -/** - * @addtogroup Optional_Gadgets - * @{ - * - * @defgroup Module_Pager Virtual Desktop Pager - * - * Shows the grid of virtual desktops and allows changing between - * them. - * - * @} - */ -#endif diff --git a/src/modules/pager_plain/meson.build b/src/modules/pager_plain/meson.build deleted file mode 100644 index 5b450ed2c..000000000 --- a/src/modules/pager_plain/meson.build +++ /dev/null @@ -1,5 +0,0 @@ -src = files( - 'e_mod_main.c', - 'e_mod_config.c', - 'e_mod_main.h' - ) diff --git a/src/modules/pager_plain/module.desktop b/src/modules/pager_plain/module.desktop deleted file mode 100644 index dea0d4299..000000000 --- a/src/modules/pager_plain/module.desktop +++ /dev/null @@ -1,35 +0,0 @@ -[Desktop Entry] -Type=Link -Name=Pager Plain -Name[ca]=Paginador Plain -Name[cs]=Přepínač ploch Plain -Name[de]=Pager Plain -Name[eo]=Tabulpaĝilo Plain -Name[es]=Paginador Plain -Name[fr]=Miniature des bureaux ordinaire -Name[gl]=Paxinador Plain -Name[hu]=Lapozó Plain -Name[it]=Pager (senza miniature) -Name[ms]=Penghalaman Plain -Name[pt]=Paginador Plain -Name[ru]=Простой пейджер -Name[sr]=Страничник Plain -Name[tr]=Sayfalayıcı Plain -Comment=Gadget to allow you to visualize your virtual desktops and the windows they contain. -Comment[ca]=Permet visualitzar els escriptoris virtuals i les finestres que contenen. -Comment[cs]=Gadget pro zobrazení/přepínání virtuálních ploch a oken, které obsahují. -Comment[de]=Visualisiert die virtuellen Desktops und die enthaltenen Fenster. -Comment[eo]=Vidigi siajn virtualajn labortablojn kaj ties fenestrojn. -Comment[es]=Dispositivo que permite visualizar los escritorios virtuales y las ventanas que contienen. -Comment[fr]=Visualise les bureaux virtuels et les fenêtres qu'ils contiennent. -Comment[gl]=Gadget que lle permite visualizar os escritorios virtuais e as xanelas que conteñen. -Comment[hu]=Ez a modul lehetővé teszi számunkra a látványos, virtuális munkaasztalok közötti váltást. -Comment[it]=Modulo che permette di visualizzare i desktop virtuali e le finestre che contengono. -Comment[ms]=Gadjet yang membolehkan anda visualkan desktop maya anda dan tetingkap didalamnya. -Comment[nl]=Programmaatje om uw virtuele bureaubladen te visualiseren en de vensters die ze bevatten. -Comment[pt]=Permite-lhe visualizar as áreas virtuais e as janelas que nelas existem -Comment[ru]=Гаджет для отображения виртуальных столов и содержащихся на них окон. -Comment[sr]=Справица која дочарава нестварне површи и прозоре које оне садрже. -Comment[tr]=Sanal masaüstlerini ve içerisindeki pencereleri görselleştirmenizi sağlayan araç. -Icon=e-module-pager_plain -X-Enlightenment-ModuleType=utils