forked from enlightenment/efl
efl_ui_widget: fix tree_unfocusable setting
when setting twice the same value, unsetting the same value would not restore the same state in the tree again. With this commit, we ensure this is working correctly.
This commit is contained in:
parent
e9493fbafc
commit
2677b9d480
|
@ -1748,7 +1748,9 @@ elm_widget_tree_unfocusable_set(Eo *obj, Eina_Bool tree_unfocusable)
|
|||
Efl_Ui_Widget *subs;
|
||||
Elm_Widget_Smart_Data *pd = efl_data_scope_safe_get(obj, MY_CLASS);
|
||||
EINA_SAFETY_ON_NULL_RETURN(pd);
|
||||
int distance, parent_counter = (pd->parent_obj ? _tree_unfocusable_counter_get(pd->parent_obj) : 0);
|
||||
int old_tree_unfocusable, distance, parent_counter = (pd->parent_obj ? _tree_unfocusable_counter_get(pd->parent_obj) : 0);
|
||||
|
||||
old_tree_unfocusable = pd->tree_unfocusable;
|
||||
|
||||
if (tree_unfocusable)
|
||||
pd->tree_unfocusable ++;
|
||||
|
@ -1762,15 +1764,18 @@ elm_widget_tree_unfocusable_set(Eo *obj, Eina_Bool tree_unfocusable)
|
|||
distance = MAX(MIN(tree_unfocusable, 1), 0);
|
||||
pd->tree_unfocusable = parent_counter + distance;
|
||||
}
|
||||
for (unsigned int i = 0; i < eina_array_count(pd->children); ++i)
|
||||
if (old_tree_unfocusable != pd->tree_unfocusable)
|
||||
{
|
||||
subs = eina_array_data_get(pd->children, i);
|
||||
if (efl_isa(subs, EFL_UI_WIDGET_CLASS))
|
||||
elm_widget_tree_unfocusable_set(subs, elm_widget_tree_unfocusable_get(obj));
|
||||
}
|
||||
for (unsigned int i = 0; i < eina_array_count(pd->children); ++i)
|
||||
{
|
||||
subs = eina_array_data_get(pd->children, i);
|
||||
if (efl_isa(subs, EFL_UI_WIDGET_CLASS))
|
||||
elm_widget_tree_unfocusable_set(subs, elm_widget_tree_unfocusable_get(obj));
|
||||
}
|
||||
|
||||
//focus state eval on all children
|
||||
_elm_widget_full_eval_children(obj, pd);
|
||||
//focus state eval on all children
|
||||
_elm_widget_full_eval_children(obj, pd);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -332,6 +332,38 @@ EFL_START_TEST(efl_ui_test_widget_win_provider_find)
|
|||
}
|
||||
EFL_END_TEST
|
||||
|
||||
#define CHECK_UNFOCUSABLE_STATE(x) \
|
||||
ck_assert_int_eq(elm_widget_tree_unfocusable_get(s.box), x); \
|
||||
ck_assert_int_eq(elm_widget_tree_unfocusable_get(s.win), x); \
|
||||
ck_assert_int_eq(elm_widget_tree_unfocusable_get(s.ic), x); \
|
||||
ck_assert_int_eq(elm_widget_tree_unfocusable_get(s.btn1), x); \
|
||||
ck_assert_int_eq(elm_widget_tree_unfocusable_get(s.btn2), x)
|
||||
|
||||
|
||||
EFL_START_TEST(efl_ui_test_widget_tree_unfocusable)
|
||||
{
|
||||
State s;
|
||||
|
||||
_small_ui(&s);
|
||||
CHECK_UNFOCUSABLE_STATE(0);
|
||||
|
||||
elm_widget_tree_unfocusable_set(s.win, EINA_TRUE);
|
||||
CHECK_UNFOCUSABLE_STATE(1);
|
||||
|
||||
elm_widget_tree_unfocusable_set(s.win, EINA_FALSE);
|
||||
CHECK_UNFOCUSABLE_STATE(0);
|
||||
|
||||
elm_widget_tree_unfocusable_set(s.win, EINA_TRUE);
|
||||
CHECK_UNFOCUSABLE_STATE(1);
|
||||
|
||||
elm_widget_tree_unfocusable_set(s.win, EINA_TRUE);
|
||||
CHECK_UNFOCUSABLE_STATE(1);
|
||||
|
||||
elm_widget_tree_unfocusable_set(s.win, EINA_FALSE);
|
||||
CHECK_UNFOCUSABLE_STATE(0);
|
||||
}
|
||||
EFL_END_TEST
|
||||
|
||||
void efl_ui_test_widget(TCase *tc)
|
||||
{
|
||||
tcase_add_checked_fixture(tc, fail_on_errors_setup, fail_on_errors_teardown);
|
||||
|
@ -346,4 +378,5 @@ void efl_ui_test_widget(TCase *tc)
|
|||
tcase_add_test(tc, efl_ui_test_widget_disabled_parent);
|
||||
tcase_add_test(tc, efl_ui_test_widget_disabled_behaviour);
|
||||
tcase_add_test(tc, efl_ui_test_widget_win_provider_find);
|
||||
tcase_add_test(tc, efl_ui_test_widget_tree_unfocusable);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue