label: Use gdk_drag_begin
authorMatthias Clasen <mclasen@redhat.com>
Mon, 6 Jan 2020 21:00:32 +0000 (16:00 -0500)
committerMatthias Clasen <mclasen@redhat.com>
Wed, 8 Jan 2020 23:48:21 +0000 (18:48 -0500)
Use gdk_drag_begin directly for one-off drags.

gtk/gtklabel.c

index 6b56dfcfdc92daccb706253328434853a2574009..dbaab2545db7bfe396ef27fa2da4d519d4f4f422 100644 (file)
@@ -54,6 +54,7 @@
 #include "gtkpopovermenu.h"
 #include "gtknative.h"
 #include "gtkdragsource.h"
+#include "gtkdragicon.h"
 
 #include "a11y/gtklabelaccessibleprivate.h"
 
@@ -4716,19 +4717,24 @@ gtk_label_drag_gesture_update (GtkGestureDrag *gesture,
     {
       if (gtk_drag_check_threshold (widget, info->drag_start_x, info->drag_start_y, x, y))
        {
-          GtkDragSource *source;
-          GdkPaintable *paintable;
+          GdkDrag *drag;
+          GdkSurface *surface;
           GdkDevice *device;
 
-          source = gtk_drag_source_new ();
-          gtk_drag_source_set_content (source, info->provider);
-          paintable = get_selection_paintable (label);
-          gtk_drag_source_set_icon (source, paintable, 9, 0);
-          g_clear_object (&paintable); 
+          surface = gtk_native_get_surface (gtk_widget_get_native (widget));
           device = gtk_gesture_get_device (GTK_GESTURE (gesture));
-          gtk_drag_source_drag_begin (source, widget, device, info->drag_start_x, info->drag_start_y);
-          g_object_unref (source);
 
+          drag = gdk_drag_begin (surface,
+                                 device,
+                                 info->provider,
+                                 GDK_ACTION_COPY,
+                                 info->drag_start_x,
+                                 info->drag_start_y);
+
+          gtk_drag_icon_set_from_paintable (drag, get_selection_paintable (label), 0, 0);
+
+          g_object_unref (drag);
+          
          info->in_drag = FALSE;
        }
     }