#include "gtkdragiconprivate.h"
#include "gtkprivate.h"
#include "gtkmarshalers.h"
+#include "gtkicontheme.h"
+#include "gtkpicture.h"
#include "gtksettingsprivate.h"
/**
GdkContentProvider *content;
GdkDragAction actions;
- GtkWidget *icon_window;
GdkPaintable *paintable;
int hot_x;
int hot_y;
static void gtk_drag_source_dnd_finished_cb (GdkDrag *drag,
GtkDragSource *source);
-static void gtk_drag_source_drop_performed_cb (GdkDrag *drag,
- GtkDragSource *source);
static void gtk_drag_source_cancel_cb (GdkDrag *drag,
GdkDragCancelReason reason,
GtkDragSource *source);
g_clear_object (&source->content);
g_clear_object (&source->paintable);
- g_clear_object (&source->icon_window);
G_OBJECT_CLASS (gtk_drag_source_parent_class)->finalize (object);
}
{
gboolean delete_data;
- g_signal_handlers_disconnect_by_func (source->drag, gtk_drag_source_drop_performed_cb, source);
g_signal_handlers_disconnect_by_func (source->drag, gtk_drag_source_dnd_finished_cb, source);
g_signal_handlers_disconnect_by_func (source->drag, gtk_drag_source_cancel_cb, source);
drag_end (source, FALSE);
}
-static void
-gtk_drag_source_drop_performed_cb (GdkDrag *drag,
- GtkDragSource *source)
-{
- if (source->icon_window)
- gtk_widget_hide (source->icon_window);
-}
-
/**
* gtk_drag_source_drag_begin:
* @source: a #GtkDragSource
GdkSurface *surface;
double px, py;
int dx, dy;
- GtkWidget *icon;
g_return_if_fail (GTK_IS_DRAG_SOURCE (source));
g_return_if_fail (GTK_IS_WIDGET (widget));
}
gdk_drag_set_hotspot (source->drag, source->hot_x, source->hot_y);
- source->icon_window = gtk_drag_icon_new ();
- g_object_ref_sink (source->icon_window);
- gtk_drag_icon_set_surface (GTK_DRAG_ICON (source->icon_window),
- gdk_drag_get_drag_surface (source->drag));
-
- icon = gtk_picture_new_for_paintable (source->paintable);
- gtk_picture_set_can_shrink (GTK_PICTURE (icon), FALSE);
- gtk_drag_icon_set_widget (GTK_DRAG_ICON (source->icon_window), icon);
-
- gtk_widget_show (source->icon_window);
+ gtk_drag_icon_set_from_paintable (source->drag, source->paintable, source->hot_x, source->hot_y);
- g_signal_connect (source->drag, "drop-performed",
- G_CALLBACK (gtk_drag_source_drop_performed_cb), source);
g_signal_connect (source->drag, "dnd-finished",
G_CALLBACK (gtk_drag_source_dnd_finished_cb), source);
g_signal_connect (source->drag, "cancel",