summaryrefslogtreecommitdiff
path: root/gtk/gtkdragicon.c
diff options
context:
space:
mode:
authorMatthias Clasen <mclasen@redhat.com>2020-01-06 15:47:25 -0500
committerMatthias Clasen <mclasen@redhat.com>2020-01-08 18:48:21 -0500
commit78832c65b5fe2c336639825b3a7ef8b2af1226d0 (patch)
tree9ae7a191971a82ca2c84c9574542bd61058a17fa /gtk/gtkdragicon.c
parente8b830a3ddbfe5d1b162e4dfa678d5e323c78267 (diff)
downloadgtk+-78832c65b5fe2c336639825b3a7ef8b2af1226d0.tar.gz
Make GtkDragIcon public
This is needed if we want to use gdk_drag_begin for one-off drags, without a GtkDragSource.
Diffstat (limited to 'gtk/gtkdragicon.c')
-rw-r--r--gtk/gtkdragicon.c40
1 files changed, 40 insertions, 0 deletions
diff --git a/gtk/gtkdragicon.c b/gtk/gtkdragicon.c
index 8b6edbbf97..48ac83d3a1 100644
--- a/gtk/gtkdragicon.c
+++ b/gtk/gtkdragicon.c
@@ -23,6 +23,8 @@
#include "gtkintl.h"
#include "gtkwidgetprivate.h"
#include "gtkcssnodeprivate.h"
+#include "gtknativeprivate.h"
+#include "gtkpicture.h"
struct _GtkDragIcon
@@ -374,6 +376,44 @@ gtk_drag_icon_new (void)
return g_object_new (GTK_TYPE_DRAG_ICON, NULL);
}
+GtkWidget *
+gtk_drag_icon_new_for_drag (GdkDrag *drag)
+{
+ GtkWidget *icon;
+
+ g_return_val_if_fail (GDK_IS_DRAG (drag), NULL);
+
+ icon = g_object_new (GTK_TYPE_DRAG_ICON, NULL);
+
+ gtk_drag_icon_set_surface (GTK_DRAG_ICON (icon), gdk_drag_get_drag_surface (drag));
+
+ return icon;
+}
+
+void
+gtk_drag_icon_set_from_paintable (GdkDrag *drag,
+ GdkPaintable *paintable,
+ int hot_x,
+ int hot_y)
+{
+ GtkWidget *icon;
+ GtkWidget *picture;
+
+ gdk_drag_set_hotspot (drag, hot_x, hot_y);
+
+ icon = gtk_drag_icon_new_for_drag (drag);
+
+ picture = gtk_picture_new_for_paintable (paintable);
+ gtk_picture_set_can_shrink (GTK_PICTURE (picture), FALSE);
+ gtk_container_add (GTK_CONTAINER (icon), picture);
+
+ g_object_set_data_full (G_OBJECT (drag),
+ "icon",
+ g_object_ref_sink (icon),
+ (GDestroyNotify)gtk_widget_destroy);
+ gtk_widget_show (icon);
+}
+
void
gtk_drag_icon_set_surface (GtkDragIcon *icon,
GdkSurface *surface)