diff --git a/src/Makefile_Elementary.am b/src/Makefile_Elementary.am index 31f62e9ab3..614ee74c0a 100644 --- a/src/Makefile_Elementary.am +++ b/src/Makefile_Elementary.am @@ -158,6 +158,7 @@ elm_private_eolian_files = \ lib/elementary/efl_ui_focus_parent_provider_standard.eo \ lib/elementary/efl_ui_state_model.eo \ tests/elementary/focus_test.eo \ + tests/elementary/focus_manager_test.eo \ tests/elementary/focus_test_sub_main.eo \ lib/elementary/efl_ui_selection_manager.eo \ lib/elementary/efl_datetime_manager.eo \ diff --git a/src/lib/elementary/Efl_Ui.h b/src/lib/elementary/Efl_Ui.h index 34f0549f4d..0b64b0405e 100644 --- a/src/lib/elementary/Efl_Ui.h +++ b/src/lib/elementary/Efl_Ui.h @@ -152,6 +152,7 @@ typedef Eo Efl_Ui_Focus_Manager; # ifdef EFL_BETA_API_SUPPORT EAPI void efl_ui_focus_relation_free(Efl_Ui_Focus_Relations *rel); # endif +# include # include # include # include diff --git a/src/tests/elementary/efl_ui_test_focus.c b/src/tests/elementary/efl_ui_test_focus.c index 16fce9fb05..38a2ac0200 100644 --- a/src/tests/elementary/efl_ui_test_focus.c +++ b/src/tests/elementary/efl_ui_test_focus.c @@ -2,13 +2,11 @@ EFL_START_TEST(focus_unregister_twice) { - Efl_Ui_Focus_Object *r1 = efl_add_ref(FOCUS_TEST_CLASS, NULL); - Efl_Ui_Focus_Object *r2 = efl_add_ref(FOCUS_TEST_CLASS, NULL); + Efl_Ui_Focus_Object *r1, *r2; - Efl_Ui_Focus_Manager *m = efl_add_ref(EFL_UI_FOCUS_MANAGER_CALC_CLASS, NULL, - efl_ui_focus_manager_root_set(efl_added, r1) - ); + Efl_Ui_Focus_Manager *m = focus_test_manager_new(&r1, EINA_TRUE); + r2 = efl_add_ref(FOCUS_TEST_CLASS, NULL); fail_if(!efl_ui_focus_manager_calc_register(m, r2, r1, NULL)); efl_ui_focus_manager_calc_unregister(m, r1); @@ -16,7 +14,6 @@ EFL_START_TEST(focus_unregister_twice) efl_ui_focus_manager_calc_unregister(m, r1); efl_unref(r2); - efl_unref(r1); efl_unref(m); } @@ -24,20 +21,22 @@ EFL_END_TEST EFL_START_TEST(focus_register_twice) { - Efl_Ui_Focus_Object *r1 = focus_test_object_new("r1", 0, 0, 10, 10); - Efl_Ui_Focus_Object *r2 = focus_test_object_new("r2", 0, 10, 10, 10); + Efl_Ui_Focus_Object *r1, *r2, *r3; - Efl_Ui_Focus_Manager *m = efl_add_ref(EFL_UI_FOCUS_MANAGER_CALC_CLASS, NULL, - efl_ui_focus_manager_root_set(efl_added, r1) - ); + Efl_Ui_Focus_Manager *m = focus_test_manager_new(&r1, EINA_TRUE); + Efl_Ui_Focus_Manager *m2 = focus_test_manager_new(&r3, EINA_TRUE); + + r2 = efl_add_ref(FOCUS_TEST_CLASS, NULL); fail_if(!efl_ui_focus_manager_calc_register(m, r2, r1, NULL)); //same confguration don't error out fail_if(!efl_ui_focus_manager_calc_register(m, r2, r1, NULL)); - //different confidurations error out - fail_if(efl_ui_focus_manager_calc_register(m, r2, r1, r1)); - efl_unref(r1); + EXPECT_ERROR_START; + //different confidurations error out + fail_if(efl_ui_focus_manager_calc_register(m, r2, r1, m2)); + EXPECT_ERROR_END; + efl_unref(m); } @@ -50,7 +49,7 @@ EFL_START_TEST(pos_check) focus_test_setup_cross(&middle, &south, &north, &east, &west); - m = focus_test_manager_new(&root); + m = focus_test_manager_new(&root, EINA_TRUE); efl_ui_focus_manager_calc_register(m, middle, root, NULL); efl_ui_focus_manager_calc_register(m, north, root, NULL); efl_ui_focus_manager_calc_register(m, south, root, NULL); @@ -122,7 +121,7 @@ EFL_START_TEST(pos_check2) south_east = focus_test_object_new("south_east", 60, 60, 5, 5); south_west = focus_test_object_new("south_west", 20, 60, 5, 5); - m = focus_test_manager_new(&root); + m = focus_test_manager_new(&root, EINA_TRUE); efl_ui_focus_manager_calc_register(m, middle, root, NULL); efl_ui_focus_manager_calc_register(m, north_east, root, NULL); efl_ui_focus_manager_calc_register(m, north_west, root, NULL); @@ -156,18 +155,12 @@ EFL_START_TEST(pos_check2) EFL_END_TEST EFL_START_TEST(redirect) { - TEST_OBJ_NEW(root, 0, 0, 20, 20); - TEST_OBJ_NEW(root2, 0, 0, 20, 20); + Efl_Ui_Focus_Object *root, *root2; TEST_OBJ_NEW(one, 0, 0, 20, 20); TEST_OBJ_NEW(two, 20, 0, 20, 20); - Efl_Ui_Focus_Manager *m = efl_add_ref(EFL_UI_FOCUS_MANAGER_CALC_CLASS, NULL, - efl_ui_focus_manager_root_set(efl_added, root) - ); - - Efl_Ui_Focus_Manager *m2 = efl_add_ref(EFL_UI_FOCUS_MANAGER_CALC_CLASS, NULL, - efl_ui_focus_manager_root_set(efl_added, root2) - ); + Efl_Ui_Focus_Manager *m = focus_test_manager_new(&root, EINA_TRUE); + Efl_Ui_Focus_Manager *m2 = focus_test_manager_new(&root2, EINA_TRUE); efl_ui_focus_manager_calc_register(m2, one, root2, NULL); efl_ui_focus_manager_calc_register(m2, two, root2, NULL); @@ -192,7 +185,7 @@ EFL_START_TEST(border_check) focus_test_setup_cross(&middle, &south, &north, &east, &west); - m = focus_test_manager_new(&root); + m = focus_test_manager_new(&root, EINA_TRUE); efl_ui_focus_manager_calc_register(m, middle, root, NULL); efl_ui_focus_manager_calc_register(m, south, root, NULL); efl_ui_focus_manager_calc_register(m, north, root, NULL); @@ -226,7 +219,7 @@ EFL_START_TEST(logical_chain) TEST_OBJ_NEW(root, 0, 0, 20, 20); - m = focus_test_manager_new(&lroot); + m = focus_test_manager_new(&lroot, EINA_TRUE); fail_if(!m); @@ -326,32 +319,31 @@ _check_chain(Efl_Ui_Focus_Manager *m, Efl_Ui_Focus_Object *objects[]) EFL_START_TEST(logical_chain_multi_redirect) { Efl_Ui_Focus_Manager *m, *m2, *m3, *m4; - Efl_Ui_Focus_Object *root,*root2, *root3, *root4, *c1_1, *c1_2, *c1_3, *c2, *c3, *c4; + Efl_Ui_Focus_Object *root,*root2, *root3, *root4, *c2, *c3, *c4; + + m = focus_test_manager_new(&root, EINA_TRUE); + + //Create 3 linked focus managers + m2 = focus_test_manager_new(&root2, EINA_FALSE); + efl_ui_focus_manager_calc_register_logical(m, root2, root, m2); + focus_test_manager_set(root2, m); + + m3 = focus_test_manager_new(&root3, EINA_FALSE); + efl_ui_focus_manager_calc_register_logical(m, root3, root, m3); + focus_test_manager_set(root3, m); + + m4 = focus_test_manager_new(&root4, EINA_FALSE); + efl_ui_focus_manager_calc_register_logical(m, root4, root, m4); + focus_test_manager_set(root4, m); - m = focus_test_manager_new(&root); - m2 = focus_test_manager_new(&root2); - m3 = focus_test_manager_new(&root3); - m4 = focus_test_manager_new(&root4); - c1_1 = focus_test_object_new("child1", 0, 0, 20, 20); - c1_2 = focus_test_object_new("child2", 0, 0, 20, 20); - c1_3 = focus_test_object_new("child3", 0, 0, 20, 20); - focus_test_manager_set(c1_1, m2); - focus_test_manager_set(c1_2, m3); - focus_test_manager_set(c1_3, m4); c2 = focus_test_object_new("child1", 0, 0, 20, 20); c3 = focus_test_object_new("child2", 0, 0, 20, 20); c4 = focus_test_object_new("child3", 0, 0, 20, 20); - - Efl_Ui_Focus_Object *objects[] = {c2, c3, c4, NULL}; - - efl_ui_focus_manager_calc_register(m, c1_1, root, m2); - efl_ui_focus_manager_calc_register(m, c1_2, root, m3); - efl_ui_focus_manager_calc_register(m, c1_3, root, m4); - efl_ui_focus_manager_calc_register(m2, c2, root2, NULL); efl_ui_focus_manager_calc_register(m3, c3, root3, NULL); efl_ui_focus_manager_calc_register(m4, c4, root4, NULL); + Efl_Ui_Focus_Object *objects[] = {c2, c3, c4, NULL}; _check_chain(m, objects); efl_unref(m2); @@ -364,11 +356,11 @@ EFL_START_TEST(logical_chain_single_redirect) Efl_Ui_Focus_Manager *m, *m2; Efl_Ui_Focus_Object *root,*root2, *c1_1, *c1_2, *c1_3, *c2_1, *c2_2, *c2_3; - m = focus_test_manager_new(&root); - m2 = focus_test_manager_new(&root2); + m = focus_test_manager_new(&root, EINA_TRUE); + m2 = focus_test_manager_new(&root2, EINA_FALSE); + focus_test_manager_set(root2, m); c1_1 = focus_test_object_new("child1", 0, 0, 20, 20); - c1_2 = focus_test_object_new("child2", 0, 0, 20, 20); - focus_test_manager_set(c1_2, m2); + c1_2 = root2; c1_3 = focus_test_object_new("child3", 0, 0, 20, 20); c2_1 = focus_test_object_new("child1", 0, 0, 20, 20); c2_2 = focus_test_object_new("child2", 0, 0, 20, 20); @@ -395,7 +387,9 @@ EFL_START_TEST(finalize_check) { Efl_Ui_Focus_Manager *m; + EXPECT_ERROR_START; m = efl_add_ref(EFL_UI_FOCUS_MANAGER_CALC_CLASS, NULL); + EXPECT_ERROR_END; fail_if(m); efl_unref(m); @@ -405,21 +399,19 @@ EFL_END_TEST EFL_START_TEST(redirect_param) { Efl_Ui_Focus_Manager *m, *m2; + Efl_Ui_Focus_Object *root,*root2; - TEST_OBJ_NEW(root, 0, 20, 20, 20); - TEST_OBJ_NEW(root2, 0, 20, 20, 20); TEST_OBJ_NEW(child, 0, 20, 20, 20); + TEST_OBJ_NEW(child2, 0, 20, 20, 20); - m = efl_add_ref(EFL_UI_FOCUS_MANAGER_CALC_CLASS, NULL, - efl_ui_focus_manager_root_set(efl_added, root) - ); - - m2 = efl_add_ref(EFL_UI_FOCUS_MANAGER_CALC_CLASS, NULL, - efl_ui_focus_manager_root_set(efl_added, root2) - ); + m = focus_test_manager_new(&root, EINA_TRUE); + m2 = focus_test_manager_new(&root2, EINA_FALSE); + efl_ui_focus_manager_calc_register_logical(m, root2, root, m2); + focus_test_manager_set(root2, m); efl_ui_focus_manager_calc_register(m, child, root, m2); - efl_ui_focus_manager_focus_set(m, child); + efl_ui_focus_manager_calc_register(m2, child2, root2, NULL); + efl_ui_focus_manager_focus_set(m, root2); ck_assert_ptr_eq(efl_ui_focus_manager_redirect_get(m), m2); @@ -431,29 +423,35 @@ EFL_END_TEST EFL_START_TEST(invalid_args_check) { Efl_Ui_Focus_Manager *m; + Efl_Ui_Focus_Object *root; - TEST_OBJ_NEW(root, 0, 20, 20, 20); TEST_OBJ_NEW(child, 0, 20, 20, 20); TEST_OBJ_NEW(child2, 0, 20, 20, 20); - m = efl_add_ref(EFL_UI_FOCUS_MANAGER_CALC_CLASS, NULL, - efl_ui_focus_manager_root_set(efl_added, root) - ); + m = focus_test_manager_new(&root, EINA_TRUE); //no child and no parent + EXPECT_ERROR_START; ck_assert_int_eq(efl_ui_focus_manager_calc_register(m, NULL, NULL, NULL), 0); + EXPECT_ERROR_END; + EXPECT_ERROR_START; ck_assert_int_eq(efl_ui_focus_manager_calc_register(m, child, NULL, NULL), 0); + EXPECT_ERROR_END; + EXPECT_ERROR_START; ck_assert_int_eq(efl_ui_focus_manager_calc_register(m, NULL, root, NULL), 0); - + EXPECT_ERROR_END; ck_assert_int_eq(efl_ui_focus_manager_calc_register(m, child, root, NULL), 1); - + EXPECT_ERROR_START; ck_assert_int_eq(efl_ui_focus_manager_calc_update_parent(m, child, NULL), 0); + EXPECT_ERROR_END; + EXPECT_ERROR_START; ck_assert_int_eq(efl_ui_focus_manager_calc_update_parent(m, NULL, NULL), 0); + EXPECT_ERROR_END; + EXPECT_ERROR_START; ck_assert_int_eq(efl_ui_focus_manager_calc_update_parent(m, child, child2), 0); - + EXPECT_ERROR_END; ck_assert_int_eq(efl_ui_focus_manager_calc_register(m, child2, root, NULL), 1); ck_assert_int_eq(efl_ui_focus_manager_calc_update_parent(m, child, child2), 1); - efl_unref(m); } EFL_END_TEST @@ -462,15 +460,13 @@ EFL_START_TEST(order_check) { Efl_Ui_Focus_Manager *m; Eina_List *order = NULL; + Efl_Ui_Focus_Object *root; - TEST_OBJ_NEW(root, 0, 20, 20, 20); TEST_OBJ_NEW(child1, 0, 20, 20, 20); TEST_OBJ_NEW(child2, 0, 20, 20, 20); TEST_OBJ_NEW(child3, 0, 20, 20, 20); - m = efl_add_ref(EFL_UI_FOCUS_MANAGER_CALC_CLASS, NULL, - efl_ui_focus_manager_root_set(efl_added, root) - ); + m = focus_test_manager_new(&root, EINA_TRUE); //no child and no parent efl_ui_focus_manager_calc_register(m, child1, root, NULL); @@ -488,8 +484,9 @@ EFL_START_TEST(order_check) //negativ check order = eina_list_append(order, child1); order = eina_list_append(order, child2); + EXPECT_ERROR_START; ck_assert_int_eq(efl_ui_focus_manager_calc_update_children(m, root, order), 0); - + EXPECT_ERROR_END; efl_unref(m); } EFL_END_TEST @@ -497,16 +494,14 @@ EFL_END_TEST EFL_START_TEST(logical_shift) { Efl_Ui_Focus_Manager *m; + Efl_Ui_Focus_Object *root; - TEST_OBJ_NEW(root, 0, 0, 10, 10); TEST_OBJ_NEW(child, 0, 0, 10, 10); TEST_OBJ_NEW(sub, 0, 0, 10, 10); TEST_OBJ_NEW(sub_sub, 0, 0, 10, 10); TEST_OBJ_NEW(sub_child, 0, 0, 10, 10); - m = efl_add_ref(EFL_UI_FOCUS_MANAGER_CALC_CLASS, NULL, - efl_ui_focus_manager_root_set(efl_added, root) - ); + m = focus_test_manager_new(&root, EINA_TRUE); efl_ui_focus_manager_calc_register(m, child, root, NULL); efl_ui_focus_manager_calc_register_logical(m, sub, root, NULL); @@ -519,9 +514,10 @@ EFL_START_TEST(logical_shift) efl_ui_focus_manager_focus_set(m, sub); ck_assert_ptr_eq(efl_ui_focus_manager_focus_get(m), sub_child); + EXPECT_ERROR_START; efl_ui_focus_manager_focus_set(m, sub_sub); ck_assert_ptr_eq(efl_ui_focus_manager_focus_get(m), sub_child); - + EXPECT_ERROR_END; efl_unref(m); } EFL_END_TEST @@ -529,21 +525,14 @@ EFL_END_TEST EFL_START_TEST(root_redirect_chain) { Efl_Ui_Focus_Manager *m, *m2; + Efl_Ui_Focus_Object *root, *root2; - TEST_OBJ_NEW(root, 0, 20, 20, 20); - TEST_OBJ_NEW(root2, 0, 20, 20, 20); TEST_OBJ_NEW(child, 0, 20, 20, 20); - m = efl_add_ref(EFL_UI_FOCUS_MANAGER_CALC_CLASS, NULL, - efl_ui_focus_manager_root_set(efl_added, root) - ); - + m = focus_test_manager_new(&root, EINA_TRUE); + m2 = focus_test_manager_new(&root2, EINA_TRUE); focus_test_manager_set(root2, m); - m2 = efl_add_ref(EFL_UI_FOCUS_MANAGER_CALC_CLASS, NULL, - efl_ui_focus_manager_root_set(efl_added, root2) - ); - efl_ui_focus_manager_calc_register(m, root2, root, m2); efl_ui_focus_manager_calc_register(m2, child, root2, NULL); efl_ui_focus_manager_focus_set(m2, child); @@ -558,35 +547,30 @@ EFL_END_TEST EFL_START_TEST(root_redirect_chain_unset) { Efl_Ui_Focus_Manager *m, *m2, *m3, *m4; + Efl_Ui_Focus_Object *root, *root2, *root3, *root4; - TEST_OBJ_NEW(root, 0, 20, 20, 20); - TEST_OBJ_NEW(root2, 0, 20, 20, 20); TEST_OBJ_NEW(child, 0, 20, 20, 20); + TEST_OBJ_NEW(child2, 0, 20, 20, 20); + TEST_OBJ_NEW(child3, 0, 20, 20, 20); - m = efl_add_ref(EFL_UI_FOCUS_MANAGER_CALC_CLASS, NULL, - efl_ui_focus_manager_root_set(efl_added, root) - ); - + m = focus_test_manager_new(&root, EINA_TRUE); + m2 = focus_test_manager_new(&root2, EINA_FALSE); + m3 = focus_test_manager_new(&root3, EINA_FALSE); + m4 = focus_test_manager_new(&root4, EINA_FALSE); focus_test_manager_set(root2, m); + focus_test_manager_set(root3, m); + focus_test_manager_set(root4, m3); - m2 = efl_add_ref(EFL_UI_FOCUS_MANAGER_CALC_CLASS, NULL, - efl_ui_focus_manager_root_set(efl_added, root2) - ); - - m3 = efl_add_ref(EFL_UI_FOCUS_MANAGER_CALC_CLASS, NULL, - efl_ui_focus_manager_root_set(efl_added, root2) - ); - - m4 = efl_add_ref(EFL_UI_FOCUS_MANAGER_CALC_CLASS, NULL, - efl_ui_focus_manager_root_set(efl_added, root2) - ); + efl_ui_focus_manager_calc_register(m, root2, root, m2); + efl_ui_focus_manager_calc_register(m, root3, root, m3); + efl_ui_focus_manager_calc_register(m2, child, root2, NULL); + efl_ui_focus_manager_calc_register(m3, child2, root3, NULL); + efl_ui_focus_manager_calc_register(m3, root4, root3, NULL); + efl_ui_focus_manager_calc_register(m4, child3, root4, NULL); efl_ui_focus_manager_redirect_set(m, m3); efl_ui_focus_manager_redirect_set(m3, m4); - efl_ui_focus_manager_redirect_set(m4, m2); - efl_ui_focus_manager_calc_register(m, root2, root, m2); - efl_ui_focus_manager_calc_register(m2, child, root2, NULL); efl_ui_focus_manager_focus_set(m2, child); ck_assert_ptr_eq(efl_ui_focus_manager_redirect_get(m), m2); @@ -605,16 +589,11 @@ static Efl_Ui_Focus_Manager_Calc* _recursive_triangle_manager(int recusion_depth, Efl_Ui_Focus_Object **most_right, Efl_Ui_Focus_Object **most_left, Eina_List **managers) { Efl_Ui_Focus_Manager *m, *m_child1 = NULL, *m_child3 = NULL; - Efl_Ui_Focus_Object *child1, *child3; + Efl_Ui_Focus_Object *child1, *child3, *root; - TEST_OBJ_NEW(root, 0, 20, 20, 20); TEST_OBJ_NEW(child2, 0, 20, 20, 20); - m = efl_add_ref(EFL_UI_FOCUS_MANAGER_CALC_CLASS, NULL, - efl_ui_focus_manager_root_set(efl_added, root) - ); - - printf("New manaager %p\n", m); + m = focus_test_manager_new(&root, recusion_depth == 0); if (recusion_depth < 3) { @@ -636,20 +615,14 @@ _recursive_triangle_manager(int recusion_depth, Efl_Ui_Focus_Object **most_right if (most_left) { *most_left = child1; - printf("SETTING %p\n", child1); } if (most_right) { *most_right = child3; - printf("SETTING %p\n", child3); } } - printf("Child 1 %p\n", child1); - printf("Child 2 %p\n", child2); - printf("Child 3 %p\n", child3); - efl_ui_focus_manager_calc_register(m, child1, root, m_child1); efl_ui_focus_manager_calc_register(m, child2, root, NULL); efl_ui_focus_manager_calc_register(m, child3, root, m_child3); @@ -681,14 +654,12 @@ EFL_START_TEST(first_touch_check) m = _recursive_triangle_manager(0, &most_right, &most_left, &managers); efl_ui_focus_manager_setup_on_first_touch(m, EFL_UI_FOCUS_DIRECTION_NEXT, efl_ui_focus_manager_root_get(m)); - printf("%p %p\n", most_left, most_right); ck_assert_ptr_eq(efl_ui_focus_manager_focus_get(_get_highest_redirect(m)), most_left); efl_ui_focus_manager_reset_history(m); efl_ui_focus_manager_setup_on_first_touch(m, EFL_UI_FOCUS_DIRECTION_PREVIOUS, efl_ui_focus_manager_root_get(m)); - printf("%s\n", efl_name_get(efl_ui_focus_manager_focus_get(_get_highest_redirect(m)))); ck_assert_ptr_eq(efl_ui_focus_manager_focus_get(_get_highest_redirect(m)), most_right); EINA_LIST_FREE(managers, m) @@ -701,7 +672,7 @@ EFL_START_TEST(test_request_subchild_empty) Efl_Ui_Focus_Manager *m; Efl_Ui_Focus_Object *root; - m = focus_test_manager_new(&root); + m = focus_test_manager_new(&root, EINA_TRUE); ck_assert_ptr_eq(efl_ui_focus_manager_request_subchild(m, root), NULL); @@ -714,7 +685,7 @@ EFL_START_TEST(test_request_subchild_one_element) Efl_Ui_Focus_Manager *m; Efl_Ui_Focus_Object *root, *c1; - m = focus_test_manager_new(&root); + m = focus_test_manager_new(&root, EINA_TRUE); c1 = focus_test_object_new("child1", 0, 0, 20, 20); efl_ui_focus_manager_calc_register(m, c1, root, NULL); @@ -730,7 +701,7 @@ EFL_START_TEST(test_request_subchild_child_alongside) Efl_Ui_Focus_Manager *m; Efl_Ui_Focus_Object *root, *c1, *c2; - m = focus_test_manager_new(&root); + m = focus_test_manager_new(&root, EINA_TRUE); c1 = focus_test_object_new("child1", 0, 0, 20, 20); c2 = focus_test_object_new("child2", 0, 0, 20, 20); efl_ui_focus_manager_calc_register(m, c1, root, NULL); @@ -749,7 +720,7 @@ EFL_START_TEST(test_request_subchild_child_logical_regular) Efl_Ui_Focus_Manager *m; Efl_Ui_Focus_Object *root, *c1, *c2; - m = focus_test_manager_new(&root); + m = focus_test_manager_new(&root, EINA_TRUE); c1 = focus_test_object_new("child1", 0, 0, 20, 20); c2 = focus_test_object_new("child2", 0, 0, 20, 20); efl_ui_focus_manager_calc_register_logical(m, c1, root, NULL); @@ -768,7 +739,7 @@ EFL_START_TEST(test_request_subchild_child_regular_regular) Efl_Ui_Focus_Manager *m; Efl_Ui_Focus_Object *root, *c1, *c2; - m = focus_test_manager_new(&root); + m = focus_test_manager_new(&root, EINA_TRUE); c1 = focus_test_object_new("child1", 0, 0, 20, 20); c2 = focus_test_object_new("child2", 0, 0, 20, 20); efl_ui_focus_manager_calc_register(m, c1, root, NULL); @@ -787,7 +758,7 @@ EFL_START_TEST(test_unregister_last_focused_no_history) Efl_Ui_Focus_Manager *m; Efl_Ui_Focus_Object *root, *c1, *c2, *c3; - m = focus_test_manager_new(&root); + m = focus_test_manager_new(&root, EINA_TRUE); c1 = focus_test_object_new("child1", 0, 0, 20, 20); c2 = focus_test_object_new("child2", 0, 0, 20, 20); c3 = focus_test_object_new("child3", 0, 0, 20, 20); @@ -810,7 +781,7 @@ EFL_START_TEST(test_unregister_last_focused) Efl_Ui_Focus_Manager *m; Efl_Ui_Focus_Object *root, *c1, *c2, *c3; - m = focus_test_manager_new(&root); + m = focus_test_manager_new(&root, EINA_TRUE); c1 = focus_test_object_new("child1", 0, 0, 20, 20); c2 = focus_test_object_new("child2", 0, 0, 20, 20); c3 = focus_test_object_new("child3", 0, 0, 20, 20); @@ -835,7 +806,7 @@ EFL_START_TEST(test_unregister_last_focused_no_child) Efl_Ui_Focus_Manager *m; Efl_Ui_Focus_Object *root, *c1; - m = focus_test_manager_new(&root); + m = focus_test_manager_new(&root, EINA_TRUE); c1 = focus_test_object_new("child1", 0, 0, 20, 20); efl_ui_focus_manager_calc_register(m, c1, root, NULL); @@ -853,7 +824,7 @@ EFL_START_TEST(test_pop_history_element) Efl_Ui_Focus_Manager *m; Efl_Ui_Focus_Object *root, *c1, *c2, *c3; - m = focus_test_manager_new(&root); + m = focus_test_manager_new(&root, EINA_TRUE); c1 = focus_test_object_new("child1", 0, 0, 20, 20); c2 = focus_test_object_new("child2", 0, 0, 20, 20); c3 = focus_test_object_new("child3", 0, 0, 20, 20); @@ -902,7 +873,7 @@ EFL_START_TEST(test_request_move) Efl_Ui_Focus_Manager *m; Efl_Ui_Focus_Object *root, *c1, *c2, *c3, *c4, *c5, *c6; - m = focus_test_manager_new(&root); + m = focus_test_manager_new(&root, EINA_TRUE); c1 = focus_test_object_new("child1", 0, 0, 20, 20); c2 = focus_test_object_new("child2", 0, 0, 20, 20); c3 = focus_test_object_new("child3", 0, 0, 20, 20); @@ -936,21 +907,14 @@ EFL_END_TEST EFL_START_TEST(redirect_unregister_entrypoint) { Efl_Ui_Focus_Manager *m, *m2; + Efl_Ui_Focus_Object *root, *root2; - TEST_OBJ_NEW(root, 0, 20, 20, 20); - TEST_OBJ_NEW(root2, 0, 20, 20, 20); TEST_OBJ_NEW(child, 0, 20, 20, 20); TEST_OBJ_NEW(child2, 0, 20, 20, 20); TEST_OBJ_NEW(child3, 0, 20, 20, 20); - m = efl_add(EFL_UI_FOCUS_MANAGER_CALC_CLASS, efl_main_loop_get(), - efl_ui_focus_manager_root_set(efl_added, root) - ); - - m2 = efl_add(EFL_UI_FOCUS_MANAGER_CALC_CLASS, efl_main_loop_get(), - efl_ui_focus_manager_root_set(efl_added, root2) - ); - + m = focus_test_manager_new(&root, EINA_TRUE); + m2 = focus_test_manager_new(&root2, EINA_TRUE); efl_ui_focus_manager_calc_register(m2, child3, root2, m2); @@ -963,19 +927,17 @@ EFL_START_TEST(redirect_unregister_entrypoint) ck_assert_ptr_eq(efl_ui_focus_manager_redirect_get(m), m2); ck_assert_ptr_eq(efl_ui_focus_manager_focus_get(m), NULL); - efl_del(m); - efl_del(m2); + efl_unref(m); + efl_unref(m2); } EFL_END_TEST static void -_child_focus_changed(void *data, const Efl_Event *ev) +_child_focus_changed(void *data, const Efl_Event *ev EINA_UNUSED) { Eina_Bool *flag = data; *flag = EINA_TRUE; - - printf("%s\n", efl_class_name_get(ev->object)); } EFL_START_TEST(test_events_child_focus) @@ -985,7 +947,7 @@ EFL_START_TEST(test_events_child_focus) Eina_Bool froot = EINA_FALSE, fc1 = EINA_FALSE, fc2 = EINA_FALSE, fc3 = EINA_FALSE, fc4 = EINA_FALSE, fc5 = EINA_FALSE, fc6 = EINA_FALSE; - m = focus_test_manager_new(&root); + m = focus_test_manager_new(&root, EINA_TRUE); c1 = focus_test_object_new("child1", 0, 0, 20, 20); efl_parent_set(c1, root); c2 = focus_test_object_new("child2", 0, 0, 20, 20); @@ -1087,7 +1049,7 @@ EFL_START_TEST(viewport_check) focus_test_setup_cross(&middle, &south, &north, &east, &west); - m = focus_test_manager_new(&root); + m = focus_test_manager_new(&root, EINA_TRUE); efl_ui_focus_manager_calc_register(m, middle, root, NULL); efl_ui_focus_manager_calc_register(m, south, root, NULL); efl_ui_focus_manager_calc_register(m, north, root, NULL); diff --git a/src/tests/elementary/efl_ui_test_focus_common.c b/src/tests/elementary/efl_ui_test_focus_common.c index c025d2833f..375031861a 100644 --- a/src/tests/elementary/efl_ui_test_focus_common.c +++ b/src/tests/elementary/efl_ui_test_focus_common.c @@ -2,6 +2,8 @@ #include "efl_ui_test_focus_common.h" +//#define DEBUG + #define Q(o,_x,_y,_w,_h) \ do {\ Eina_Rect rect; \ @@ -42,15 +44,28 @@ focus_test_setup_cross(Efl_Ui_Focus_Object **middle, Efl_Ui_Focus_Manager* -focus_test_manager_new(Efl_Ui_Focus_Object **middle) +focus_test_manager_new(Efl_Ui_Focus_Object **middle, Eina_Bool is_root) { Efl_Ui_Focus_Object *root; Efl_Ui_Focus_Manager *m; - root = focus_test_object_new("middle", 40, 40, 20, 20); + + if (!is_root) + { + root = focus_test_object_new("middle", 40, 40, 20, 20); + } + else + { + + root = efl_add_ref(FOCUS_MANAGER_TEST_CLASS, NULL, + efl_name_set(efl_added, "middle") + ); + Q(root, 40,40,20,20); + } m = efl_add_ref(EFL_UI_FOCUS_MANAGER_CALC_CLASS, NULL, efl_ui_focus_manager_root_set(efl_added, root) ); + if (middle) *middle = root; @@ -79,7 +94,9 @@ EOLIAN static void _focus_test_efl_ui_focus_object_focus_set(Eo *obj, Focus_Test_Data *pd, Eina_Bool focus) { pd->focus = focus; +#ifdef DEBUG printf("Object %p now focused\n", obj); +#endif efl_ui_focus_object_focus_set(efl_super(obj, FOCUS_TEST_CLASS), focus); } @@ -121,3 +138,9 @@ _focus_test_manager_set(Eo *obj EINA_UNUSED, Focus_Test_Data *pd, Efl_Ui_Focus_M #include "focus_test.eo.c" + +typedef struct { + +} Focus_Manager_Test_Data; + +#include "focus_manager_test.eo.c" diff --git a/src/tests/elementary/efl_ui_test_focus_common.h b/src/tests/elementary/efl_ui_test_focus_common.h index fc17edbb94..ceda6a0074 100644 --- a/src/tests/elementary/efl_ui_test_focus_common.h +++ b/src/tests/elementary/efl_ui_test_focus_common.h @@ -10,6 +10,7 @@ #include #include "efl_ui_suite.h" #include "focus_test.eo.h" +#include "focus_manager_test.eo.h" #define TEST_OBJ_NEW(name, x, y, w, h) \ Efl_Ui_Focus_Object* name; \ @@ -24,5 +25,5 @@ void focus_test_setup_cross(Efl_Ui_Focus_Object **middle, Efl_Ui_Focus_Object **east, Efl_Ui_Focus_Object **west); -Efl_Ui_Focus_Manager *focus_test_manager_new(Efl_Ui_Focus_Object **middle); +Efl_Ui_Focus_Manager *focus_test_manager_new(Efl_Ui_Focus_Object **middle, Eina_Bool); #endif diff --git a/src/tests/elementary/focus_manager_test.eo b/src/tests/elementary/focus_manager_test.eo new file mode 100644 index 0000000000..5d334b1777 --- /dev/null +++ b/src/tests/elementary/focus_manager_test.eo @@ -0,0 +1,4 @@ +class @beta Focus_Manager_Test extends Focus.Test implements Efl.Ui.Focus.Manager_Window_Root +{ + +} diff --git a/src/tests/elementary/meson.build b/src/tests/elementary/meson.build index edea9537dc..9eb1b50fdb 100644 --- a/src/tests/elementary/meson.build +++ b/src/tests/elementary/meson.build @@ -1,6 +1,7 @@ priv_eo_files = [ 'focus_test.eo', - 'focus_test_sub_main.eo' + 'focus_test_sub_main.eo', + 'focus_manager_test.eo' ] priv_eo_file_target = []