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);
{
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
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.
Ecore_Wl2_Window_Keygrab_Info *grab_info;
Ecore_Wl2_Input *input;
+ _ecore_wl2_keygrab_result_recved = EINA_FALSE;
+
if (win)
ewd = win->display;
else
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());
Ecore_Wl2_Input *input;
+ _ecore_wl2_keygrab_result_recved = EINA_FALSE;
+
if (win)
ewd = win->display;
else
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)