From b221ced5640618730d4fe192980fe060b96f36b6 Mon Sep 17 00:00:00 2001 From: Hannes Janetzek Date: Thu, 11 Apr 2013 03:06:39 +0000 Subject: [PATCH] e-modules/comp-scale - handle border remove cb - dont add remove cb to some unintialized pointer SVN revision: 84503 --- src/e_mod_pager.c | 34 ++++++++++++++++++++++++++++++---- 1 file changed, 30 insertions(+), 4 deletions(-) diff --git a/src/e_mod_pager.c b/src/e_mod_pager.c index 7600407..7569516 100644 --- a/src/e_mod_pager.c +++ b/src/e_mod_pager.c @@ -696,7 +696,8 @@ _pager_win_new(Evas *e, E_Manager *man, E_Manager_Comp_Source *src) evas_object_show(o); bg_over = o; - evas_object_stack_above(bg_over, sh_obj); + // FIXME needed? + //evas_object_stack_above(bg_over, sh_obj); if (scale_conf->pager_fade_desktop) evas_object_color_set(bg_over, 0, 0, 0, 0); @@ -742,9 +743,6 @@ _pager_win_new(Evas *e, E_Manager *man, E_Manager_Comp_Source *src) items = eina_list_append(items, it); - evas_object_event_callback_add(it->o_win, EVAS_CALLBACK_DEL, - _pager_win_cb_delorig, it); - if ((it->bd->client.netwm.state.skip_pager) || (e_mod_border_ignore(it->bd))) return NULL; @@ -1055,6 +1053,31 @@ _pager_cb_key_up(void *data EINA_UNUSED, int type EINA_UNUSED, void *event) return ECORE_CALLBACK_PASS_ON; } +static Eina_Bool +_pager_cb_border_remove(void *data, int type, void *event) +{ + E_Event_Border_Remove *ev = event; + Eina_List *l; + Item *it; + + EINA_LIST_FOREACH(items, l, it) + { + if (it->bd == ev->border) + { + items = eina_list_remove(items, it); + if (selected_item == it) + selected_item = NULL; + + evas_object_del(it->o_win); + + _pager_win_del(it); + break; + } + } + + return ECORE_CALLBACK_PASS_ON; +} + static Eina_Bool _pager_run(E_Manager *man) { @@ -1111,6 +1134,9 @@ _pager_run(E_Manager *man) h = ecore_event_handler_add(ECORE_EVENT_KEY_UP, _pager_cb_key_up, e); handlers = eina_list_append(handlers, h); + h = ecore_event_handler_add(E_EVENT_BORDER_REMOVE, + _pager_cb_border_remove, e); + handlers = eina_list_append(handlers, h); zoom = zone->desk_x_count; if (zoom < zone->desk_y_count)