bu5hm4n pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=8d1b9d4f9eb83d1573187f2f26328618813a8510

commit 8d1b9d4f9eb83d1573187f2f26328618813a8510
Author: Marcel Hollerbach <[email protected]>
Date:   Tue Jan 23 20:58:59 2018 +0100

    efl_ui_focus_manager: listen to deletion for regular and logical
    
    otherwise we might exit with a load of errors
---
 src/lib/elementary/efl_ui_focus_manager_calc.c | 17 ++++++++++++++---
 1 file changed, 14 insertions(+), 3 deletions(-)

diff --git a/src/lib/elementary/efl_ui_focus_manager_calc.c 
b/src/lib/elementary/efl_ui_focus_manager_calc.c
index ed93f90bcb..eace8c139d 100644
--- a/src/lib/elementary/efl_ui_focus_manager_calc.c
+++ b/src/lib/elementary/efl_ui_focus_manager_calc.c
@@ -692,12 +692,17 @@ _object_del_cb(void *data, const Efl_Event *event)
    efl_ui_focus_manager_calc_unregister(data, event->object);
 }
 
-EFL_CALLBACKS_ARRAY_DEFINE(focusable_node,
+EFL_CALLBACKS_ARRAY_DEFINE(regular_node,
     {EFL_GFX_EVENT_RESIZE, _node_new_geometry_cb},
     {EFL_GFX_EVENT_MOVE, _node_new_geometry_cb},
     {EFL_EVENT_DEL, _object_del_cb},
 );
 
+EFL_CALLBACKS_ARRAY_DEFINE(logical_node,
+    {EFL_EVENT_DEL, _object_del_cb},
+);
+
+
 //=============================
 
 static Node*
@@ -743,6 +748,9 @@ _efl_ui_focus_manager_calc_register_logical(Eo *obj, 
Efl_Ui_Focus_Manager_Calc_D
    node = _register(obj, pd, child, pnode);
    if (!node) return EINA_FALSE;
 
+   //listen to deletion
+   efl_event_callback_array_add(child, logical_node(), obj);
+
    node->type = NODE_TYPE_ONLY_LOGICAL;
    node->redirect_manager = redirect;
 
@@ -780,7 +788,7 @@ _efl_ui_focus_manager_calc_register(Eo *obj, 
Efl_Ui_Focus_Manager_Calc_Data *pd,
    if (!node) return EINA_FALSE;
 
    //listen to changes
-   efl_event_callback_array_add(child, focusable_node(), obj);
+   efl_event_callback_array_add(child, regular_node(), obj);
 
    node->type = NODE_TYPE_NORMAL;
    node->redirect_manager = redirect;
@@ -1080,7 +1088,10 @@ _free_node(void *data)
    Node *node = data;
    FOCUS_DATA(node->manager);
 
-   efl_event_callback_array_del(node->focusable, focusable_node(), 
node->manager);
+   if (node->type == NODE_TYPE_ONLY_LOGICAL)
+     efl_event_callback_array_del(node->focusable, logical_node(), 
node->manager);
+   else
+     efl_event_callback_array_del(node->focusable, regular_node(), 
node->manager);
 
    if (pd->root != data)
      {

-- 


Reply via email to