From 91fe10165e45dcaf60da94a1518e84fe876d0658 Mon Sep 17 00:00:00 2001 From: Robin Gareus Date: Wed, 15 Jan 2025 02:05:43 +0100 Subject: [PATCH] Linux/X11 grab window when emulating touch button events The first touch moves the mouse cursor, but X motion events for the first touch are only sent after a XGrabPointer. --- libs/tk/ydk/gdkwindow.c | 16 ++++++++++++++++ libs/tk/ydk/x11/gdkevents-x11.c | 2 +- 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/libs/tk/ydk/gdkwindow.c b/libs/tk/ydk/gdkwindow.c index 96cf56c08a..76df4e8f67 100644 --- a/libs/tk/ydk/gdkwindow.c +++ b/libs/tk/ydk/gdkwindow.c @@ -10887,6 +10887,22 @@ proxy_button_event (GdkEvent *source_event, pointer_window, type == GDK_TOUCH_BEGIN ? GDK_BUTTON_PRESS : GDK_BUTTON_RELEASE, state, NULL, serial); + if (event_win != NULL) + { + /* grab window to create MOTION_NOTIFY messages for first touch */ + switch (type) + { + case GDK_TOUCH_BEGIN: + gdk_pointer_grab (event_win, FALSE, GDK_POINTER_MOTION_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK, NULL, NULL, time_); + break; + case GDK_TOUCH_END: + gdk_pointer_ungrab (time_); + break; + default: + g_assert (0); + break; + } + } } else #endif diff --git a/libs/tk/ydk/x11/gdkevents-x11.c b/libs/tk/ydk/x11/gdkevents-x11.c index 6b2c1d1523..25c386568d 100644 --- a/libs/tk/ydk/x11/gdkevents-x11.c +++ b/libs/tk/ydk/x11/gdkevents-x11.c @@ -2254,7 +2254,7 @@ gdk_event_translate (GdkDisplay *display, XIDeviceEvent *xev = (XIDeviceEvent *) xevent->xcookie.data; #ifdef G_ENABLE_DEBUG if (_gdk_debug_flags & GDK_DEBUG_TOUCH) - g_message ("TOUCH dev=%d src=%d | dt: %u flags: %x\n", xev->deviceid, xev->sourceid, xev->detail, xev->flags); + g_message ("TOUCH dev=%d src=%d | type: %d dt: %u flags: %x\n", xev->deviceid, xev->sourceid, xevent->xcookie.evtype, xev->detail, xev->flags); #endif window = gdk_window_lookup_for_display (display, xev->event); g_object_ref (window);