bu5hm4n pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=924033e88af2c188f32b9c84cb660beb36167e48

commit 924033e88af2c188f32b9c84cb660beb36167e48
Author: Marcel Hollerbach <[email protected]>
Date:   Mon Dec 19 19:23:12 2016 +0100

    efl_ui_focus_manager: fix sub manager logical handling
---
 src/lib/elementary/efl_ui_focus_manager.c     |  5 ++++-
 src/lib/elementary/efl_ui_focus_manager_sub.c | 16 ++++++++++++++--
 2 files changed, 18 insertions(+), 3 deletions(-)

diff --git a/src/lib/elementary/efl_ui_focus_manager.c 
b/src/lib/elementary/efl_ui_focus_manager.c
index b3ca8af..cdf58bc 100644
--- a/src/lib/elementary/efl_ui_focus_manager.c
+++ b/src/lib/elementary/efl_ui_focus_manager.c
@@ -674,7 +674,7 @@ _efl_ui_focus_manager_unregister(Eo *obj EINA_UNUSED, 
Efl_Ui_Focus_Manager_Data
 EOLIAN static void
 _efl_ui_focus_manager_redirect_set(Eo *obj, Efl_Ui_Focus_Manager_Data *pd, 
Efl_Ui_Focus_Manager *redirect)
 {
-   printf("Now redirect %p\n", redirect);
+   Efl_Ui_Focus_Manager *old_manager;
 
    if (pd->redirect == redirect) return;
 
@@ -683,10 +683,13 @@ _efl_ui_focus_manager_redirect_set(Eo *obj, 
Efl_Ui_Focus_Manager_Data *pd, Efl_U
    if (pd->redirect)
      efl_wref_del(pd->redirect, &pd->redirect);
 
+   old_manager = pd->redirect;
    pd->redirect = redirect;
 
    if (pd->redirect)
      efl_wref_add(pd->redirect, &pd->redirect);
+
+   efl_event_callback_call(obj, EFL_UI_FOCUS_MANAGER_EVENT_REDIRECT_CHANGED , 
old_manager);
 }
 
 EOLIAN static Efl_Ui_Focus_Manager *
diff --git a/src/lib/elementary/efl_ui_focus_manager_sub.c 
b/src/lib/elementary/efl_ui_focus_manager_sub.c
index 42f9d19..a5c2c57 100644
--- a/src/lib/elementary/efl_ui_focus_manager_sub.c
+++ b/src/lib/elementary/efl_ui_focus_manager_sub.c
@@ -73,7 +73,7 @@ _border_flush(Eo *obj, Efl_Ui_Focus_Manager_Sub_Data *pd)
 
    elem = efl_parent_get(obj);
    manager = efl_ui_focus_user_manager_get(elem);
-   logical = efl_ui_focus_user_parent_get(elem);
+   logical = elem;
    borders = efl_ui_focus_manager_border_elements_get(obj);
 
    selection = NULL;
@@ -136,8 +136,18 @@ _parent_manager_pre_flush(void *data, const Efl_Event *ev 
EINA_UNUSED)
     _border_flush(data, pd);
 }
 
+static void
+_redirect_changed_cb(void *data, const Efl_Event *ev)
+{
+   //if (efl_ui_focus_manager_redirect_get(ev->object) != data) return;
+
+   MY_DATA(data, pd);
+   _border_flush(data, pd);
+}
+
 EFL_CALLBACKS_ARRAY_DEFINE(parent_manager,
-    {EFL_UI_FOCUS_MANAGER_EVENT_PRE_FLUSH, _parent_manager_pre_flush}
+    {EFL_UI_FOCUS_MANAGER_EVENT_PRE_FLUSH, _parent_manager_pre_flush},
+    {EFL_UI_FOCUS_MANAGER_EVENT_REDIRECT_CHANGED, _redirect_changed_cb}
 );
 
 static void
@@ -206,12 +216,14 @@ _efl_ui_focus_manager_sub_efl_object_parent_set(Eo *obj, 
Efl_Ui_Focus_Manager_Su
    old_parent = efl_parent_get(obj);
 
    efl_event_callback_forwarder_del(obj, EFL_UI_FOCUS_MANAGER_EVENT_PRE_FLUSH, 
old_parent);
+   efl_event_callback_forwarder_del(obj, 
EFL_UI_FOCUS_MANAGER_EVENT_REDIRECT_CHANGED, old_parent);
    efl_event_callback_array_del(old_parent, self_manager(), obj);
 
    efl_parent_set(efl_super(obj, MY_CLASS), parent);
 
    new_parent = efl_parent_get(obj);
    efl_event_callback_forwarder_add(obj, EFL_UI_FOCUS_MANAGER_EVENT_PRE_FLUSH, 
new_parent);
+   efl_event_callback_forwarder_add(obj, 
EFL_UI_FOCUS_MANAGER_EVENT_REDIRECT_CHANGED, new_parent);
    efl_event_callback_array_add(new_parent, self_manager(), obj);
 }
 

-- 


Reply via email to