summaryrefslogtreecommitdiff
path: root/gtk/gtkdnd-quartz.c
diff options
context:
space:
mode:
authorMatthias Clasen <mclasen@redhat.com>2015-07-26 02:10:47 -0400
committerMatthias Clasen <mclasen@redhat.com>2015-07-26 02:10:47 -0400
commit6ac07a2e85ea8d53fc28455e46c2b0592607135b (patch)
tree94b2d70b2cfee92c1e3a739d0ba66c5da382b2b0 /gtk/gtkdnd-quartz.c
parent6d04183c5d6529840e7ee22a161a47bfc58b5303 (diff)
downloadgtk+-6ac07a2e85ea8d53fc28455e46c2b0592607135b.tar.gz
quartz: Implement NO_TARGET drag result
This is necessary to make notebook tab DND work. https://bugzilla.gnome.org/show_bug.cgi?id=752638
Diffstat (limited to 'gtk/gtkdnd-quartz.c')
-rw-r--r--gtk/gtkdnd-quartz.c19
1 files changed, 15 insertions, 4 deletions
diff --git a/gtk/gtkdnd-quartz.c b/gtk/gtkdnd-quartz.c
index 8bc5ef3027..68a47c409a 100644
--- a/gtk/gtkdnd-quartz.c
+++ b/gtk/gtkdnd-quartz.c
@@ -2054,14 +2054,23 @@ gtk_drag_source_info_destroy (GtkDragSourceInfo *info)
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 G_SOURCE_REMOVE;
}
static void
-gtk_drag_drop_finished (GtkDragSourceInfo *info)
+gtk_drag_drop_finished (GtkDragSourceInfo *info,
+ GtkDragResult result)
{
- if (info->success && info->delete)
+ 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);
@@ -2089,6 +2098,7 @@ _gtk_drag_source_handle_event (GtkWidget *widget,
{
GtkDragSourceInfo *info;
GdkDragContext *context;
+ GtkDragResult result;
g_return_if_fail (widget != NULL);
g_return_if_fail (event != NULL);
@@ -2101,7 +2111,8 @@ _gtk_drag_source_handle_event (GtkWidget *widget,
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 ();