discomfitor pushed a commit to branch master.

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

commit fb3f852601e4f360a129f5ff26faf779e39045dc
Author: Mike Blumenkrantz <[email protected]>
Date:   Sun Jul 27 17:40:53 2014 -0400

    redo start/syscon menu deactivate callbacks to not crash
    
    fix T1448
---
 src/modules/start/e_mod_main.c       | 10 ++++++----
 src/modules/syscon/e_syscon_gadget.c | 16 +++++++++-------
 2 files changed, 15 insertions(+), 11 deletions(-)

diff --git a/src/modules/start/e_mod_main.c b/src/modules/start/e_mod_main.c
index 8b27e47..84aba84 100644
--- a/src/modules/start/e_mod_main.c
+++ b/src/modules/start/e_mod_main.c
@@ -296,15 +296,17 @@ _button_cb_mouse_down(void *data, Evas *e __UNUSED__, 
Evas_Object *obj __UNUSED_
 }
 
 static void
-_menu_cb_post(void *data, E_Menu *m __UNUSED__)
+_menu_cb_post(void *data, E_Menu *m)
 {
-   Instance *inst;
+   Instance *inst = data;
+   Eina_Bool fin;
 
-   inst = data;
    if (stopping || (!inst->main_menu)) return;
+   fin = m == inst->main_menu;
+   e_object_del(E_OBJECT(m));
+   if (!fin) return;
    e_gadcon_locked_set(inst->gcc->gadcon, 0);
    edje_object_signal_emit(inst->o_button, "e,state,unfocused", "e");
-   e_object_del(E_OBJECT(inst->main_menu));
    inst->main_menu = NULL;
 }
 
diff --git a/src/modules/syscon/e_syscon_gadget.c 
b/src/modules/syscon/e_syscon_gadget.c
index 8c72a04..b809169 100644
--- a/src/modules/syscon/e_syscon_gadget.c
+++ b/src/modules/syscon/e_syscon_gadget.c
@@ -226,14 +226,16 @@ _cb_shutdown_show(void *data, Evas_Object *obj 
__UNUSED__, const char *emission
 }
 
 static void
-_cb_menu_post(void *data, E_Menu *m __UNUSED__)
+_cb_menu_post(void *data, E_Menu *m)
 {
-   Instance *inst;
-
-   if (!(inst = data)) return;
-   if (!inst->menu) return;
-   e_gadcon_locked_set(inst->gcc->gadcon, EINA_FALSE);
-   e_object_del(E_OBJECT(inst->menu));
+   Instance *inst = data;
+   Eina_Bool fin;
+
+   if (stopping || (!inst->menu)) return;
+   fin = m == inst->menu;
+   e_object_del(E_OBJECT(m));
+   if (!fin) return;
+   e_gadcon_locked_set(inst->gcc->gadcon, 0);
    inst->menu = NULL;
 }
 

-- 


Reply via email to