From ea0784d3186b01039749ae12faa01244ba2fea92 Mon Sep 17 00:00:00 2001 From: Marcel Hollerbach Date: Wed, 26 Jun 2019 08:50:59 -0400 Subject: [PATCH] evas_events: fix setting of 'pressed' member in Efl_Input_Key_Data Summary: this also adds tests verifying that EFL_EVENT_KEY_DOWN / EFL_EVENT_KEY_UP are emitted and passed with the correct event types, and fields on the event object. Depends on D9166 Reviewers: zmike, segfaultxavi Reviewed By: zmike Subscribers: cedric, #reviewers, #committers Tags: #efl Differential Revision: https://phab.enlightenment.org/D9167 --- src/lib/evas/canvas/evas_events.c | 2 ++ src/tests/elementary/efl_ui_test_win.c | 35 ++++++++++++++++++++++++++ 2 files changed, 37 insertions(+) diff --git a/src/lib/evas/canvas/evas_events.c b/src/lib/evas/canvas/evas_events.c index 8ab6bf4cd4..9d40007709 100644 --- a/src/lib/evas/canvas/evas_events.c +++ b/src/lib/evas/canvas/evas_events.c @@ -3462,9 +3462,11 @@ _canvas_event_feed_key_legacy(Eo *eo_e, Evas_Public_Data *e, ev->compose = compose; ev->timestamp = timestamp; ev->keycode = keycode; + ev->pressed = down; ev->no_stringshare = EINA_TRUE; ev->device = efl_ref(_evas_event_legacy_device_get(e->evas, EINA_FALSE)); + if (down) _canvas_event_feed_key_down_internal(e, ev); else diff --git a/src/tests/elementary/efl_ui_test_win.c b/src/tests/elementary/efl_ui_test_win.c index a0cc374969..67df0b21b5 100644 --- a/src/tests/elementary/efl_ui_test_win.c +++ b/src/tests/elementary/efl_ui_test_win.c @@ -126,6 +126,40 @@ EFL_START_TEST(efl_ui_win_test_efl_input_interface_focus) } EFL_END_TEST +#define TIMESTAMP 1337 + +static void +_check_key_event(void *data, const Efl_Event *ev) +{ + Eina_Bool *pressed = data; + + ck_assert_int_eq(efl_input_timestamp_get(ev->info), TIMESTAMP); + ck_assert_str_eq(efl_input_key_name_get(ev->info), "odiaeresis"); + ck_assert_str_eq(efl_input_key_get(ev->info), "ö"); + ck_assert_str_eq(efl_input_key_string_get(ev->info), "Ö"); + ck_assert_str_eq(efl_input_key_compose_string_get(ev->info), "Ö"); + ck_assert_int_eq(efl_input_key_code_get(ev->info), 0xffe1); + *pressed = efl_input_key_pressed_get(ev->info); +} + +EFL_START_TEST(efl_ui_win_test_efl_input_interface_key_down) +{ + Efl_Ui_Win *win; + Eina_Bool pressed = EINA_FALSE; + Efl_Canvas_Object *rect; + create_environment(&win, &rect); + + efl_event_callback_add(rect, EFL_EVENT_KEY_DOWN , _check_key_event, &pressed); + efl_event_callback_add(rect, EFL_EVENT_KEY_UP, _check_key_event, &pressed); + + evas_event_feed_key_down_with_keycode(evas_object_evas_get(win), "odiaeresis", "ö", "Ö", "Ö", TIMESTAMP, NULL, 0xffe1); + ck_assert_int_eq(pressed, EINA_TRUE); + + evas_event_feed_key_up_with_keycode(evas_object_evas_get(win), "odiaeresis", "ö", "Ö", "Ö", TIMESTAMP, NULL, 0xffe1); + ck_assert_int_eq(pressed, EINA_FALSE); +} +EFL_END_TEST + void efl_ui_test_win(TCase *tc) { @@ -133,4 +167,5 @@ efl_ui_test_win(TCase *tc) tcase_add_test(tc, efl_ui_win_test_object_focus); tcase_add_test(tc, efl_ui_win_test_object_focus); tcase_add_test(tc, efl_ui_win_test_efl_input_interface_focus); + tcase_add_test(tc, efl_ui_win_test_efl_input_interface_key_down); }