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

View File

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

View File

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