diff --git a/src/lib/elementary/efl_ui_focus_util.c b/src/lib/elementary/efl_ui_focus_util.c index a8549e4da0..ce3677f721 100644 --- a/src/lib/elementary/efl_ui_focus_util.c +++ b/src/lib/elementary/efl_ui_focus_util.c @@ -53,4 +53,14 @@ _efl_ui_focus_util_focus(Eo *obj EINA_UNUSED, void *pd EINA_UNUSED, Efl_Ui_Focus } while (m); } +EOLIAN static Efl_Ui_Focus_Manager* +_efl_ui_focus_util_active_manager(Eo *obj EINA_UNUSED, void *pd EINA_UNUSED, Efl_Ui_Focus_Manager *manager) +{ + while (efl_ui_focus_manager_redirect_get(manager)) + manager = efl_ui_focus_manager_redirect_get(manager); + + return manager; +} + + #include "efl_ui_focus_util.eo.c" diff --git a/src/lib/elementary/efl_ui_focus_util.eo b/src/lib/elementary/efl_ui_focus_util.eo index 651193b10f..8b4293709a 100644 --- a/src/lib/elementary/efl_ui_focus_util.eo +++ b/src/lib/elementary/efl_ui_focus_util.eo @@ -7,5 +7,12 @@ class Efl.Ui.Focus.Util(Efl.Object) { focus_elem : Efl.Ui.Focus.Object; [[Focus element]] } } + active_manager @class { + [[Get the highest manager in the redirect property]] + params { + manager : Efl.Ui.Focus.Manager; + } + return: Efl.Ui.Focus.Manager; + } } } diff --git a/src/tests/elementary/elm_test_focus.c b/src/tests/elementary/elm_test_focus.c index 90b613a553..449100ca95 100644 --- a/src/tests/elementary/elm_test_focus.c +++ b/src/tests/elementary/elm_test_focus.c @@ -277,17 +277,6 @@ EFL_START_TEST(logical_chain) } EFL_END_TEST -static Efl_Ui_Focus_Manager* -_upper_manager(Efl_Ui_Focus_Manager *m) -{ - Efl_Ui_Focus_Manager *manager = m; - - while (efl_ui_focus_manager_redirect_get(manager)) - manager = efl_ui_focus_manager_redirect_get(manager); - - return manager; -} - static void _check_chain(Efl_Ui_Focus_Manager *m, Efl_Ui_Focus_Object *objects[]) { @@ -304,7 +293,7 @@ _check_chain(Efl_Ui_Focus_Manager *m, Efl_Ui_Focus_Object *objects[]) efl_ui_focus_manager_reset_history(m); efl_ui_focus_manager_setup_on_first_touch(m, EFL_UI_FOCUS_DIRECTION_NEXT, root); } - next = efl_ui_focus_manager_focus_get(_upper_manager(m)); + next = efl_ui_focus_manager_focus_get(efl_ui_focus_util_active_manager(EFL_UI_FOCUS_UTIL_CLASS, m)); ck_assert_ptr_eq(next, objects[i]); } @@ -324,7 +313,7 @@ _check_chain(Efl_Ui_Focus_Manager *m, Efl_Ui_Focus_Object *objects[]) efl_ui_focus_manager_setup_on_first_touch(m, EFL_UI_FOCUS_DIRECTION_PREVIOUS, root); } - prev = efl_ui_focus_manager_focus_get(_upper_manager(m)); + prev = efl_ui_focus_manager_focus_get(efl_ui_focus_util_active_manager(EFL_UI_FOCUS_UTIL_CLASS, m)); ck_assert_ptr_eq(prev, objects[i - 1]); } ck_assert_ptr_eq(efl_ui_focus_manager_move(m, EFL_UI_FOCUS_DIRECTION_PREVIOUS), NULL);