From d0c44130337197eba5306cf976ae1ee8559797e9 Mon Sep 17 00:00:00 2001 From: Arjan Molenaar Date: Sun, 4 Dec 2022 00:05:39 +0100 Subject: macos: Explicitly ungrab seat when drag is done or finalized This is an extra safeguard that avoids grabbing resources longer than nessecary. It also ensures the resource is removed from the drag, so it is not freed again. --- gdk/macos/gdkmacosdrag.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/gdk/macos/gdkmacosdrag.c b/gdk/macos/gdkmacosdrag.c index b7d9726798..34e8be9874 100644 --- a/gdk/macos/gdkmacosdrag.c +++ b/gdk/macos/gdkmacosdrag.c @@ -218,6 +218,12 @@ drag_ungrab (GdkMacosDrag *self) g_assert (GDK_IS_MACOS_DRAG (self)); + if (self->drag_seat) + { + gdk_seat_ungrab (self->drag_seat); + g_clear_object(&self->drag_seat); + } + display = gdk_drag_get_display (GDK_DRAG (self)); _gdk_macos_display_break_all_grabs (GDK_MACOS_DISPLAY (display), GDK_CURRENT_TIME); } @@ -536,7 +542,11 @@ gdk_macos_drag_finalize (GObject *object) GdkMacosDragSurface *drag_surface = g_steal_pointer (&self->drag_surface); g_clear_object (&self->cursor); - g_clear_object (&self->drag_seat); + if (self->drag_seat) + { + gdk_seat_ungrab (self->drag_seat); + g_clear_object (&self->drag_seat); + } G_OBJECT_CLASS (gdk_macos_drag_parent_class)->finalize (object); -- cgit v1.2.1