diff --git a/data/themes/default_pager.edc b/data/themes/default_pager.edc index 70fcbcde6..53d9a2554 100644 --- a/data/themes/default_pager.edc +++ b/data/themes/default_pager.edc @@ -173,24 +173,6 @@ group { group { name: "modules/pager/window"; parts { - part { - name: "background"; - mouse_events: 0; - type: RECT; - description { - state: "default" 0.0; - visible: 0; - rel1 { - relative: 0.0 0.0; - offset: 0 0; - } - rel2 { - relative: 1.0 1.0; - offset: -1 -1; - } - color: 0 0 0 0; - } - } part { name: "overlay"; mouse_events: 0; @@ -198,33 +180,31 @@ group { state: "default" 0.0; rel1 { relative: 0.0 0.0; - offset: 0 0; + offset: -1 -1; } rel2 { relative: 1.0 1.0; - offset: -1 -1; + offset: 2 2; } image { normal: "e17_pager_window.png"; - border: 4 7 4 2; + border: 6 13 7 5; } } } part { - name: "WindowIcon"; + name: "icon"; mouse_events: 0; type: SWALLOW; description { state: "default" 0.0; align: 1.0 1.0; - max: 20 20; + max: 24 24; aspect: 1.0 1.0; rel1 { - relative: 0.0 0.0; offset: 1 5; } rel2 { - relative: 1.0 1.0; offset: -2 -2; } color: 0 0 0 0; diff --git a/data/themes/images/e17_pager_desk_sel.png b/data/themes/images/e17_pager_desk_sel.png index a824610ed..ef7d91bd5 100644 Binary files a/data/themes/images/e17_pager_desk_sel.png and b/data/themes/images/e17_pager_desk_sel.png differ diff --git a/data/themes/images/e17_pager_window.png b/data/themes/images/e17_pager_window.png index 66a6d824d..67b4bc6d5 100644 Binary files a/data/themes/images/e17_pager_window.png and b/data/themes/images/e17_pager_window.png differ diff --git a/src/bin/e_border.c b/src/bin/e_border.c index 54a504cef..cf425c6af 100644 --- a/src/bin/e_border.c +++ b/src/bin/e_border.c @@ -77,6 +77,8 @@ static void _e_border_event_border_add_free(void *data, void *ev); static void _e_border_event_border_remove_free(void *data, void *ev); static void _e_border_event_border_zone_set_free(void *data, void *ev); static void _e_border_event_border_desk_set_free(void *data, void *ev); +static void _e_border_event_border_raise_free(void *data, void *ev); +static void _e_border_event_border_lower_free(void *data, void *ev); static void _e_border_event_border_resize_free(void *data, void *ev); static void _e_border_event_border_move_free(void *data, void *ev); static void _e_border_event_border_show_free(void *data, void *ev); @@ -116,6 +118,8 @@ int E_EVENT_BORDER_ICONIFY = 0; int E_EVENT_BORDER_UNICONIFY = 0; int E_EVENT_BORDER_STICK = 0; int E_EVENT_BORDER_UNSTICK = 0; +int E_EVENT_BORDER_RAISE = 0; +int E_EVENT_BORDER_LOWER = 0; #define GRAV_SET(bd, grav) \ printf("GRAV TO %i\n", grav); \ @@ -157,6 +161,8 @@ e_border_init(void) E_EVENT_BORDER_UNICONIFY = ecore_event_type_new(); E_EVENT_BORDER_STICK = ecore_event_type_new(); E_EVENT_BORDER_UNSTICK = ecore_event_type_new(); + E_EVENT_BORDER_RAISE = ecore_event_type_new(); + E_EVENT_BORDER_LOWER = ecore_event_type_new(); return 1; } @@ -582,6 +588,15 @@ e_border_raise(E_Border *bd) ECORE_X_WINDOW_CONFIGURE_MASK_STACK_MODE, 0, 0, 0, 0, 0, mwin, ECORE_X_WINDOW_STACK_BELOW); + { + E_Event_Border_Raise *ev; + + ev = calloc(1, sizeof(E_Event_Border_Raise)); + ev->border = bd; + e_object_ref(E_OBJECT(bd)); + ev->above = NULL; + ecore_event_add(E_EVENT_BORDER_RAISE, ev, _e_border_event_border_raise_free, NULL); + } } void @@ -595,6 +610,15 @@ e_border_lower(E_Border *bd) ECORE_X_WINDOW_CONFIGURE_MASK_STACK_MODE, 0, 0, 0, 0, 0, bd->container->bg_win, ECORE_X_WINDOW_STACK_ABOVE); + { + E_Event_Border_Lower *ev; + + ev = calloc(1, sizeof(E_Event_Border_Lower)); + ev->border = bd; + e_object_ref(E_OBJECT(bd)); + ev->below = NULL; + ecore_event_add(E_EVENT_BORDER_LOWER, ev, _e_border_event_border_lower_free, NULL); + } } void @@ -608,6 +632,16 @@ e_border_stack_above(E_Border *bd, E_Border *above) ECORE_X_WINDOW_CONFIGURE_MASK_STACK_MODE, 0, 0, 0, 0, 0, above->win, ECORE_X_WINDOW_STACK_ABOVE); + { + E_Event_Border_Raise *ev; + + ev = calloc(1, sizeof(E_Event_Border_Raise)); + ev->border = bd; + e_object_ref(E_OBJECT(bd)); + ev->above = above; + e_object_ref(E_OBJECT(above)); + ecore_event_add(E_EVENT_BORDER_RAISE, ev, _e_border_event_border_raise_free, NULL); + } } void @@ -621,6 +655,16 @@ e_border_stack_below(E_Border *bd, E_Border *below) ECORE_X_WINDOW_CONFIGURE_MASK_STACK_MODE, 0, 0, 0, 0, 0, below->win, ECORE_X_WINDOW_STACK_BELOW); + { + E_Event_Border_Lower *ev; + + ev = calloc(1, sizeof(E_Event_Border_Lower)); + ev->border = bd; + e_object_ref(E_OBJECT(bd)); + ev->below = below; + e_object_ref(E_OBJECT(below)); + ecore_event_add(E_EVENT_BORDER_LOWER, ev, _e_border_event_border_lower_free, NULL); + } } void @@ -3411,6 +3455,29 @@ _e_border_event_border_desk_set_free(void *data, void *ev) free(e); } +static void +_e_border_event_border_raise_free(void *data, void *ev) +{ + E_Event_Border_Raise *e; + + e = ev; + e_object_unref(E_OBJECT(e->border)); + if (e->above) e_object_unref(E_OBJECT(e->above)); + free(e); +} + +static void +_e_border_event_border_lower_free(void *data, void *ev) +{ + E_Event_Border_Lower *e; + + e = ev; + e_object_unref(E_OBJECT(e->border)); + if (e->below) e_object_unref(E_OBJECT(e->below)); + free(e); +} + + static void _e_border_zone_update(E_Border *bd) { diff --git a/src/bin/e_border.h b/src/bin/e_border.h index a4f05c386..e2c8bda82 100644 --- a/src/bin/e_border.h +++ b/src/bin/e_border.h @@ -33,6 +33,8 @@ typedef struct _E_Event_Border_Stick E_Event_Border_Stick; typedef struct _E_Event_Border_Unstick E_Event_Border_Unstick; typedef struct _E_Event_Border_Zone_Set E_Event_Border_Zone_Set; typedef struct _E_Event_Border_Desk_Set E_Event_Border_Desk_Set; +typedef struct _E_Event_Border_Raise E_Event_Border_Raise; +typedef struct _E_Event_Border_Lower E_Event_Border_Lower; #else #ifndef E_BORDER_H @@ -273,6 +275,16 @@ struct _E_Event_Border_Desk_Set E_Desk *desk; }; +struct _E_Event_Border_Raise +{ + E_Border *border, *above; +}; + +struct _E_Event_Border_Lower +{ + E_Border *border, *below; +}; + EAPI int e_border_init(void); EAPI int e_border_shutdown(void); @@ -320,6 +332,8 @@ extern EAPI int E_EVENT_BORDER_STICK; extern EAPI int E_EVENT_BORDER_UNSTICK; extern EAPI int E_EVENT_BORDER_ZONE_SET; extern EAPI int E_EVENT_BORDER_DESK_SET; +extern EAPI int E_EVENT_BORDER_RAISE; +extern EAPI int E_EVENT_BORDER_LOWER; #endif #endif diff --git a/src/bin/e_layout.c b/src/bin/e_layout.c index 8a5761a62..6aca6b1a9 100644 --- a/src/bin/e_layout.c +++ b/src/bin/e_layout.c @@ -3,6 +3,9 @@ */ #include "e.h" +/* FIXME: something is weird here - i had to reverse all stacking logic to make + * it work... */ + typedef struct _E_Smart_Data E_Smart_Data; typedef struct _E_Layout_Item E_Layout_Item; @@ -112,7 +115,7 @@ e_layout_pack(Evas_Object *obj, Evas_Object *child) sd = evas_object_smart_data_get(obj); _e_layout_smart_adopt(sd, child); - sd->items = evas_list_append(sd->items, child); + sd->items = evas_list_prepend(sd->items, child); li = evas_object_data_get(child, "e_layout_data"); _e_layout_smart_move_resize_item(li); } @@ -146,7 +149,7 @@ e_layout_child_resize(Evas_Object *obj, Evas_Coord w, Evas_Coord h) } void -e_layout_child_raise(Evas_Object *obj) +e_layout_child_lower(Evas_Object *obj) { E_Layout_Item *li; @@ -154,12 +157,14 @@ e_layout_child_raise(Evas_Object *obj) if (!li) return; li->sd->items = evas_list_remove(li->sd->items, obj); if (li->sd->items) - evas_object_stack_above(obj, evas_list_data(evas_list_last(li->sd->items))); + { + evas_object_stack_above(obj, evas_list_data(evas_list_last(li->sd->items))); + } li->sd->items = evas_list_append(li->sd->items, obj); } void -e_layout_child_lower(Evas_Object *obj) +e_layout_child_raise(Evas_Object *obj) { E_Layout_Item *li; @@ -171,6 +176,19 @@ e_layout_child_lower(Evas_Object *obj) li->sd->items = evas_list_prepend(li->sd->items, obj); } +void +e_layout_child_lower_below(Evas_Object *obj, Evas_Object *below) +{ + E_Layout_Item *li; + + li = evas_object_data_get(obj, "e_layout_data"); + if (!li) return; + li->sd->items = evas_list_remove(li->sd->items, obj); + if (li->sd->items) + evas_object_stack_above(obj, below); + li->sd->items = evas_list_append_relative(li->sd->items, obj, below); +} + void e_layout_child_raise_above(Evas_Object *obj, Evas_Object *above) { @@ -180,21 +198,8 @@ e_layout_child_raise_above(Evas_Object *obj, Evas_Object *above) if (!li) return; li->sd->items = evas_list_remove(li->sd->items, obj); if (li->sd->items) - evas_object_stack_above(obj, above); - li->sd->items = evas_list_append_relative(li->sd->items, obj, above); -} - -void -e_layout_child_raise_below(Evas_Object *obj, Evas_Object *below) -{ - E_Layout_Item *li; - - li = evas_object_data_get(obj, "e_layout_data"); - if (!li) return; - li->sd->items = evas_list_remove(li->sd->items, obj); - if (li->sd->items) - evas_object_stack_below(obj, below); - li->sd->items = evas_list_prepend_relative(li->sd->items, obj, below); + evas_object_stack_below(obj, above); + li->sd->items = evas_list_prepend_relative(li->sd->items, obj, above); } void @@ -226,13 +231,12 @@ _e_layout_smart_adopt(E_Smart_Data *sd, Evas_Object *obj) li->w = 0; li->h = 0; evas_object_clip_set(obj, sd->clip); - evas_object_stack_above(obj, sd->obj); evas_object_smart_member_add(li->sd->obj, obj); evas_object_data_set(obj, "e_layout_data", li); evas_object_event_callback_add(obj, EVAS_CALLBACK_FREE, _e_layout_smart_item_del_hook, NULL); if (li->sd->items) - evas_object_stack_above(obj, evas_list_data(evas_list_last(li->sd->items))); + evas_object_stack_below(obj, evas_list_data(li->sd->items)); else evas_object_stack_above(obj, sd->obj); if (!evas_object_visible_get(sd->clip)) @@ -389,7 +393,6 @@ _e_layout_smart_raise(Evas_Object *obj) sd = evas_object_smart_data_get(obj); if (!sd) return; - { Evas_List *l; @@ -407,7 +410,6 @@ _e_layout_smart_lower(Evas_Object *obj) sd = evas_object_smart_data_get(obj); if (!sd) return; - { Evas_List *l; @@ -425,7 +427,6 @@ _e_layout_smart_stack_above(Evas_Object *obj, Evas_Object *above) sd = evas_object_smart_data_get(obj); if (!sd) return; - { Evas_List *l; @@ -443,7 +444,6 @@ _e_layout_smart_stack_below(Evas_Object *obj, Evas_Object *below) sd = evas_object_smart_data_get(obj); if (!sd) return; - { Evas_List *l; diff --git a/src/bin/e_layout.h b/src/bin/e_layout.h index 3aa5d3134..de02326e6 100644 --- a/src/bin/e_layout.h +++ b/src/bin/e_layout.h @@ -17,7 +17,7 @@ EAPI void e_layout_child_resize (Evas_Object *obj, Evas_Coord w, Ev EAPI void e_layout_child_raise (Evas_Object *obj); EAPI void e_layout_child_lower (Evas_Object *obj); EAPI void e_layout_child_raise_above (Evas_Object *obj, Evas_Object *above); -EAPI void e_layout_child_raise_below (Evas_Object *obj, Evas_Object *below); +EAPI void e_layout_child_lower_below (Evas_Object *obj, Evas_Object *below); EAPI void e_layout_unpack (Evas_Object *obj); #endif diff --git a/src/bin/e_xinerama.c b/src/bin/e_xinerama.c index e310f97bd..c9e9dae5c 100644 --- a/src/bin/e_xinerama.c +++ b/src/bin/e_xinerama.c @@ -149,7 +149,7 @@ _e_xinerama_update(void) sz = scr->w * scr->h; sz2 = scr2->w * scr2->h; /* if the one we already have is bigger, DONT add the new */ - if (sz2 > sz) + if (sz2 >= sz) add = 0; /* add the old to a list to remove */ else diff --git a/src/modules/pager/e_mod_main.c b/src/modules/pager/e_mod_main.c index 5789966ae..b4eff9410 100644 --- a/src/modules/pager/e_mod_main.c +++ b/src/modules/pager/e_mod_main.c @@ -23,17 +23,17 @@ static void _pager_face_zone_set(Pager_Face *face, E_Zone *zone); static void _pager_face_zone_unset(Pager_Face *face); static Pager_Desk *_pager_desk_new(Pager_Face *face, E_Desk *desk, int x, int y); -static void _pager_desk_free(Pager_Desk *desk); -static Pager_Win *_pager_window_new(Pager_Desk *desk, E_Border *border); -static void _pager_window_free(Pager_Win *win); +static void _pager_desk_free(Pager_Desk *pd); -static void _pager_face_draw(Pager_Face *face); -static void _pager_window_move(Pager_Face *face, Pager_Win *win); +static Pager_Win *_pager_window_new(Pager_Desk *pd, E_Border *border); +static void _pager_window_free(Pager_Win *pw); +static void _pager_window_move(Pager_Face *face, Pager_Win *pw); -static Pager_Desk *_pager_desk_find(Pager_Face *face, E_Desk *desk); -static Pager_Win *_pager_window_find(Pager_Face *face, E_Border *border); +static Pager_Win *_pager_face_border_find(Pager_Face *face, E_Border *border); +static Pager_Win *_pager_desk_border_find(Pager_Desk *pd, E_Border *border); +static Pager_Desk *_pager_face_desk_find(Pager_Face *face, E_Desk *desk); +static void _pager_face_desk_select(Pager_Desk *pd); -static void _pager_face_cb_mouse_down(void *data, Evas *e, Evas_Object *obj, void *event_info); static void _pager_face_cb_gmc_change(void *data, E_Gadman_Client *gmc, E_Gadman_Change change); static int _pager_face_cb_event_border_resize(void *data, int type, void *event); static int _pager_face_cb_event_border_move(void *data, int type, void *event); @@ -44,17 +44,11 @@ static int _pager_face_cb_event_border_show(void *data, int type, void * static int _pager_face_cb_event_border_stick(void *data, int type, void *event); static int _pager_face_cb_event_border_unstick(void *data, int type, void *event); static int _pager_face_cb_event_border_desk_set(void *data, int type, void *event); +static int _pager_face_cb_event_border_raise(void *data, int type, void *event); +static int _pager_face_cb_event_border_lower(void *data, int type, void *event); static int _pager_face_cb_event_zone_desk_count_set(void *data, int type, void *event); static int _pager_face_cb_event_desk_show(void *data, int type, void *event); static void _pager_face_cb_menu_enabled(void *data, E_Menu *m, E_Menu_Item *mi); -static void _pager_face_cb_menu_scale(void *data, E_Menu *m, E_Menu_Item *mi); -static void _pager_face_cb_menu_resize_none(void *data, E_Menu *m, E_Menu_Item *mi); -static void _pager_face_cb_menu_resize_horz(void *data, E_Menu *m, E_Menu_Item *mi); -static void _pager_face_cb_menu_resize_vert(void *data, E_Menu *m, E_Menu_Item *mi); -static void _pager_face_cb_menu_resize_both(void *data, E_Menu *m, E_Menu_Item *mi); -static void _pager_face_cb_menu_size_small(void *data, E_Menu *m, E_Menu_Item *mi); -static void _pager_face_cb_menu_size_medium(void *data, E_Menu *m, E_Menu_Item *mi); -static void _pager_face_cb_menu_size_large(void *data, E_Menu *m, E_Menu_Item *mi); static void _pager_face_cb_menu_edit(void *data, E_Menu *m, E_Menu_Item *mi); static void _pager_desk_cb_mouse_in(void *data, Evas *e, Evas_Object *obj, void *event_info); @@ -311,6 +305,12 @@ _pager_face_new(E_Zone *zone) face->ev_handler_border_desk_set = ecore_event_handler_add(E_EVENT_BORDER_DESK_SET, _pager_face_cb_event_border_desk_set, face); + face->ev_handler_border_raise = + ecore_event_handler_add(E_EVENT_BORDER_RAISE, + _pager_face_cb_event_border_raise, face); + face->ev_handler_border_desk_set = + ecore_event_handler_add(E_EVENT_BORDER_LOWER, + _pager_face_cb_event_border_lower, face); face->ev_handler_zone_desk_count_set = ecore_event_handler_add(E_EVENT_ZONE_DESK_COUNT_SET, _pager_face_cb_event_zone_desk_count_set, face); @@ -335,24 +335,6 @@ _pager_face_new(E_Zone *zone) _pager_face_zone_set(face, zone); -#if 0 - o = evas_object_rectangle_add(face->evas); - face->base = o; - evas_object_color_set(o, 128, 128, 128, 0); - evas_object_pass_events_set(o, 0); - evas_object_repeat_events_set(o, 0); - evas_object_event_callback_add(o, EVAS_CALLBACK_MOUSE_DOWN, _pager_face_cb_mouse_down, face); - evas_object_show(o); - - o = edje_object_add(face->evas); - face->screen = o; - edje_object_file_set(o, - /* FIXME: "default.eet" needs to come from conf */ - e_path_find(path_themes, "default.eet"), - "modules/pager/main"); - evas_object_show(o); -#endif - face->gmc = e_gadman_client_new(face->zone->container->gadman); e_gadman_client_domain_set(face->gmc, "module.pager", _pager_count++); e_gadman_client_zone_set(face->gmc, face->zone); @@ -399,6 +381,7 @@ _pager_face_free(Pager_Face *face) free(face->conf); free(face); + _pager_count--; } @@ -411,99 +394,48 @@ _pager_face_menu_new(Pager_Face *face) mn = e_menu_new(); face->menu = mn; - /* Enabled */ mi = e_menu_item_new(mn); e_menu_item_label_set(mi, "Enabled"); e_menu_item_check_set(mi, 1); if (face->conf->enabled) e_menu_item_toggle_set(mi, 1); e_menu_item_callback_set(mi, _pager_face_cb_menu_enabled, face); - /* Edit */ mi = e_menu_item_new(mn); e_menu_item_label_set(mi, "Edit Mode"); e_menu_item_callback_set(mi, _pager_face_cb_menu_edit, face); - - /* Scale */ - mi = e_menu_item_new(mn); - e_menu_item_label_set(mi, "Keep Scale"); - e_menu_item_check_set(mi, 1); - if (face->conf->scale) e_menu_item_toggle_set(mi, 1); - e_menu_item_callback_set(mi, _pager_face_cb_menu_scale, face); - - /* Resize */ - mi = e_menu_item_new(face->menu); - e_menu_item_label_set(mi, "Auto Resize"); - mn = e_menu_new(); - e_menu_item_submenu_set(mi, mn); - - mi = e_menu_item_new(mn); - e_menu_item_label_set(mi, "None"); - e_menu_item_radio_set(mi, 1); - e_menu_item_radio_group_set(mi, 1); - if (face->conf->resize == PAGER_RESIZE_NONE) e_menu_item_toggle_set(mi, 1); - e_menu_item_callback_set(mi, _pager_face_cb_menu_resize_none, face); - - mi = e_menu_item_new(mn); - e_menu_item_label_set(mi, "Horizontal"); - e_menu_item_radio_set(mi, 1); - e_menu_item_radio_group_set(mi, 1); - if (face->conf->resize == PAGER_RESIZE_HORZ) e_menu_item_toggle_set(mi, 1); - e_menu_item_callback_set(mi, _pager_face_cb_menu_resize_horz, face); - - mi = e_menu_item_new(mn); - e_menu_item_label_set(mi, "Vertical"); - e_menu_item_radio_set(mi, 1); - e_menu_item_radio_group_set(mi, 1); - if (face->conf->resize == PAGER_RESIZE_VERT) e_menu_item_toggle_set(mi, 1); - e_menu_item_callback_set(mi, _pager_face_cb_menu_resize_vert, face); - - mi = e_menu_item_new(mn); - e_menu_item_label_set(mi, "Both"); - e_menu_item_radio_set(mi, 1); - e_menu_item_radio_group_set(mi, 1); - if (face->conf->resize == PAGER_RESIZE_BOTH) e_menu_item_toggle_set(mi, 1); - e_menu_item_callback_set(mi, _pager_face_cb_menu_resize_both, face); - - /* Size */ - mi = e_menu_item_new(face->menu); - e_menu_item_label_set(mi, "Size"); - mn = e_menu_new(); - e_menu_item_submenu_set(mi, mn); - - mi = e_menu_item_new(mn); - e_menu_item_label_set(mi, "Small"); - e_menu_item_callback_set(mi, _pager_face_cb_menu_size_small, face); - - mi = e_menu_item_new(mn); - e_menu_item_label_set(mi, "Medium"); - e_menu_item_callback_set(mi, _pager_face_cb_menu_size_medium, face); - - mi = e_menu_item_new(mn); - e_menu_item_label_set(mi, "Large"); - e_menu_item_callback_set(mi, _pager_face_cb_menu_size_large, face); } static void _pager_face_enable(Pager_Face *face) { - Evas_List *desks, *wins; - Pager_Desk *desk; - Pager_Win *win; + Evas_List *l; face->conf->enabled = 1; evas_object_show(face->pager_object); + for (l = face->desks; l; l = l->next) + { + Pager_Desk *pd; + + pd = l->data; + evas_object_show(pd->event_object); + } e_config_save_queue(); } static void _pager_face_disable(Pager_Face *face) { - Evas_List *desks, *wins; - Pager_Desk *desk; - Pager_Win *win; + Evas_List *l; face->conf->enabled = 0; evas_object_hide(face->pager_object); + for (l = face->desks; l; l = l->next) + { + Pager_Desk *pd; + + pd = l->data; + evas_object_hide(pd->event_object); + } e_config_save_queue(); } @@ -519,7 +451,6 @@ _pager_face_zone_set(Pager_Face *face, E_Zone *zone) current = e_desk_current_get(zone); face->xnum = desks_x; face->ynum = desks_y; - for (x = 0; x < desks_x; x++) { for (y = 0; y < desks_y; y++) @@ -550,12 +481,8 @@ static Pager_Desk * _pager_desk_new(Pager_Face *face, E_Desk *desk, int xpos, int ypos) { Pager_Desk *pd; - Pager_Win *pw; - - E_Border *win; - Evas_Object *o; - Evas_List *wins; + Evas_List *l; pd = E_NEW(Pager_Desk, 1); if (!pd) return NULL; @@ -598,24 +525,16 @@ _pager_desk_new(Pager_Face *face, E_Desk *desk, int xpos, int ypos) edje_object_part_swallow(pd->desk_object, "items", pd->layout_object); evas_object_show(o); - if (desk == e_desk_current_get(desk->zone)) - { - if (!pd->current) - { - pd->current = 1; - edje_object_signal_emit(pd->desk_object, "active", ""); - } - } + if (desk == e_desk_current_get(desk->zone)) _pager_face_desk_select(pd); - for (wins = desk->zone->container->clients; wins; wins = wins->next) + for (l = desk->zone->container->clients; l; l = l->next) { - win = wins->data; - if (win->new_client) - continue; - if (win->desk != desk) - continue; - - pw = _pager_window_new(pd, win); + Pager_Win *pw; + E_Border *bd; + + bd = l->data; + if ((bd->new_client) || (bd->desk != desk)) continue; + pw = _pager_window_new(pd, bd); if (pw) pd->wins = evas_list_append(pd->wins, pw); } @@ -623,161 +542,162 @@ _pager_desk_new(Pager_Face *face, E_Desk *desk, int xpos, int ypos) } static void -_pager_desk_free(Pager_Desk *desk) +_pager_desk_free(Pager_Desk *pd) { Evas_List *list; - if (desk->desk_object) evas_object_del(desk->desk_object); - if (desk->layout_object) evas_object_del(desk->layout_object); - if (desk->event_object) evas_object_del(desk->event_object); - e_object_unref(E_OBJECT(desk->desk)); + if (pd->desk_object) evas_object_del(pd->desk_object); + if (pd->layout_object) evas_object_del(pd->layout_object); + if (pd->event_object) evas_object_del(pd->event_object); + e_object_unref(E_OBJECT(pd->desk)); - for (list = desk->wins; list; list = list->next) + for (list = pd->wins; list; list = list->next) _pager_window_free(list->data); - evas_list_free(desk->wins); - free(desk); + evas_list_free(pd->wins); + free(pd); } static Pager_Win * -_pager_window_new(Pager_Desk *desk, E_Border *border) +_pager_window_new(Pager_Desk *pd, E_Border *border) { - Pager_Win *win; + Pager_Win *pw; Evas_Object *o; E_App *app; int visible; - double scalex, scaley; - scalex = (double)desk->face->fw / (double)desk->face->zone->w; - scaley = (double)desk->face->fy / (double)desk->face->zone->h; + pw = E_NEW(Pager_Win, 1); + if (!pw) return NULL; - win = E_NEW(Pager_Win, 1); - if (!win) return NULL; - - win->border = border; + pw->border = border; e_object_ref(E_OBJECT(border)); visible = !border->iconic; - win->desk = desk; + pw->desk = pd; - o = edje_object_add(desk->face->evas); - win->obj = o; + o = edje_object_add(pd->face->evas); + pw->window_object = o; edje_object_file_set(o, /* FIXME: "default.eet" needs to come from conf */ e_path_find(path_themes, "default.eet"), "modules/pager/window"); - if (visible) - evas_object_show(o); - e_layout_pack(desk->layout_object, win->obj); + if (visible) evas_object_show(o); + e_layout_pack(pd->layout_object, pw->window_object); app = e_app_window_name_class_find(border->client.icccm.name, border->client.icccm.class); if (app) { - o = edje_object_add(desk->face->evas); - win->icon = o; + o = edje_object_add(pd->face->evas); + pw->icon_object = o; edje_object_file_set(o, app->path, "icon"); - if (visible) - evas_object_show(o); - edje_object_part_swallow(win->obj, "WindowIcon", o); + if (visible) evas_object_show(o); + edje_object_part_swallow(pw->window_object, "icon", o); } - _pager_window_move(desk->face, win); - return win; + _pager_window_move(pd->face, pw); + return pw; } static void -_pager_window_free(Pager_Win *win) +_pager_window_free(Pager_Win *pw) { - if (win->obj) evas_object_del(win->obj); - if (win->icon) evas_object_del(win->icon); + if (pw->window_object) evas_object_del(pw->window_object); + if (pw->icon_object) evas_object_del(pw->icon_object); - e_object_unref(E_OBJECT(win->border)); - free(win); + e_object_unref(E_OBJECT(pw->border)); + free(pw); } static void -_pager_face_draw(Pager_Face *face) +_pager_window_move(Pager_Face *face, Pager_Win *pw) { - evas_object_move(face->pager_object, face->fx, face->fy); - evas_object_resize(face->pager_object, face->fw, face->fh); + e_layout_child_move(pw->window_object, + pw->border->x - pw->desk->desk->zone->x, + pw->border->y - pw->desk->desk->zone->y); + e_layout_child_resize(pw->window_object, + pw->border->w, + pw->border->h); } -static void -_pager_window_move(Pager_Face *face, Pager_Win *win) +static Pager_Win * +_pager_face_border_find(Pager_Face *face, E_Border *border) { - e_layout_child_move(win->obj, - win->border->x - win->desk->desk->zone->x, - win->border->y - win->desk->desk->zone->y); - e_layout_child_resize(win->obj, - win->border->w, - win->border->h); -} - -static void -_pager_face_cb_mouse_down(void *data, Evas *e, Evas_Object *obj, void *event_info) -{ - Pager_Face *face; - Evas_Event_Mouse_Down *ev; - - face = data; - ev = event_info; -} - -static Pager_Desk * -_pager_desk_find(Pager_Face *face, E_Desk *desk) -{ - Pager_Desk *pd; - Evas_List *desks; - - desks = face->desks; - while (desks) + Evas_List *l, *ll; + + for (l = face->desks; l; l = l->next) { - pd = desks->data; - if (pd->desk == desk) - return pd; - desks = desks->next; + Pager_Desk *pd; + Pager_Win *pw; + + pd = l->data; + pw = _pager_desk_border_find(pd, border); + if (pw) return pw; } return NULL; } static Pager_Win * -_pager_window_find(Pager_Face *face, E_Border *border) +_pager_desk_border_find(Pager_Desk *pd, E_Border *border) { - Pager_Desk *desk; - Pager_Win *win; - Evas_List *desks, *wins; - - desks = face->desks; - while (desks) + Evas_List *l; + + for (l = pd->wins; l; l = l->next) { - desk = desks->data; - wins = desk->wins; - while (wins) - { - win = wins->data; - /* We have to check the desk, wouldn't want - * a sticky copy */ - if ((!win->border->sticky || (win->border->desk == desk->desk)) - && (win->border == border)) - return win; - wins = wins->next; - } - desks = desks->next; + Pager_Win *pw; + + pw = l->data; + if (pw->border == border) return pw; } return NULL; } +static Pager_Desk * +_pager_face_desk_find(Pager_Face *face, E_Desk *desk) +{ + Evas_List *l; + + for (l = face->desks; l; l = l->next) + { + Pager_Desk *pd; + + pd = l->data; + if (pd->desk == desk) return pd; + } + return NULL; +} + +static void +_pager_face_desk_select(Pager_Desk *pd) +{ + Evas_List *l; + + if (pd->current) return; + for (l = pd->face->desks; l; l = l->next) + { + Pager_Desk *pd2; + + pd2 = l->data; + if (pd == pd2) + { + pd2->current = 1; + edje_object_signal_emit(pd2->desk_object, "active", ""); + } + else + { + if (pd2->current) + { + pd2->current = 0; + edje_object_signal_emit(pd2->desk_object, "passive", ""); + } + } + } +} + static void _pager_face_cb_gmc_change(void *data, E_Gadman_Client *gmc, E_Gadman_Change change) { Pager_Face *face; - Pager_Win *win; - Pager_Desk *desk; Evas_Coord x, y, w, h; - int xcount, ycount; - Evas_List *desks, *wins; face = data; - e_zone_desk_count_get(face->zone, &xcount, &ycount); - e_gadman_client_geometry_get(face->gmc, &x, &y, &w, &h); face->fx = x; face->fy = y; @@ -786,44 +706,36 @@ _pager_face_cb_gmc_change(void *data, E_Gadman_Client *gmc, E_Gadman_Change chan switch (change) { case E_GADMAN_CHANGE_MOVE_RESIZE: - _pager_face_draw(face); - break; + evas_object_move(face->pager_object, face->fx, face->fy); + evas_object_resize(face->pager_object, face->fw, face->fh); + break; case E_GADMAN_CHANGE_RAISE: - evas_object_raise(face->pager_object); - break; - case E_GADMAN_CHANGE_EDGE: - break; - case E_GADMAN_CHANGE_ZONE: - break; + evas_object_raise(face->pager_object); + break; + default: + break; } } static int _pager_face_cb_event_border_resize(void *data, int type, void *event) { - Pager_Face *face; - Pager_Desk *desk; - Pager_Win *win; E_Event_Border_Resize *ev; - Evas_List *desks, *wins; + Pager_Face *face; + Evas_List *l; face = data; ev = event; - /* Only care about windows in our zone */ - if (face->zone != ev->border->zone) - return 1; - - for (desks = face->desks; desks; desks = desks->next) + if (face->zone != ev->border->zone) return 1; + for (l = face->desks; l; l = l->next) { - desk = desks->data; - for (wins = desk->wins; wins; wins = wins->next) - { - win = wins->data; - if (win->border == ev->border) - { - _pager_window_move(face, win); - } - } + Pager_Desk *pd; + Pager_Win *pw; + + pd = l->data; + pw = _pager_desk_border_find(pd, ev->border); + if (pw) + _pager_window_move(face, pw); } return 1; } @@ -831,29 +743,22 @@ _pager_face_cb_event_border_resize(void *data, int type, void *event) static int _pager_face_cb_event_border_move(void *data, int type, void *event) { - Pager_Face *face; - Pager_Desk *desk; - Pager_Win *win; E_Event_Border_Move *ev; - Evas_List *desks, *wins; + Pager_Face *face; + Evas_List *l; face = data; ev = event; - /* Only care about windows in our zone */ - if (face->zone != ev->border->zone) - return 1; - - for (desks = face->desks; desks; desks = desks->next) + if (face->zone != ev->border->zone) return 1; + for (l = face->desks; l; l = l->next) { - desk = desks->data; - for (wins = desk->wins; wins; wins = wins->next) - { - win = wins->data; - if (win->border == ev->border) - { - _pager_window_move(face, win); - } - } + Pager_Desk *pd; + Pager_Win *pw; + + pd = l->data; + pw = _pager_desk_border_find(pd, ev->border); + if (pw) + _pager_window_move(face, pw); } return 1; } @@ -862,32 +767,22 @@ static int _pager_face_cb_event_border_add(void *data, int type, void *event) { Pager_Face *face; - Pager_Desk *desk; - Pager_Win *win; + Pager_Desk *pd; E_Event_Border_Add *ev; face = data; ev = event; - /* Only care about windows in our zone */ - if (face->zone != ev->border->zone) + if ((face->zone != ev->border->zone) || + (_pager_face_border_find(face, ev->border))) return 1; - -#if 0 - if (_pager_window_find(face, ev->border)) + pd = _pager_face_desk_find(face, ev->border->desk); + if (pd) { - printf("event_border_add, window found :'(\n"); - return 1; - } -#endif - if ((desk = _pager_desk_find(face, ev->border->desk))) - { - win = _pager_window_new(desk, ev->border); - if (win) - desk->wins = evas_list_append(desk->wins, win); - } - else - { - printf("event_border_add, desk not found :'(\n"); + Pager_Win *pw; + + pw = _pager_window_new(pd, ev->border); + if (pw) + pd->wins = evas_list_append(pd->wins, pw); } return 1; } @@ -895,30 +790,25 @@ _pager_face_cb_event_border_add(void *data, int type, void *event) static int _pager_face_cb_event_border_remove(void *data, int type, void *event) { - Pager_Face *face; - Pager_Desk *desk; - Pager_Win *win; E_Event_Border_Remove *ev; - Evas_List *desks, *wins; + Pager_Face *face; + Evas_List *l; face = data; ev = event; - /* Only care about windows in our zone */ - if (face->zone != ev->border->zone) - return 1; - - for (desks = face->desks; desks; desks = desks->next) + if (face->zone != ev->border->zone) return 1; + for (l = face->desks; l; l = l->next) { - desk = desks->data; - for (wins = desk->wins; wins; wins = wins->next) + Pager_Desk *pd; + Pager_Win *pw; + + pd = l->data; + pw = _pager_desk_border_find(pd, ev->border); + if (pw) { - win = wins->data; - if (win->border == ev->border) - { - desk->wins = evas_list_remove_list(desk->wins, wins); - _pager_window_free(win); - break; - } + pd->wins = evas_list_remove(pd->wins, pd); + if (ev->border->desk == pd->desk) + _pager_window_free(pw); } } return 1; @@ -927,31 +817,24 @@ _pager_face_cb_event_border_remove(void *data, int type, void *event) static int _pager_face_cb_event_border_hide(void *data, int type, void *event) { - Pager_Face *face; - Pager_Desk *desk; - Pager_Win *win; - E_Event_Border_Hide *ev; - Evas_List *desks, *wins; + E_Event_Border_Hide *ev; + Pager_Face *face; + Evas_List *l; face = data; ev = event; - /* Only care about windows in our zone */ - if (face->zone != ev->border->zone) - return 1; - - for (desks = face->desks; desks; desks = desks->next) + if (face->zone != ev->border->zone) return 1; + for (l = face->desks; l; l = l->next) { - desk = desks->data; - for (wins = desk->wins; wins; wins = wins->next) + Pager_Desk *pd; + Pager_Win *pw; + + pd = l->data; + pw = _pager_desk_border_find(pd, ev->border); + if (pw) { - win = wins->data; - if ((win->border == ev->border) - && (ev->border->desk->visible)) - { - evas_object_hide(win->obj); - evas_object_hide(win->icon); - break; - } + if (ev->border->desk->visible) + evas_object_hide(pw->window_object); } } return 1; @@ -960,31 +843,24 @@ _pager_face_cb_event_border_hide(void *data, int type, void *event) static int _pager_face_cb_event_border_show(void *data, int type, void *event) { - Pager_Face *face; - Pager_Desk *desk; - Pager_Win *win; - E_Event_Border_Show *ev; - Evas_List *desks, *wins; + E_Event_Border_Show *ev; + Pager_Face *face; + Evas_List *l; face = data; ev = event; - /* Only care about windows in our zone */ - if (face->zone != ev->border->zone) - return 1; - - for (desks = face->desks; desks; desks = desks->next) + if (face->zone != ev->border->zone) return 1; + for (l = face->desks; l; l = l->next) { - desk = desks->data; - for (wins = desk->wins; wins; wins = wins->next) + Pager_Desk *pd; + Pager_Win *pw; + + pd = l->data; + pw = _pager_desk_border_find(pd, ev->border); + if (pw) { - win = wins->data; - if ((win->border == ev->border) - && (ev->border->desk->visible)) - { - evas_object_show(win->obj); - evas_object_show(win->icon); - break; - } + if (ev->border->desk->visible) + evas_object_show(pw->window_object); } } return 1; @@ -993,27 +869,25 @@ _pager_face_cb_event_border_show(void *data, int type, void *event) static int _pager_face_cb_event_border_stick(void *data, int type, void *event) { - Pager_Face *face; - Pager_Desk *desk; - Pager_Win *win; E_Event_Border_Stick *ev; - Evas_List *desks; + Pager_Face *face; + Evas_List *l; face = data; ev = event; - /* Only care about windows in our zone */ - if (face->zone != ev->border->zone) - return 1; - - for (desks = face->desks; desks; desks = desks->next) + if (face->zone != ev->border->zone) return 1; + for (l = face->desks; l; l = l->next) { - desk = desks->data; - /* On this desk there should already be a border */ - if (ev->border->desk == desk->desk) - continue; - - win = _pager_window_new(desk, ev->border); - desk->wins = evas_list_append(desk->wins, win); + Pager_Desk *pd; + + pd = l->data; + if (ev->border->desk != pd->desk) + { + Pager_Win *pw; + + pw = _pager_window_new(pd, ev->border); + pd->wins = evas_list_append(pd->wins, pw); + } } return 1; } @@ -1021,34 +895,27 @@ _pager_face_cb_event_border_stick(void *data, int type, void *event) static int _pager_face_cb_event_border_unstick(void *data, int type, void *event) { - Pager_Face *face; - Pager_Desk *desk; - Pager_Win *win; E_Event_Border_Unstick *ev; - Evas_List *desks, *wins; + Pager_Face *face; + Evas_List *l, *ll; face = data; ev = event; - /* Only care about windows in our zone */ - if (face->zone != ev->border->zone) - return 1; - - - for (desks = face->desks; desks; desks = desks->next) + if (face->zone != ev->border->zone) return 1; + for (l = face->desks; l; l = l->next) { - desk = desks->data; - /* On this desk there should be a border */ - if (desk->desk == ev->border->desk) - continue; - - for (wins = desk->wins; wins; wins = wins->next) + Pager_Desk *pd; + + pd = l->data; + if (ev->border->desk != pd->desk) { - win = wins->data; - if (win->border == ev->border) + for (ll = pd->wins; ll; ll = ll->next) { - desk->wins = evas_list_remove_list(desk->wins, wins); - _pager_window_free(win); - break; + Pager_Win *pw; + + pw = ll->data; + if (pw->border == ev->border) + pd->wins = evas_list_remove_list(pd->wins, ll); } } } @@ -1058,28 +925,86 @@ _pager_face_cb_event_border_unstick(void *data, int type, void *event) static int _pager_face_cb_event_border_desk_set(void *data, int type, void *event) { - Pager_Face *face; - Pager_Win *win; - Pager_Desk *desk; E_Event_Border_Desk_Set *ev; + Pager_Face *face; + Pager_Win *pw; + Pager_Desk *pd; face = data; ev = event; - /* Only care about windows in our zone */ - if (face->zone != ev->border->zone) - return 1; + if (face->zone != ev->border->zone) return 1; + if (ev->border->sticky) return 1; - if (ev->border->sticky) - return 1; - - win = _pager_window_find(face, ev->border); - desk = _pager_desk_find(face, ev->border->desk); - if (win && desk) + pw = _pager_face_border_find(face, ev->border); + pd = _pager_face_desk_find(face, ev->border->desk); + if ((pw) && (pd)) { - win->desk->wins = evas_list_remove(win->desk->wins, win); - win->desk = desk; - desk->wins = evas_list_append(desk->wins, win); - _pager_window_move(face, win); + pw->desk->wins = evas_list_remove(pw->desk->wins, pw); + pw->desk = pd; + pd->wins = evas_list_append(pd->wins, pw); + e_layout_unpack(pw->window_object); + e_layout_pack(pd->layout_object, pw->window_object); + _pager_window_move(face, pw); + } + return 1; +} + +static int +_pager_face_cb_event_border_raise(void *data, int type, void *event) +{ + E_Event_Border_Raise *ev; + Pager_Face *face; + Evas_List *l; + + face = data; + ev = event; + if (face->zone != ev->border->zone) return 1; + for (l = face->desks; l; l = l->next) + { + Pager_Desk *pd; + Pager_Win *pw, *pw2 = NULL; + + pd = l->data; + pw = _pager_desk_border_find(pd, ev->border); + if (pw) + { + if (ev->above) + pw2 = _pager_desk_border_find(pd, ev->above); + if (pw2) + e_layout_child_raise_above(pw->window_object, pw2->window_object); + else + e_layout_child_raise(pw->window_object); + } + } + return 1; +} + +static int +_pager_face_cb_event_border_lower(void *data, int type, void *event) +{ + E_Event_Border_Lower *ev; + Pager_Face *face; + Evas_List *l; + + face = data; + ev = event; + if (face->zone != ev->border->zone) return 1; + for (l = face->desks; l; l = l->next) + { + Pager_Desk *pd; + Pager_Win *pw, *pw2 = NULL; + + pd = l->data; + pw = _pager_desk_border_find(pd, ev->border); + if (pw) + { + if (ev->below) + pw2 = _pager_desk_border_find(pd, ev->below); + if (pw2) + e_layout_child_lower_below(pw->window_object, pw2->window_object); + else + e_layout_child_lower(pw->window_object); + } } return 1; } @@ -1087,102 +1012,69 @@ _pager_face_cb_event_border_desk_set(void *data, int type, void *event) static int _pager_face_cb_event_zone_desk_count_set(void *data, int type, void *event) { - Pager_Face *face; - Pager_Desk *pd, *new; - E_Event_Zone_Desk_Count_Set *ev; - E_Desk *desk; - - Evas_List *desks; - - int desks_x, desks_y; - int max_x, max_y; - int x, y; - int w, h, nw, nh; - double scale; + Pager_Face *face; + Pager_Desk *pd, *pd2; + E_Desk *desk; + Evas_List *l; + int desks_x, desks_y; + int max_x, max_y; + int x, y; + Evas_Coord lw, lh, dw, dh; face = data; ev = event; - - if (face->zone != ev->zone) - return 1; - + if (face->zone != ev->zone) return 1; e_zone_desk_count_get(ev->zone, &desks_x, &desks_y); - - if ((face->xnum == desks_x) && (face->ynum == desks_y)) - return 1; - + if ((face->xnum == desks_x) && (face->ynum == desks_y)) return 1; + + evas_object_geometry_get(face->table_object, NULL, NULL, &lw, &lh); + if (face->xnum > 0) dw = lw / face->xnum; + else dw = 0; + dw *= (desks_x - face->xnum); + if (face->ynum > 0) dh = lh / face->ynum; + else dh = 0; + dh *= (desks_y - face->ynum); + max_x = MAX(face->xnum, desks_x); max_y = MAX(face->ynum, desks_y); - w = face->fw; - h = face->fh; - - if ((face->conf->resize == PAGER_RESIZE_HORZ) - && (face->ynum != desks_y)) - { - /* fw is kept, so the pager face width will change - * if xnum changes */ - scale = (double)face->fw / (double)face->fh; -// face->fh = (face->fh * face->ynum) / desks_y; - if (face->conf->scale) - face->fw = face->fh * scale; - } - else if ((face->conf->resize == PAGER_RESIZE_VERT) - && (face->xnum != desks_x)) - { - /* fh is kept, so the pager face height will change - * if ynum changes */ - scale = (double)face->fh / (double)face->fw; -// face->fw = (face->fw * face->xnum) / desks_x; - if (face->conf->scale) - face->fh = face->fw * scale; - } - else if (face->conf->resize == PAGER_RESIZE_NONE) - { -// face->fw = (face->fw * face->xnum) / desks_x; -// face->fh = (face->fh * face->ynum) / desks_y; - } - for (x = 0; x < max_x; x++) { - for (y = 0; y < max_y; y++) - { - if ((x >= face->xnum) || (y >= face->ynum)) - { - /* Add desk */ - desk = e_desk_at_xy_get(ev->zone, x, y); - pd = _pager_desk_new(face, desk, x, y); - if (pd) - face->desks = evas_list_append(face->desks, pd); - } - else if ((x >= desks_x) || (y >= desks_y)) - { - /* Remove desk */ - for (desks = face->desks; desks; desks = desks->next) - { - pd = desks->data; - if ((pd->xpos == x) && (pd->ypos == y)) - break; - } - if (pd->current) - { - desk = e_desk_current_get(ev->zone); - new = _pager_desk_find(face, desk); - new->current = 1; - } - face->desks = evas_list_remove(face->desks, pd); - _pager_desk_free(pd); - } - } + for (y = 0; y < max_y; y++) + { + if ((x >= face->xnum) || (y >= face->ynum)) + { + /* add desk */ + desk = e_desk_at_xy_get(ev->zone, x, y); + pd = _pager_desk_new(face, desk, x, y); + if (pd) + face->desks = evas_list_append(face->desks, pd); + } + else if ((x >= desks_x) || (y >= desks_y)) + { + /* del desk */ + for (l = face->desks; l; l = l->next) + { + pd = l->data; + if ((pd->xpos == x) && (pd->ypos == y)) + break; + } + if (pd->current) + { + desk = e_desk_current_get(ev->zone); + pd2 = _pager_face_desk_find(face, desk); + _pager_face_desk_select(pd2); + } + face->desks = evas_list_remove(face->desks, pd); + _pager_desk_free(pd); + } + } } + face->xnum = desks_x; face->ynum = desks_y; - - if ((face->fw != w) || (face->fh != h)) - e_gadman_client_resize(face->gmc, face->fw, face->fh); - else - _pager_face_draw(face); + e_gadman_client_resize(face->gmc, face->fw + dw, face->fh + dh); return 1; } @@ -1196,33 +1088,14 @@ _pager_face_cb_event_desk_show(void *data, int type, void *event) face = data; ev = event; - /* Only care if this desk is in our zone */ - if (face->zone != ev->desk->zone) - return 1; - - for (desks = face->desks; desks; desks = desks->next) - { - desk = desks->data; - if (desk->desk == ev->desk) - { - if (!desk->current) - { - desk->current = 1; - edje_object_signal_emit(desk->desk_object, "active", ""); - } - } - else - { - if (desk->current) - { - desk->current = 0; - edje_object_signal_emit(desk->desk_object, "passive", ""); - } - } - } + if (face->zone != ev->desk->zone) return 1; + desk = _pager_face_desk_find(face, ev->desk); + if (desk) _pager_face_desk_select(desk); return 1; } +/*****/ + static void _pager_face_cb_menu_enabled(void *data, E_Menu *m, E_Menu_Item *mi) { @@ -1232,91 +1105,9 @@ _pager_face_cb_menu_enabled(void *data, E_Menu *m, E_Menu_Item *mi) face = data; enabled = e_menu_item_toggle_get(mi); if ((face->conf->enabled) && (!enabled)) - { - _pager_face_disable(face); - } + _pager_face_disable(face); else if ((!face->conf->enabled) && (enabled)) - { - _pager_face_enable(face); - } -} - -static void -_pager_face_cb_menu_scale(void *data, E_Menu *m, E_Menu_Item *mi) -{ - Pager_Face *face; - - face = data; - - face->conf->scale = e_menu_item_toggle_get(mi); - e_config_save_queue(); -} - -static void -_pager_face_cb_menu_resize_none(void *data, E_Menu *m, E_Menu_Item *mi) -{ - Pager_Face *face; - - face = data; - face->conf->resize = PAGER_RESIZE_NONE; - e_config_save_queue(); -} - -static void -_pager_face_cb_menu_resize_horz(void *data, E_Menu *m, E_Menu_Item *mi) -{ - Pager_Face *face; - - face = data; - face->conf->resize = PAGER_RESIZE_HORZ; - e_config_save_queue(); -} - -static void -_pager_face_cb_menu_resize_vert(void *data, E_Menu *m, E_Menu_Item *mi) -{ - Pager_Face *face; - - face = data; - face->conf->resize = PAGER_RESIZE_VERT; - e_config_save_queue(); -} - -static void -_pager_face_cb_menu_resize_both(void *data, E_Menu *m, E_Menu_Item *mi) -{ - Pager_Face *face; - - face = data; - face->conf->resize = PAGER_RESIZE_BOTH; - e_config_save_queue(); -} - -static void -_pager_face_cb_menu_size_small(void *data, E_Menu *m, E_Menu_Item *mi) -{ - Pager_Face *face; - - face = data; - e_gadman_client_resize(face->gmc, face->fw, face->fh); -} - -static void -_pager_face_cb_menu_size_medium(void *data, E_Menu *m, E_Menu_Item *mi) -{ - Pager_Face *face; - - face = data; - e_gadman_client_resize(face->gmc, 80, 60); -} - -static void -_pager_face_cb_menu_size_large(void *data, E_Menu *m, E_Menu_Item *mi) -{ - Pager_Face *face; - - face = data; - e_gadman_client_resize(face->gmc, 128, 96); + _pager_face_enable(face); } static void @@ -1328,6 +1119,8 @@ _pager_face_cb_menu_edit(void *data, E_Menu *m, E_Menu_Item *mi) e_gadman_mode_set(face->gmc->gadman, E_GADMAN_MODE_EDIT); } +/*****/ + static void _pager_desk_cb_mouse_in(void *data, Evas *e, Evas_Object *obj, void *event_info) { @@ -1352,43 +1145,20 @@ static void _pager_desk_cb_mouse_down(void *data, Evas *e, Evas_Object *obj, void *event_info) { Evas_Event_Mouse_Down *ev; - Pager_Desk *desk; + Pager_Desk *pd; ev = event_info; - desk = data; + pd = data; if (ev->button == 3) { - e_menu_activate_mouse(desk->face->menu, desk->face->zone, + e_menu_activate_mouse(pd->face->menu, pd->face->zone, ev->output.x, ev->output.y, 1, 1, E_MENU_POP_DIRECTION_DOWN); - e_util_container_fake_mouse_up_all_later(desk->face->zone->container); + e_util_container_fake_mouse_up_all_later(pd->face->zone->container); } else if (ev->button == 1) { - Evas_List *l; - Pager_Desk *desk2; - - for (l = desk->face->desks; l; l = l->next) - { - desk2 = l->data; - if (desk2 == desk) - { - e_desk_show(desk2->desk); - if (!desk->current) - { - desk->current = 1; - edje_object_signal_emit(desk2->desk_object, "active", ""); - } - } - else - { - if (desk->current) - { - desk2->current = 0; - edje_object_signal_emit(desk2->desk_object, "passive", ""); - } - } - } + e_desk_show(pd->desk); } } @@ -1412,6 +1182,8 @@ _pager_desk_cb_mouse_move(void *data, Evas *e, Evas_Object *obj, void *event_inf desk = data; } +/*****/ + static void _pager_desk_cb_intercept_move(void *data, Evas_Object *o, Evas_Coord x, Evas_Coord y) { diff --git a/src/modules/pager/e_mod_main.h b/src/modules/pager/e_mod_main.h index d8a7e23f6..62e3fac39 100644 --- a/src/modules/pager/e_mod_main.h +++ b/src/modules/pager/e_mod_main.h @@ -68,6 +68,8 @@ struct _Pager_Face Ecore_Event_Handler *ev_handler_border_stick; Ecore_Event_Handler *ev_handler_border_unstick; Ecore_Event_Handler *ev_handler_border_desk_set; + Ecore_Event_Handler *ev_handler_border_raise; + Ecore_Event_Handler *ev_handler_border_lower; Ecore_Event_Handler *ev_handler_zone_desk_count_set; Ecore_Event_Handler *ev_handler_desk_show; }; @@ -91,8 +93,8 @@ struct _Pager_Win E_Border *border; Pager_Desk *desk; - Evas_Object *obj; - Evas_Object *icon; + Evas_Object *window_object; + Evas_Object *icon_object; }; EAPI void *init (E_Module *module);