From 8a08a325bee293e9cef8d680abb90027f450b6ee Mon Sep 17 00:00:00 2001 From: Benjamin Otte Date: Thu, 7 Jun 2018 05:18:52 +0200 Subject: [PATCH] dnd: Implement gtk_drag_get_source_widget() differently Instead of keeping a list of source contexts, just use the current drag's info. --- gtk/gtkdnd.c | 22 +++++----------------- 1 file changed, 5 insertions(+), 17 deletions(-) diff --git a/gtk/gtkdnd.c b/gtk/gtkdnd.c index 190549111d..1ff968ea13 100644 --- a/gtk/gtkdnd.c +++ b/gtk/gtkdnd.c @@ -59,8 +59,6 @@ */ -static GSList *source_widgets = NULL; - typedef struct _GtkDragSourceInfo GtkDragSourceInfo; typedef struct _GtkDragDestInfo GtkDragDestInfo; @@ -323,22 +321,15 @@ gtk_drag_get_data (GtkWidget *widget, GtkWidget * gtk_drag_get_source_widget (GdkDragContext *context) { - GSList *tmp_list; + GtkDragSourceInfo *info; g_return_val_if_fail (GDK_IS_DRAG_CONTEXT (context), NULL); - tmp_list = source_widgets; - while (tmp_list) - { - GtkWidget *widget = tmp_list->data; - - if (gtk_widget_get_surface (widget) == gdk_drag_context_get_source_surface (context)) - return widget; - - tmp_list = tmp_list->next; - } + info = gtk_drag_get_source_info (context, FALSE); + if (info == NULL) + return NULL; - return NULL; + return info->widget; } /** @@ -910,8 +901,6 @@ gtk_drag_begin_internal (GtkWidget *widget, if (gdk_device_get_source (device) == GDK_SOURCE_KEYBOARD) device = gdk_device_get_associated_device (device); - source_widgets = g_slist_prepend (source_widgets, widget); - toplevel = gtk_widget_get_toplevel (widget); gtk_widget_translate_coordinates (widget, toplevel, x, y, &x, &y); @@ -1332,7 +1321,6 @@ gtk_drag_source_info_destroy (GtkDragSourceInfo *info) g_signal_emit_by_name (info->widget, "drag-end", info->context); g_object_set_data (G_OBJECT (info->widget), I_("gtk-info"), NULL); - source_widgets = g_slist_remove (source_widgets, info->widget); g_clear_object (&info->widget); -- 2.30.2