forked from enlightenment/efl
efl_ui_focus_manager: adjust pop history pop
It now searches for a element if the focus stack is empty. Differential Revision: https://phab.enlightenment.org/D6801
This commit is contained in:
parent
65c6b158f9
commit
92bb03d7f5
|
@ -146,7 +146,10 @@ interface Efl.Ui.Focus.Manager {
|
||||||
]]
|
]]
|
||||||
}
|
}
|
||||||
pop_history_stack {
|
pop_history_stack {
|
||||||
[[Removes the most upper history element, and gives the focus to the next one below]]
|
[[Removes the most upper history element, and move focus on.
|
||||||
|
|
||||||
|
If there is a element that was focused before, it will be taken. Otherwise, the best fitting element from the registered elements will be focused.
|
||||||
|
]]
|
||||||
}
|
}
|
||||||
setup_on_first_touch {
|
setup_on_first_touch {
|
||||||
[[Called when this manager is set as redirect]]
|
[[Called when this manager is set as redirect]]
|
||||||
|
|
|
@ -1682,15 +1682,40 @@ EOLIAN static void
|
||||||
_efl_ui_focus_manager_calc_efl_ui_focus_manager_pop_history_stack(Eo *obj EINA_UNUSED, Efl_Ui_Focus_Manager_Calc_Data *pd)
|
_efl_ui_focus_manager_calc_efl_ui_focus_manager_pop_history_stack(Eo *obj EINA_UNUSED, Efl_Ui_Focus_Manager_Calc_Data *pd)
|
||||||
{
|
{
|
||||||
Efl_Ui_Focus_Object *last_focusable;
|
Efl_Ui_Focus_Object *last_focusable;
|
||||||
Node *last;
|
Node *last = NULL;
|
||||||
|
|
||||||
if (!pd->focus_stack) return;
|
if (pd->redirect)
|
||||||
|
{
|
||||||
|
Eina_List *n;
|
||||||
|
|
||||||
last_focusable = _focus_stack_unfocus_last(pd);
|
last_focusable = pd->redirect_entry;
|
||||||
|
n = eina_list_last(pd->focus_stack);
|
||||||
|
|
||||||
|
while (n && (eina_list_data_get(n) != last_focusable))
|
||||||
|
{
|
||||||
|
n = eina_list_prev(n);
|
||||||
|
}
|
||||||
|
|
||||||
|
last = eina_list_data_get(n);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
last_focusable = _focus_stack_unfocus_last(pd);
|
||||||
|
//get now the highest, and unfocus that!
|
||||||
|
last = eina_list_last_data_get(pd->focus_stack);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (last)
|
||||||
|
{
|
||||||
|
efl_ui_focus_object_focus_set(last->focusable, EINA_TRUE);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
last = _request_subchild_except(pd->root, node_get(obj, pd, last_focusable));
|
||||||
|
if (last)
|
||||||
|
efl_ui_focus_manager_focus_set(obj, last->focusable);
|
||||||
|
}
|
||||||
|
|
||||||
//get now the highest, and unfocus that!
|
|
||||||
last = eina_list_last_data_get(pd->focus_stack);
|
|
||||||
if (last) efl_ui_focus_object_focus_set(last->focusable, EINA_TRUE);
|
|
||||||
efl_event_callback_call(obj, EFL_UI_FOCUS_MANAGER_EVENT_FOCUSED, last_focusable);
|
efl_event_callback_call(obj, EFL_UI_FOCUS_MANAGER_EVENT_FOCUSED, last_focusable);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -864,7 +864,7 @@ EFL_START_TEST(test_pop_history_element)
|
||||||
ck_assert_int_eq(efl_ui_focus_object_focus_get(c2), EINA_TRUE);
|
ck_assert_int_eq(efl_ui_focus_object_focus_get(c2), EINA_TRUE);
|
||||||
|
|
||||||
efl_ui_focus_manager_pop_history_stack(m);
|
efl_ui_focus_manager_pop_history_stack(m);
|
||||||
ck_assert_ptr_eq(efl_ui_focus_manager_focus_get(m), NULL);
|
ck_assert_ptr_eq(efl_ui_focus_manager_focus_get(m), c1);
|
||||||
ck_assert_int_eq(efl_ui_focus_object_focus_get(c2), EINA_FALSE);
|
ck_assert_int_eq(efl_ui_focus_object_focus_get(c2), EINA_FALSE);
|
||||||
|
|
||||||
efl_ui_focus_manager_focus_set(m, c1);
|
efl_ui_focus_manager_focus_set(m, c1);
|
||||||
|
|
Loading…
Reference in New Issue