diff options
author | Marcel Hollerbach <mail@marcel-hollerbach.de> | 2019-06-20 13:33:03 +0200 |
---|---|---|
committer | Marcel Hollerbach <mail@marcel-hollerbach.de> | 2019-06-20 17:14:57 +0200 |
commit | 1e86c2bf9367d21eab70a0fa29762b98e39c7c03 (patch) | |
tree | 39e3687bc4d3ad06764020163378097757ae8386 /src/tests/elementary/efl_ui_test_win.c | |
parent | 8127f29c466e2e028b2067d438b77e119e410b41 (diff) | |
download | efl-1e86c2bf9367d21eab70a0fa29762b98e39c7c03.tar.gz |
efl_ui_win: repair scene event emission
It appears that EVAS_CALLBACK_FOCUS_IN / OUT is wrong here, as this is
for when a object gets focus but not the scene.
However, the inital event emission still does not work correctly, this
needs some further investigation.
Reviewed-by: Mike Blumenkrantz <michael.blumenkrantz@gmail.com>
Differential Revision: https://phab.enlightenment.org/D9138
Diffstat (limited to 'src/tests/elementary/efl_ui_test_win.c')
-rw-r--r-- | src/tests/elementary/efl_ui_test_win.c | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/src/tests/elementary/efl_ui_test_win.c b/src/tests/elementary/efl_ui_test_win.c new file mode 100644 index 0000000000..d7deb293f7 --- /dev/null +++ b/src/tests/elementary/efl_ui_test_win.c @@ -0,0 +1,58 @@ +#ifdef HAVE_CONFIG_H +# include "elementary_config.h" +#endif + +#include <Elementary.h> +#include "efl_ui_suite.h" + +static void +_boolean_flag_set(void *data, const Efl_Event *ev EINA_UNUSED) +{ + Eina_Bool *flag = data; + *flag = EINA_TRUE; + + efl_loop_quit(efl_main_loop_get(), EINA_VALUE_EMPTY); +} + +EFL_START_TEST(efl_ui_win_test_scene_focus) +{ + Efl_Ui_Win *win1; + Ecore_Evas *ee; + + Eina_Bool win1_focus_in = EINA_FALSE; + Eina_Bool win1_focus_out = EINA_FALSE; + + win1 = efl_new(EFL_UI_WIN_CLASS); + + //we want to test here the correct propagation of events from ecore_evas to the win object + //in order to ensure that we are resetting ee focus first here. + ee = ecore_evas_ecore_evas_get(evas_object_evas_get(win1)); + ecore_evas_focus_set(ee, EINA_TRUE); + ecore_evas_focus_set(ee, EINA_FALSE); + efl_event_callback_add(win1, EFL_CANVAS_SCENE_EVENT_SCENE_FOCUS_IN, _boolean_flag_set, &win1_focus_in); + efl_event_callback_add(win1, EFL_CANVAS_SCENE_EVENT_SCENE_FOCUS_OUT, _boolean_flag_set, &win1_focus_out); + + //focus in check + ecore_evas_focus_set(ee, EINA_TRUE); + if (!win1_focus_in) + efl_loop_begin(efl_main_loop_get()); + ck_assert_int_eq(win1_focus_in, EINA_TRUE); + ck_assert_int_eq(win1_focus_out, EINA_FALSE); + win1_focus_in = EINA_FALSE; + + //focus out check + ecore_evas_focus_set(ee, EINA_FALSE); + if (!win1_focus_out) + efl_loop_begin(efl_main_loop_get()); + + ck_assert_int_eq(win1_focus_out, EINA_TRUE); + ck_assert_int_eq(win1_focus_in, EINA_FALSE); + + efl_unref(win1); +} +EFL_END_TEST +void +efl_ui_test_win(TCase *tc) +{ + tcase_add_test(tc, efl_ui_win_test_scene_focus); +} |