mirror of
https://gitlab.gnome.org/GNOME/gtk.git
synced 2024-12-26 21:51:08 +00:00
gdk/wayland: Keep track of implicit grabs
Tracking of those broke sometime along the gdk cleanups, so we started missing some GDK_GRAB_BROKEN events from being emitted (eg. after a button press/implicit grab triggers an active grab). Implicit grabs are only added if there's no prior grab (either implicit through other button presses, or explicit), in order to keep accounting correct, make those prevail.
This commit is contained in:
parent
5e765eaac4
commit
2bd8124b5d
@ -2293,9 +2293,29 @@ _gdk_windowing_got_event (GdkDisplay *display,
|
||||
else if (type == GDK_LEAVE_NOTIFY)
|
||||
_gdk_display_set_surface_under_pointer (display, device, NULL);
|
||||
|
||||
if (type == GDK_BUTTON_RELEASE ||
|
||||
type == GDK_TOUCH_CANCEL ||
|
||||
type == GDK_TOUCH_END)
|
||||
if (type == GDK_BUTTON_PRESS)
|
||||
{
|
||||
GdkSurface *grab_surface;
|
||||
gboolean owner_events;
|
||||
|
||||
if (!gdk_device_grab_info (display, device, &grab_surface, &owner_events))
|
||||
{
|
||||
_gdk_display_add_device_grab (display,
|
||||
device,
|
||||
event_surface,
|
||||
GDK_OWNERSHIP_NONE,
|
||||
FALSE,
|
||||
GDK_ALL_EVENTS_MASK,
|
||||
serial,
|
||||
gdk_event_get_time (event),
|
||||
TRUE);
|
||||
_gdk_display_device_grab_update (display, device,
|
||||
source_device, serial);
|
||||
}
|
||||
}
|
||||
else if (type == GDK_BUTTON_RELEASE ||
|
||||
type == GDK_TOUCH_CANCEL ||
|
||||
type == GDK_TOUCH_END)
|
||||
{
|
||||
if (type == GDK_BUTTON_RELEASE ||
|
||||
gdk_event_get_pointer_emulated (event))
|
||||
|
Loading…
Reference in New Issue
Block a user