discomfitor pushed a commit to branch enlightenment-0.21.

http://git.enlightenment.org/core/enlightenment.git/commit/?id=287b5ea0d952fd0bf72b89b85ef671ad6a2c1bbc

commit 287b5ea0d952fd0bf72b89b85ef671ad6a2c1bbc
Author: Carsten Haitzler (Rasterman) <ras...@rasterman.com>
Date:   Mon Jan 2 23:26:14 2017 +0900

    ibar - fix seg with ibar icon task menus are up while desktop files change
    
    segv if u go do make installs that install desktop files causing
    efreet to recheck desktop files causing e to reset desktop files
    causing ibar to refill icons but this causea a segv if a hover menu of
    windows for that icon are up at the same time. this fixes that.
    
    @fix
---
 src/modules/ibar/e_mod_main.c | 11 ++++++++++-
 1 file changed, 10 insertions(+), 1 deletion(-)

diff --git a/src/modules/ibar/e_mod_main.c b/src/modules/ibar/e_mod_main.c
index 6ecbe14..d8909c9 100644
--- a/src/modules/ibar/e_mod_main.c
+++ b/src/modules/ibar/e_mod_main.c
@@ -140,6 +140,8 @@ static void         _ibar_exec_new_client_show(void *data, 
Evas *e EINA_UNUSED,
 static Eina_Bool    _ibar_cb_out_hide_delay(void *data);
 static void         _ibar_icon_menu_show(IBar_Icon *ic, Eina_Bool grab);
 static void         _ibar_icon_menu_hide(IBar_Icon *ic, Eina_Bool grab);
+static void         _ibar_cb_icon_menu_img_del(void *data, Evas *e 
EINA_UNUSED, Evas_Object *obj, void *event_info EINA_UNUSED);
+static void         _ibar_cb_icon_frame_del(void *data, Evas *e EINA_UNUSED, 
Evas_Object *obj, void *event_info EINA_UNUSED);
 
 static E_Config_DD *conf_edd = NULL;
 static E_Config_DD *conf_item_edd = NULL;
@@ -872,7 +874,14 @@ _ibar_icon_free(IBar_Icon *ic)
    E_Exec_Instance *inst;
    Evas_Object *o;
 
-   EINA_LIST_FREE(ic->client_objs, o) evas_object_del(o);
+   EINA_LIST_FREE(ic->client_objs, o)
+     {
+        evas_object_event_callback_del(o, EVAS_CALLBACK_DEL,
+                                       _ibar_cb_icon_frame_del);
+        evas_object_event_callback_del(o, EVAS_CALLBACK_DEL,
+                                       _ibar_cb_icon_menu_img_del);
+        evas_object_del(o);
+     }
    if (ic->ibar->menu_icon == ic) ic->ibar->menu_icon = NULL;
    if (ic->ibar->ic_drop_before == ic) ic->ibar->ic_drop_before = NULL;
    if (ic->menu) e_object_data_set(E_OBJECT(ic->menu), NULL);

-- 


Reply via email to