[mutter/wip/carlosg/implicit-grab-with-popups: 117/117] wayland: Avoid popup grab focus changes if there's an implicit grab



commit 79050004b06bfec2281e4129b07784404e976a20
Author: Carlos Garnacho <carlosg gnome org>
Date:   Wed May 27 11:03:26 2020 +0200

    wayland: Avoid popup grab focus changes if there's an implicit grab
    
    Event delivery with grabbing popups stay essentially the same within
    the grabbing client, we still must honor the implicit grab as long as
    there is one.
    
    This is however not the case, the popup_grab_focus() function ignores
    the button state. The popup_grab_button() function will already indirectly
    re-sync the focus surface after the last button is released, so checking
    for button state in popup_grab_focus() is sufficient to make the implicit
    grab honored with popup grabs involved.
    
    Fixes: https://gitlab.gnome.org/GNOME/mutter/-/issues/1275
    
    https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1270

 src/wayland/meta-wayland-popup.c | 4 ++++
 1 file changed, 4 insertions(+)
---
diff --git a/src/wayland/meta-wayland-popup.c b/src/wayland/meta-wayland-popup.c
index f628ef04c6..a4788615b0 100644
--- a/src/wayland/meta-wayland-popup.c
+++ b/src/wayland/meta-wayland-popup.c
@@ -102,6 +102,7 @@ popup_grab_focus (MetaWaylandPointerGrab *grab,
 {
   MetaWaylandPopupGrab *popup_grab = (MetaWaylandPopupGrab*)grab;
   MetaWaylandSeat *seat = meta_wayland_pointer_get_seat (grab->pointer);
+  MetaWaylandPointer *pointer = grab->pointer;
 
   /*
    * We rely on having a pointer grab even when the seat doesn't have
@@ -112,6 +113,9 @@ popup_grab_focus (MetaWaylandPointerGrab *grab,
   if (!meta_wayland_seat_has_pointer (seat))
     return;
 
+  if (pointer->button_count > 0)
+    return;
+
   /* Popup grabs are in owner-events mode (ie, events for the same client
      are reported as normal) */
   if (surface &&


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