[mutter/gnome-3-22] wayland/pointer: Check pointer presence at set focus call site
- From: Jonas Ådahl <jadahl src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [mutter/gnome-3-22] wayland/pointer: Check pointer presence at set focus call site
- Date: Tue, 18 Oct 2016 09:17:41 +0000 (UTC)
commit 35be843f520bbb94668f4245ff6895a68dd72273
Author: Jonas Ådahl <jadahl gmail com>
Date: Wed Sep 21 13:41:11 2016 +0800
wayland/pointer: Check pointer presence at set focus call site
Make the caller of focus setting check whether there is a pointer to
update the focus state of. It makes it more obvious what to expect, as
the call would be a no-op in when no pointer is present.
Grabbing is still allowed without the presence of a pointer because it
is used by popups even on touch-only systems.
https://bugzilla.gnome.org/show_bug.cgi?id=771646
src/wayland/meta-wayland-pointer.c | 8 +++-----
src/wayland/meta-wayland-popup.c | 10 ++++++++++
2 files changed, 13 insertions(+), 5 deletions(-)
---
diff --git a/src/wayland/meta-wayland-pointer.c b/src/wayland/meta-wayland-pointer.c
index 1d8ddd3..60df635 100644
--- a/src/wayland/meta-wayland-pointer.c
+++ b/src/wayland/meta-wayland-pointer.c
@@ -416,11 +416,13 @@ default_grab_focus (MetaWaylandPointerGrab *grab,
MetaWaylandSurface *surface)
{
MetaWaylandPointer *pointer = grab->pointer;
+ MetaWaylandSeat *seat = meta_wayland_pointer_get_seat (pointer);
if (pointer->button_count > 0)
return;
- meta_wayland_pointer_set_focus (pointer, surface);
+ if (meta_wayland_seat_has_pointer (seat))
+ meta_wayland_pointer_set_focus (pointer, surface);
}
static void
@@ -794,10 +796,6 @@ meta_wayland_pointer_set_focus (MetaWaylandPointer *pointer,
MetaWaylandSurface *surface)
{
MetaWaylandInputDevice *input_device = META_WAYLAND_INPUT_DEVICE (pointer);
- MetaWaylandSeat *seat = meta_wayland_pointer_get_seat (pointer);
-
- if (!meta_wayland_seat_has_pointer (seat))
- return;
if (pointer->focus_surface == surface)
return;
diff --git a/src/wayland/meta-wayland-popup.c b/src/wayland/meta-wayland-popup.c
index c89b878..f9141dd 100644
--- a/src/wayland/meta-wayland-popup.c
+++ b/src/wayland/meta-wayland-popup.c
@@ -101,6 +101,16 @@ popup_grab_focus (MetaWaylandPointerGrab *grab,
MetaWaylandSurface *surface)
{
MetaWaylandPopupGrab *popup_grab = (MetaWaylandPopupGrab*)grab;
+ MetaWaylandSeat *seat = meta_wayland_pointer_get_seat (grab->pointer);
+
+ /*
+ * We rely on having a pointer grab even when the seat doesn't have
+ * the pointer capability. In this case, we shouldn't update any pointer focus
+ * since there is no such thing when the seat doesn't have the pointer
+ * capability.
+ */
+ if (!meta_wayland_seat_has_pointer (seat))
+ return;
/* Popup grabs are in owner-events mode (ie, events for the same client
are reported as normal) */
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]