diff --git a/src/lib/ecore_wl2/ecore_wl2_input.c b/src/lib/ecore_wl2/ecore_wl2_input.c index fb50d04117..67a2dcba80 100644 --- a/src/lib/ecore_wl2/ecore_wl2_input.c +++ b/src/lib/ecore_wl2/ecore_wl2_input.c @@ -671,6 +671,7 @@ _ecore_wl2_input_ungrab(Ecore_Wl2_Input *input) input->grab.window = NULL; input->grab.button = 0; input->grab.count = 0; + input->grab.touch_count = 0; } static void @@ -1210,6 +1211,7 @@ _touch_cb_down(void *data, struct wl_touch *touch EINA_UNUSED, unsigned int seri input->focus.touch = window; input->timestamp = timestamp; + input->grab.touch_count++; _pointer_cb_enter(data, NULL, serial, surface, x, y); @@ -1239,11 +1241,13 @@ _touch_cb_up(void *data, struct wl_touch *touch EINA_UNUSED, unsigned int serial BTN_LEFT, timestamp); if (input->grab.count) input->grab.count--; + if (input->grab.touch_count) input->grab.touch_count--; if ((input->grab.window) && (input->grab.button == BTN_LEFT) && (!input->grab.count)) _ecore_wl2_input_ungrab(input); - input->focus.touch = NULL; + if (input->grab.touch_count == 0) input->focus.touch = NULL; + } static void diff --git a/src/lib/ecore_wl2/ecore_wl2_private.h b/src/lib/ecore_wl2/ecore_wl2_private.h index 9b6d4f7e49..4c19886842 100644 --- a/src/lib/ecore_wl2/ecore_wl2_private.h +++ b/src/lib/ecore_wl2/ecore_wl2_private.h @@ -473,6 +473,7 @@ struct _Ecore_Wl2_Input { unsigned int button, count, timestamp; Ecore_Wl2_Window *window; + unsigned int touch_count; } grab; struct