Commit 79050004 authored by Carlos Garnacho's avatar Carlos Garnacho Committed by Georges Basile Stavracas Neto
Browse files

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: #1275

!1270
parent e5ea8f54
Pipeline #189113 passed with stages
in 7 minutes and 56 seconds
......@@ -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 &&
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment