From 924033e88af2c188f32b9c84cb660beb36167e48 Mon Sep 17 00:00:00 2001 From: Marcel Hollerbach Date: Mon, 19 Dec 2016 19:23:12 +0100 Subject: [PATCH] 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 b3ca8af7d5..cdf58bcfad 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 42f9d19809..a5c2c573d0 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); }