efl_ui_focus_util: add helper for getting the highest manager objekt

This commit is contained in:
Marcel Hollerbach 2018-04-12 18:04:18 +02:00
parent e5001b2cf3
commit 9d5a9cf2e1
3 changed files with 19 additions and 13 deletions

View File

@ -53,4 +53,14 @@ _efl_ui_focus_util_focus(Eo *obj EINA_UNUSED, void *pd EINA_UNUSED, Efl_Ui_Focus
} while (m); } 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" #include "efl_ui_focus_util.eo.c"

View File

@ -7,5 +7,12 @@ class Efl.Ui.Focus.Util(Efl.Object) {
focus_elem : Efl.Ui.Focus.Object; [[Focus element]] 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;
}
} }
} }

View File

@ -277,17 +277,6 @@ EFL_START_TEST(logical_chain)
} }
EFL_END_TEST 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 static void
_check_chain(Efl_Ui_Focus_Manager *m, Efl_Ui_Focus_Object *objects[]) _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_reset_history(m);
efl_ui_focus_manager_setup_on_first_touch(m, EFL_UI_FOCUS_DIRECTION_NEXT, root); 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]); 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); 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(prev, objects[i - 1]);
} }
ck_assert_ptr_eq(efl_ui_focus_manager_move(m, EFL_UI_FOCUS_DIRECTION_PREVIOUS), NULL); ck_assert_ptr_eq(efl_ui_focus_manager_move(m, EFL_UI_FOCUS_DIRECTION_PREVIOUS), NULL);