diff options
author | Matthias Clasen <mclasen@redhat.com> | 2021-05-03 17:00:17 -0400 |
---|---|---|
committer | Matthias Clasen <mclasen@redhat.com> | 2021-05-03 17:00:17 -0400 |
commit | 9e952bc7ffeabd07d0320fc04c582ea395b26e7e (patch) | |
tree | ebdd85acb7255c88d94dbfe38c6f723c1a5a6b62 /gtk/gtkdragsource.c | |
parent | ed97339ef1207374c03531ce3329543932504bc1 (diff) | |
download | gtk+-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.c | 4 |
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", |