Merge branch 'wip/carlosg/autohide-checks-on-x11' into 'main'

gdk/surface: Handle clicks outside client surfaces

See merge request GNOME/gtk!5369
This commit is contained in:
Matthias Clasen
2022-12-24 12:50:09 +00:00
2 changed files with 18 additions and 7 deletions

View File

@@ -2789,9 +2789,10 @@ check_autohide (GdkEvent *event)
{
GdkDisplay *display;
GdkDevice *device;
GdkSurface *grab_surface;
GdkSurface *grab_surface, *event_surface;
GdkEventType evtype = gdk_event_get_event_type (event);
switch ((guint) gdk_event_get_event_type (event))
switch ((guint) evtype)
{
case GDK_BUTTON_PRESS:
#if 0
@@ -2810,13 +2811,15 @@ check_autohide (GdkEvent *event)
device = gdk_event_get_device (event);
if (gdk_device_grab_info (display, device, &grab_surface, NULL))
{
GdkSurface *event_surface;
event_surface = gdk_event_get_surface (event);
if (event_surface->autohide &&
!event_surface->has_pointer)
event_surface = NULL;
if (grab_surface != event_surface &&
grab_surface != event_surface->parent &&
grab_surface->autohide)
if (grab_surface->autohide &&
(!event_surface ||
(grab_surface != event_surface &&
grab_surface != event_surface->parent)))
{
GdkSurface *surface = grab_surface;
@@ -2831,6 +2834,13 @@ check_autohide (GdkEvent *event)
}
}
break;
case GDK_ENTER_NOTIFY:
case GDK_LEAVE_NOTIFY:
event_surface = gdk_event_get_surface (event);
if (event_surface->autohide &&
gdk_crossing_event_get_mode (event) == GDK_CROSSING_NORMAL)
event_surface->has_pointer = evtype == GDK_ENTER_NOTIFY;
break;
default:;
}

View File

@@ -77,6 +77,7 @@ struct _GdkSurface
guint autohide : 1;
guint shortcuts_inhibited : 1;
guint request_motion : 1;
guint has_pointer : 1;
guint request_motion_id;