efl_ui_focus_manager: fix sub manager logical handling

This commit is contained in:
Marcel Hollerbach 2016-12-19 19:23:12 +01:00
parent a4616bb6fe
commit 924033e88a
2 changed files with 18 additions and 3 deletions

View File

@ -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 *

View File

@ -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);
}