[mutter] wayland/pointer: Check for subsurfaces when grabbing



commit 8457e2bad603f4b3fbbc2c8a0e94ba29825598d5
Author: mitchmindtree <mitchell nordine gmail com>
Date:   Fri Jun 2 14:41:56 2017 +1000

    wayland/pointer: Check for subsurfaces when grabbing
    
    Previously, the function only returned `TRUE` if the given surface was
    equal to the given pointer's focused surface. This changes the behaviour
    to also return `TRUE` if any of the given surface's subsurfaces are
    equal to the pointer's focused surface.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=781811.

 src/wayland/meta-wayland-pointer.c |   22 +++++++++++++++++++++-
 1 files changed, 21 insertions(+), 1 deletions(-)
---
diff --git a/src/wayland/meta-wayland-pointer.c b/src/wayland/meta-wayland-pointer.c
index 0cd2883..15e27cd 100644
--- a/src/wayland/meta-wayland-pointer.c
+++ b/src/wayland/meta-wayland-pointer.c
@@ -1162,13 +1162,33 @@ meta_wayland_pointer_create_new_resource (MetaWaylandPointer *pointer,
     }
 }
 
+static gboolean
+pointer_can_grab_surface (MetaWaylandPointer *pointer,
+                          MetaWaylandSurface *surface)
+{
+  GList *l;
+
+  if (pointer->focus_surface == surface)
+    return TRUE;
+
+  for (l = surface->subsurfaces; l; l = l->next)
+    {
+      MetaWaylandSurface *subsurface = l->data;
+
+      if (pointer_can_grab_surface (pointer, subsurface))
+        return TRUE;
+    }
+
+  return FALSE;
+}
+
 gboolean
 meta_wayland_pointer_can_grab_surface (MetaWaylandPointer *pointer,
                                        MetaWaylandSurface *surface,
                                        uint32_t            serial)
 {
   return (pointer->grab_serial == serial &&
-          pointer->focus_surface == surface);
+          pointer_can_grab_surface (pointer, surface));
 }
 
 gboolean


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]