From 414db11d3181c1d85f93c65c04444d74a05e8f69 Mon Sep 17 00:00:00 2001 From: Mike Blumenkrantz Date: Tue, 11 Sep 2012 11:55:08 +0000 Subject: [PATCH] add some hacks to prevent spurious mouse movement events from breaking the universe when generating menus ticket #1492 SVN revision: 76459 --- src/bin/e_menu.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/bin/e_menu.c b/src/bin/e_menu.c index b612b35bf..994359099 100644 --- a/src/bin/e_menu.c +++ b/src/bin/e_menu.c @@ -112,6 +112,7 @@ static Ecore_Event_Handler *_e_menu_mouse_up_handler = NULL; static Ecore_Event_Handler *_e_menu_mouse_move_handler = NULL; static Ecore_Event_Handler *_e_menu_mouse_wheel_handler = NULL; static Ecore_Event_Handler *_e_menu_window_shape_handler = NULL; +static Eina_Bool _e_menu_lock = EINA_FALSE; static Eina_List * _e_active_menus_copy_ref(void) @@ -224,6 +225,7 @@ e_menu_shutdown(void) eina_hash_free(_e_menu_hash); _e_menu_hash = NULL; } + _e_menu_lock = EINA_FALSE; return 1; } @@ -761,10 +763,14 @@ e_menu_item_submenu_set(E_Menu_Item *mi, E_Menu *sub) mi->menu->changed = 1; if (!!sub == submenu) return; if (!mi->bg_object) return; + if (sub) e_object_ref(E_OBJECT(sub)); + _e_menu_lock = EINA_TRUE; if ((mi->submenu) || (mi->submenu_pre_cb.func)) { if (mi->submenu_object) evas_object_del(mi->submenu_object); o = edje_object_add(mi->menu->evas); + if (sub && (mi->submenu != sub)) e_object_ref(E_OBJECT(sub)); + mi->submenu = sub; mi->submenu_object = o; e_theme_edje_object_set(o, "base/theme/menus", "e/widgets/menu/default/submenu"); @@ -784,6 +790,8 @@ e_menu_item_submenu_set(E_Menu_Item *mi, E_Menu *sub) evas_object_pass_events_set(o, 1); e_box_pack_end(mi->container_object, o); } + _e_menu_lock = EINA_FALSE; + if (sub) e_object_unref(E_OBJECT(sub)); if ((mi->submenu) || (mi->submenu_pre_cb.func)) { if (e_theme_edje_object_set(mi->bg_object, "base/theme/menus", @@ -2730,6 +2738,7 @@ _e_menu_cb_item_in(void *data, Evas *evas __UNUSED__, Evas_Object *obj __UNUSED_ { E_Menu_Item *mi; + if (_e_menu_lock) return; mi = data; e_menu_item_active_set(mi, 1); }