summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormitchmindtree <mitchell.nordine@gmail.com>2017-06-02 14:41:56 +1000
committerJonas Ã…dahl <jadahl@gmail.com>2017-06-07 09:58:13 +0800
commite22c75377b4bb0be0bc21ed7a1f2f017672edbfe (patch)
treed2a0359522e311a7fc6d54490071d8efdb06a2d4
parent0f7c3f3678d3fa0a770daec34b522fc4a7346a6a (diff)
downloadmutter-e22c75377b4bb0be0bc21ed7a1f2f017672edbfe.tar.gz
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
-rw-r--r--src/wayland/meta-wayland-pointer.c22
1 files changed, 21 insertions, 1 deletions
diff --git a/src/wayland/meta-wayland-pointer.c b/src/wayland/meta-wayland-pointer.c
index 0cd288352..15e27cd39 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