mirror of
https://gitlab.gnome.org/GNOME/gtk.git
synced 2024-12-28 22:41:43 +00:00
Merge branch 'x11-shortcuts-inhibit-fix' into 'master'
x11: update inhibit shortcuts on grab broken See merge request GNOME/gtk!1590
This commit is contained in:
commit
841e9b3f0e
@ -106,6 +106,8 @@ static void set_wm_name (GdkDisplay *display,
|
||||
const gchar *name);
|
||||
static void move_to_current_desktop (GdkSurface *surface);
|
||||
static void gdk_x11_toplevel_state_callback (GdkSurface *surface);
|
||||
static gboolean gdk_x11_toplevel_event_callback (GdkSurface *surface,
|
||||
GdkEvent *gdk_event);
|
||||
|
||||
/* Return whether time1 is considered later than time2 as far as xserver
|
||||
* time is concerned. Accounts for wraparound.
|
||||
@ -149,6 +151,9 @@ _gdk_x11_surface_get_toplevel (GdkSurface *surface)
|
||||
g_signal_connect (surface, "notify::state",
|
||||
G_CALLBACK (gdk_x11_toplevel_state_callback),
|
||||
NULL);
|
||||
g_signal_connect (surface, "event",
|
||||
G_CALLBACK (gdk_x11_toplevel_event_callback),
|
||||
NULL);
|
||||
}
|
||||
|
||||
return impl->toplevel;
|
||||
@ -449,6 +454,9 @@ gdk_x11_surface_finalize (GObject *object)
|
||||
g_signal_handlers_disconnect_by_func (GDK_SURFACE (impl),
|
||||
gdk_x11_toplevel_state_callback,
|
||||
NULL);
|
||||
g_signal_handlers_disconnect_by_func (GDK_SURFACE (impl),
|
||||
gdk_x11_toplevel_event_callback,
|
||||
NULL);
|
||||
|
||||
_gdk_x11_surface_grab_check_destroy (GDK_SURFACE (impl));
|
||||
|
||||
@ -5033,6 +5041,29 @@ gdk_x11_toplevel_state_callback (GdkSurface *surface)
|
||||
gdk_x11_toplevel_restore_system_shortcuts (GDK_TOPLEVEL (surface));
|
||||
}
|
||||
|
||||
static gboolean
|
||||
gdk_x11_toplevel_event_callback (GdkSurface *surface,
|
||||
GdkEvent *gdk_event)
|
||||
{
|
||||
GdkSeat *gdk_seat;
|
||||
|
||||
if (!surface->shortcuts_inhibited)
|
||||
return FALSE;
|
||||
|
||||
if (gdk_event_get_event_type (gdk_event) != GDK_GRAB_BROKEN)
|
||||
return FALSE;
|
||||
|
||||
gdk_seat = gdk_surface_get_seat_from_event (surface, gdk_event);
|
||||
if (gdk_seat != surface->current_shortcuts_inhibited_seat)
|
||||
return FALSE;
|
||||
|
||||
surface->current_shortcuts_inhibited_seat = NULL;
|
||||
surface->shortcuts_inhibited = FALSE;
|
||||
g_object_notify (G_OBJECT (surface), "shortcuts-inhibited");
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static void
|
||||
gdk_x11_toplevel_iface_init (GdkToplevelInterface *iface)
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user