summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarcel Hollerbach <marcel@osg.samsung.com>2018-05-06 18:23:46 +0200
committerMarcel Hollerbach <marcel@osg.samsung.com>2018-05-08 11:50:04 +0200
commit69c2e6f0e63a98131897161b2c2be1d3cbe63bd9 (patch)
tree5e6ee12258cece51d4f7c767213d4278c27056e8
parentfa9aff8f70a183453c04084c9e064548fa7ef5f4 (diff)
downloadefl-69c2e6f0e63a98131897161b2c2be1d3cbe63bd9.tar.gz
efl_ui_focus_manager: unset redirect instead of wrefing it
so focus is restored correctly
-rw-r--r--src/lib/elementary/efl_ui_focus_manager_calc.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/src/lib/elementary/efl_ui_focus_manager_calc.c b/src/lib/elementary/efl_ui_focus_manager_calc.c
index e6fdd4a7e5..d5f502b508 100644
--- a/src/lib/elementary/efl_ui_focus_manager_calc.c
+++ b/src/lib/elementary/efl_ui_focus_manager_calc.c
@@ -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);