summaryrefslogtreecommitdiff
path: root/gtk/gtkdnd.c
diff options
context:
space:
mode:
Diffstat (limited to 'gtk/gtkdnd.c')
-rw-r--r--gtk/gtkdnd.c28
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