mirror of
https://github.com/brl/mutter.git
synced 2024-12-22 11:02:05 +00:00
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
This commit is contained in:
parent
e5ea8f5483
commit
79050004b0
@ -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 &&
|
||||
|
Loading…
Reference in New Issue
Block a user