diff options
Diffstat (limited to 'gtk/gtkdnd.c')
-rw-r--r-- | gtk/gtkdnd.c | 28 |
1 files changed, 15 insertions, 13 deletions
diff --git a/gtk/gtkdnd.c b/gtk/gtkdnd.c index 3ebfd9c0b7..a3559137e0 100644 --- a/gtk/gtkdnd.c +++ b/gtk/gtkdnd.c @@ -3753,15 +3753,10 @@ gtk_drag_source_info_destroy (GtkDragSourceInfo *info) gtk_drag_remove_icon (info); if (info->icon_pixbuf) - g_object_unref (info->icon_pixbuf); - - if (!info->proxy_dest) - g_signal_emit_by_name (info->widget, "drag_end", - info->context); - - if (info->widget) - g_object_unref (info->widget); - + { + g_object_unref (info->icon_pixbuf); + info->icon_pixbuf = NULL; + } g_signal_handlers_disconnect_by_func (info->ipc_widget, gtk_drag_grab_broken_event_cb, @@ -3782,6 +3777,13 @@ gtk_drag_source_info_destroy (GtkDragSourceInfo *info) gtk_drag_selection_get, info); + if (!info->proxy_dest) + g_signal_emit_by_name (info->widget, "drag_end", + info->context); + + if (info->widget) + g_object_unref (info->widget); + gtk_selection_remove_all (info->ipc_widget); g_object_set_data (G_OBJECT (info->ipc_widget), I_("gtk-info"), NULL); source_widgets = g_slist_remove (source_widgets, info->ipc_widget); @@ -3926,10 +3928,6 @@ gtk_drag_end (GtkDragSourceInfo *info, guint32 time) info->have_grab = FALSE; - gdk_display_pointer_ungrab (display, time); - gdk_display_keyboard_ungrab (display, time); - gtk_grab_remove (info->ipc_widget); - g_signal_handlers_disconnect_by_func (info->ipc_widget, gtk_drag_grab_broken_event_cb, info); @@ -3946,6 +3944,10 @@ gtk_drag_end (GtkDragSourceInfo *info, guint32 time) gtk_drag_key_cb, info); + gdk_display_pointer_ungrab (display, time); + gdk_display_keyboard_ungrab (display, time); + gtk_grab_remove (info->ipc_widget); + /* Send on a release pair to the original * widget to convince it to release its grab. We need to * call gtk_propagate_event() here, instead of |