diff options
author | mitchmindtree <mitchell.nordine@gmail.com> | 2017-06-02 14:41:56 +1000 |
---|---|---|
committer | Jonas Ã…dahl <jadahl@gmail.com> | 2017-06-07 09:58:13 +0800 |
commit | e22c75377b4bb0be0bc21ed7a1f2f017672edbfe (patch) | |
tree | d2a0359522e311a7fc6d54490071d8efdb06a2d4 | |
parent | 0f7c3f3678d3fa0a770daec34b522fc4a7346a6a (diff) | |
download | mutter-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.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 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 |