summaryrefslogtreecommitdiff
path: root/gtk/gtkdragsource.c
diff options
context:
space:
mode:
authorMatthias Clasen <mclasen@redhat.com>2021-05-03 17:00:17 -0400
committerMatthias Clasen <mclasen@redhat.com>2021-05-03 17:00:17 -0400
commit9e952bc7ffeabd07d0320fc04c582ea395b26e7e (patch)
treeebdd85acb7255c88d94dbfe38c6f723c1a5a6b62 /gtk/gtkdragsource.c
parented97339ef1207374c03531ce3329543932504bc1 (diff)
downloadgtk+-9e952bc7ffeabd07d0320fc04c582ea395b26e7e.tar.gz
dragsource: Keep the source alive long enoughgnome-todo-dnd-crash
When a drop causes the event controller to be finalized (directly or indirectly), we end up segfaulting while trying to wrap up the drag operation. So, keep a reference on the GtkDragSource from when the drag begins to when it is done. This fixes a crash in gnome-todo when dragging tasks.
Diffstat (limited to 'gtk/gtkdragsource.c')
-rw-r--r--gtk/gtkdragsource.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/gtk/gtkdragsource.c b/gtk/gtkdragsource.c
index cd6c33a7fa..a75f60f5c2 100644
--- a/gtk/gtkdragsource.c
+++ b/gtk/gtkdragsource.c
@@ -470,6 +470,7 @@ drag_end (GtkDragSource *source,
gdk_drag_drop_done (source->drag, success);
g_clear_object (&source->drag);
+ g_object_unref (source);
}
static void
@@ -593,6 +594,9 @@ gtk_drag_source_drag_begin (GtkDragSource *source)
gtk_drag_source_ensure_icon (source, source->drag);
+ /* Keep the source alive until the drag is done */
+ g_object_ref (source);
+
g_signal_connect (source->drag, "dnd-finished",
G_CALLBACK (gtk_drag_source_dnd_finished_cb), source);
g_signal_connect (source->drag, "cancel",