From 3733c68afec2b9c6a6a8af3bd2b28e1886c3745e Mon Sep 17 00:00:00 2001 From: Jihoon Kim Date: Fri, 28 Jun 2024 16:50:58 +0900 Subject: [PATCH] ecore_wl2: wait for receiving result of keygrab_list_set/unset Change-Id: I39710c3d487acc25635956aab509196d674e47b5 Signed-off-by: Jihoon Kim --- src/lib/ecore_wl2/ecore_wl2_input.c | 29 ++++++++++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/src/lib/ecore_wl2/ecore_wl2_input.c b/src/lib/ecore_wl2/ecore_wl2_input.c index 72dcdb5..af60c43 100644 --- a/src/lib/ecore_wl2/ecore_wl2_input.c +++ b/src/lib/ecore_wl2/ecore_wl2_input.c @@ -83,6 +83,7 @@ static xkb_keycode_t *_home_key_latest = NULL; static Eina_Hash *_keygrabs = NULL; static int _ecore_wl2_keygrab_error = -1; static struct wl_array _ecore_wl2_keygrab_result_list; +static Eina_Bool _ecore_wl2_keygrab_result_recved = EINA_FALSE; // static void _keyboard_cb_key(void *data, struct wl_keyboard *keyboard EINA_UNUSED, unsigned int serial, unsigned int timestamp, unsigned int keycode, unsigned int state); @@ -2849,6 +2850,7 @@ _ecore_wl2_cb_keygrab_notify_list(void *data EINA_UNUSED, struct tizen_keyrouter { wl_array_init(&_ecore_wl2_keygrab_result_list); wl_array_copy(&_ecore_wl2_keygrab_result_list, grab_result); + _ecore_wl2_keygrab_result_recved = EINA_TRUE; } static void @@ -3046,6 +3048,24 @@ _ecore_wl2_keygrab_result_wait(Ecore_Wl2_Display *ewd) ret = wl_display_dispatch(ewd->wl.display); wait_count++; } + + if (_ecore_wl2_keygrab_error == -1) + WRN("Failed to receive keygrab result"); +} + +static void +_ecore_wl2_keygrab_list_result_wait(Ecore_Wl2_Display *ewd) +{ + unsigned int wait_count = 0; + int ret = 0; + while ((ret >= 0) && (_ecore_wl2_keygrab_result_recved == EINA_FALSE) && (wait_count < MAX_WAIT_COUNT)) + { + ret = wl_display_dispatch(ewd->wl.display); + wait_count++; + } + + if (!_ecore_wl2_keygrab_result_recved) + WRN("Failed to received keygrab list result"); } //I'm not sure that keygrab function should be changed to Ecore_evas_XXX. @@ -3313,6 +3333,8 @@ EAPI Eina_List Ecore_Wl2_Window_Keygrab_Info *grab_info; Ecore_Wl2_Input *input; + _ecore_wl2_keygrab_result_recved = EINA_FALSE; + if (win) ewd = win->display; else @@ -3398,9 +3420,10 @@ EAPI Eina_List ecore_wl2_display_sync(ewd); + _ecore_wl2_keygrab_list_result_wait(ewd); + wl_array_for_each(info, &_ecore_wl2_keygrab_result_list) { - if (!info->err) { INF("[PID:%d]Succeed to get return value !", getpid()); @@ -3464,6 +3487,8 @@ EAPI Eina_List Ecore_Wl2_Input *input; + _ecore_wl2_keygrab_result_recved = EINA_FALSE; + if (win) ewd = win->display; else @@ -3519,6 +3544,8 @@ EAPI Eina_List ecore_wl2_display_sync(ewd); + _ecore_wl2_keygrab_list_result_wait(ewd); + wl_array_for_each(info, &_ecore_wl2_keygrab_result_list) { if (!info->err) -- 2.7.4