ecore_wl2: wait for receiving result of keygrab_list_set/unset 15/313615/1
authorJihoon Kim <jihoon48.kim@samsung.com>
Fri, 28 Jun 2024 07:50:58 +0000 (16:50 +0900)
committerJihoon Kim <jihoon48.kim@samsung.com>
Fri, 28 Jun 2024 07:50:58 +0000 (16:50 +0900)
Change-Id: I39710c3d487acc25635956aab509196d674e47b5
Signed-off-by: Jihoon Kim <jihoon48.kim@samsung.com>
src/lib/ecore_wl2/ecore_wl2_input.c

index 72dcdb5..af60c43 100644 (file)
@@ -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)