56 lines
1.8 KiB
Diff
56 lines
1.8 KiB
Diff
|
--- old/gtk+-2.24.23/gtk/gtkdnd-quartz.c 2013-10-16 11:29:55.000000000 -0400
|
||
|
+++ new/gtk+-2.24.23/gtk/gtkdnd-quartz.c 2015-07-20 14:53:33.000000000 -0400
|
||
|
@@ -1928,16 +1928,29 @@
|
||
|
static gboolean
|
||
|
drag_drop_finished_idle_cb (gpointer data)
|
||
|
{
|
||
|
- gtk_drag_source_info_destroy (data);
|
||
|
+ GtkDragSourceInfo* info = (GtkDragSourceInfo*) data;
|
||
|
+ if (info->success)
|
||
|
+ {
|
||
|
+ gtk_drag_source_info_destroy (data);
|
||
|
+ }
|
||
|
return FALSE;
|
||
|
}
|
||
|
|
||
|
static void
|
||
|
-gtk_drag_drop_finished (GtkDragSourceInfo *info)
|
||
|
+gtk_drag_drop_finished (GtkDragSourceInfo *info, GtkDragResult result)
|
||
|
{
|
||
|
- if (info->success && info->delete)
|
||
|
- g_signal_emit_by_name (info->source_widget, "drag-data-delete",
|
||
|
- info->context);
|
||
|
+ gboolean success = (result == GTK_DRAG_RESULT_SUCCESS);
|
||
|
+
|
||
|
+ if (!success) {
|
||
|
+ g_signal_emit_by_name (info->source_widget, "drag-failed",
|
||
|
+ info->context, GTK_DRAG_RESULT_NO_TARGET, &success);
|
||
|
+ }
|
||
|
+
|
||
|
+ if (success && info->delete) {
|
||
|
+ g_signal_emit_by_name (info->source_widget, "drag-data-delete",
|
||
|
+ info->context);
|
||
|
+ }
|
||
|
+
|
||
|
|
||
|
/* Workaround for the fact that the NS API blocks until the drag is
|
||
|
* over. This way the context is still valid when returning from
|
||
|
@@ -1963,6 +1976,7 @@
|
||
|
{
|
||
|
GtkDragSourceInfo *info;
|
||
|
GdkDragContext *context;
|
||
|
+ GtkDragResult result;
|
||
|
|
||
|
g_return_if_fail (widget != NULL);
|
||
|
g_return_if_fail (event != NULL);
|
||
|
@@ -1975,7 +1989,8 @@
|
||
|
switch (event->type)
|
||
|
{
|
||
|
case GDK_DROP_FINISHED:
|
||
|
- gtk_drag_drop_finished (info);
|
||
|
+ result = (gdk_drag_context_get_dest_window (context) != NULL) ? GTK_DRAG_RESULT_SUCCESS : GTK_DRAG_RESULT_NO_TARGET;
|
||
|
+ gtk_drag_drop_finished (info, result);
|
||
|
break;
|
||
|
default:
|
||
|
g_assert_not_reached ();
|