[gtk+/gtk-3-22] wayland: Get implicit grab serial information from tablet devices



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]