[gtk+/gtk-3-22] wayland: Get implicit grab serial information from tablet devices
- From: Carlos Garnacho <carlosg src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+/gtk-3-22] wayland: Get implicit grab serial information from tablet devices
- Date: Thu, 20 Jul 2017 12:24:35 +0000 (UTC)
commit 3a83de295db4c5a3fc3e460498f6ac8a3a73fde5
Author: Jason Gerecke <killertofu gmail com>
Date: Fri Jun 23 11:17:53 2017 -0700
wayland: Get implicit grab serial information from tablet devices
If a tablet device is used to perform actions like window moving or resizing,
GTK must provide the correct implicit grab serial number over Wayland to Mutter
in order for the action to succeed. This commit adds tablet support to the
implicit serial getters.
https://bugzilla.gnome.org/show_bug.cgi?id=777333
gdk/wayland/gdkdevice-wayland.c | 27 ++++++++++++++++++++++++++-
1 files changed, 26 insertions(+), 1 deletions(-)
---
diff --git a/gdk/wayland/gdkdevice-wayland.c b/gdk/wayland/gdkdevice-wayland.c
index 33ecf40..04562b9 100644
--- a/gdk/wayland/gdkdevice-wayland.c
+++ b/gdk/wayland/gdkdevice-wayland.c
@@ -5075,9 +5075,25 @@ _gdk_wayland_device_get_implicit_grab_serial (GdkWaylandDevice *device,
if (sequence)
touch = gdk_wayland_seat_get_touch (GDK_WAYLAND_SEAT (seat),
GDK_EVENT_SEQUENCE_TO_SLOT (sequence));
+
if (touch)
return touch->touch_down_serial;
- else
+
+ if (event)
+ {
+ GdkDevice *source = gdk_event_get_source_device (event);
+ GdkWaylandSeat *wayland_seat = GDK_WAYLAND_SEAT (seat);
+ GList *l;
+
+ for (l = wayland_seat->tablets; l; l = l->next)
+ {
+ GdkWaylandTabletData *tablet = l->data;
+
+ if (tablet->current_device == source)
+ return tablet->pointer_info.press_serial;
+ }
+ }
+
return GDK_WAYLAND_SEAT (seat)->pointer_info.press_serial;
}
@@ -5088,6 +5104,7 @@ _gdk_wayland_seat_get_last_implicit_grab_serial (GdkSeat *seat,
GdkWaylandSeat *wayland_seat;
GdkWaylandTouchData *touch;
GHashTableIter iter;
+ GList *l;
uint32_t serial;
wayland_seat = GDK_WAYLAND_SEAT (seat);
@@ -5101,6 +5118,14 @@ _gdk_wayland_seat_get_last_implicit_grab_serial (GdkSeat *seat,
if (wayland_seat->pointer_info.press_serial > serial)
serial = wayland_seat->pointer_info.press_serial;
+ for (l = wayland_seat->tablets; l; l = l->next)
+ {
+ GdkWaylandTabletData *tablet = l->data;
+
+ if (tablet->pointer_info.press_serial > serial)
+ serial = tablet->pointer_info.press_serial;
+ }
+
while (g_hash_table_iter_next (&iter, NULL, (gpointer *) &touch))
{
if (touch->touch_down_serial > serial)
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]