raster pushed a commit to branch master.

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

commit 1967257dc7dc088bd6dfbd956bbb190340db7aac
Author: Carsten Haitzler (Rasterman) <[email protected]>
Date:   Wed Jul 31 13:04:44 2019 +0100

    e menu - fix grab and ungrab and forced hide all with desklock
    
    found a valgrind issue and an input issue all in one... this fixes
    that with no more valgrind complaints and input works if e menu is up
    whilst desklock kicks in.
    
    @fix
---
 src/bin/e_menu.c | 20 +++++++++++++++-----
 1 file changed, 15 insertions(+), 5 deletions(-)

diff --git a/src/bin/e_menu.c b/src/bin/e_menu.c
index 30bf08c09..5ed4ec203 100644
--- a/src/bin/e_menu.c
+++ b/src/bin/e_menu.c
@@ -81,9 +81,11 @@ static Eina_Bool    _e_menu_cb_scroll_animator(void *data);
 static void         _e_menu_cb_item_submenu_post_default(void *data, E_Menu 
*m, E_Menu_Item *mi);
 static void         _e_menu_category_free_cb(E_Menu_Category *cat);
 static void         _e_menu_cb_mouse_evas_down(void *data EINA_UNUSED, 
Evas_Object *obj EINA_UNUSED);
+static void         _e_menu_hide_cb(void *data, Evas *e EINA_UNUSED, 
Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED);
 
 /* local subsystem globals */
 static Ecore_Window _e_menu_win = UINT_MAX;
+static Eina_Bool _e_menu_grabbed = EINA_FALSE;
 static Eina_List *_e_active_menus = NULL;
 static E_Menu_Item *_e_active_menu_item = NULL;
 static E_Menu_Item *_e_prev_active_menu_item = NULL;
@@ -198,6 +200,11 @@ e_menu_hide_all(void)
         m->in_active_list = 0;
         e_object_unref(E_OBJECT(m));
      }
+   if (_e_menu_grabbed)
+     {
+        e_comp_ungrab_input(1, 1);
+        _e_menu_grabbed = EINA_FALSE;
+     }
 }
 
 E_API E_Menu *
@@ -1216,7 +1223,11 @@ e_menu_idler_before(void)
      {
         if (_e_menu_win == e_comp->ee_win)
           {
-             e_comp_ungrab_input(1, 1);
+             if (_e_menu_grabbed)
+               {
+                  e_comp_ungrab_input(1, 1);
+                  _e_menu_grabbed = EINA_FALSE;
+               }
              _e_menu_win = UINT_MAX;
              e_bindings_disabled_set(0);
           }
@@ -1869,6 +1880,8 @@ _e_menu_unrealize(E_Menu *m)
    if (!m->realized) return;
    /* freeze+thaw here breaks the universe. don't do it. */
    //evas_event_freeze(m->evas);
+   if (m->comp_object)
+     evas_object_event_callback_del(m->comp_object, EVAS_CALLBACK_HIDE, 
_e_menu_hide_cb);
    if (m->cur.visible && m->comp_object && (!stopping))
      {
         /* force unref in smart object */
@@ -1882,10 +1895,6 @@ _e_menu_unrealize(E_Menu *m)
         E_FREE_FUNC(m->comp_object, evas_object_del);
         return;
      }
-   if (m->comp_object)
-     {
-        evas_object_event_callback_del_full(m->comp_object, 
EVAS_CALLBACK_HIDE, _e_menu_hide_cb, m);
-     }
    evas_object_hide(m->comp_object);
    evas_object_del(m->comp_object);
    if (stopping && m->comp_object) evas_object_unref(m->comp_object);
@@ -1920,6 +1929,7 @@ _e_menu_activate_internal(E_Menu *m, E_Zone *zone)
              _e_menu_win = UINT_MAX;
              return;
           }
+        _e_menu_grabbed = EINA_TRUE;
         e_bindings_disabled_set(1);
      }
    m->zone = zone;

-- 


Reply via email to