From 4b2e75176b6e756cbe078f9396b97095230a476b Mon Sep 17 00:00:00 2001 From: Mike Blumenkrantz Date: Thu, 14 Jan 2016 15:05:33 -0500 Subject: [PATCH] improve menu hiding and autoclose remove menu object from autoclose (if set) and ensure that only the intended menu is deactivated in the autoclose callback this fixes some cases where the wrong menu could be closed (or not closed) due to race conditions with ecore and evas events --- src/bin/e_menu.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/bin/e_menu.c b/src/bin/e_menu.c index 6410b0ee5..7a1dbde0b 100644 --- a/src/bin/e_menu.c +++ b/src/bin/e_menu.c @@ -189,6 +189,8 @@ e_menu_hide_all(void) if (m->post_deactivate_cb.func) m->post_deactivate_cb.func(m->post_deactivate_cb.data, m); m->active = 0; + if (m->comp_object == e_comp->autoclose.obj) + e_comp_object_util_autoclose(NULL, NULL, NULL, NULL); _e_menu_unrealize(m); m->in_active_list = 0; e_object_unref(E_OBJECT(m)); @@ -2699,9 +2701,13 @@ _e_menu_cb_key_down(void *data EINA_UNUSED, Ecore_Event_Key *ev) */ static void -_e_menu_cb_mouse_evas_down(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED) +_e_menu_cb_mouse_evas_down(void *data, Evas_Object *obj EINA_UNUSED) { - _e_menu_deactivate_all(); + E_Menu *m = data; + + while (m->parent_item) + m = m->parent_item->menu; + e_menu_deactivate(m); } static Eina_Bool