efl_ui_focus_manager: unset redirect instead of wrefing it

so focus is restored correctly
This commit is contained in:
Marcel Hollerbach 2018-05-06 18:23:46 +02:00
parent fa9aff8f70
commit 69c2e6f0e6
1 changed files with 8 additions and 2 deletions

View File

@ -751,6 +751,12 @@ _efl_ui_focus_manager_calc_unregister(Eo *obj EINA_UNUSED, Efl_Ui_Focus_Manager_
eina_hash_del_by_key(pd->node_hash, &child);
}
static void
_redirect_del(void *data, const Efl_Event *event EINA_UNUSED)
{
efl_ui_focus_manager_redirect_set(data, NULL);
}
EOLIAN static void
_efl_ui_focus_manager_calc_efl_ui_focus_manager_redirect_set(Eo *obj, Efl_Ui_Focus_Manager_Calc_Data *pd, Efl_Ui_Focus_Manager *redirect)
{
@ -763,12 +769,12 @@ _efl_ui_focus_manager_calc_efl_ui_focus_manager_redirect_set(Eo *obj, Efl_Ui_Foc
old_manager = pd->redirect;
if (pd->redirect)
efl_wref_del(pd->redirect, &pd->redirect);
efl_event_callback_del(pd->redirect, EFL_EVENT_DEL, _redirect_del, obj);
pd->redirect = redirect;
if (pd->redirect)
efl_wref_add(pd->redirect, &pd->redirect);
efl_event_callback_add(pd->redirect, EFL_EVENT_DEL, _redirect_del, obj);
efl_ui_focus_manager_reset_history(old_manager);