[mutter] wayland/pointer: Check pointer presence at set focus call site



commit d5d508415148994905c89320f4f6e655d2368c49
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]