summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--docs/reference/gtk/gtk4-sections.txt1
-rw-r--r--gtk/gtkdragsource.c26
-rw-r--r--gtk/gtkdragsource.h3
3 files changed, 30 insertions, 0 deletions
diff --git a/docs/reference/gtk/gtk4-sections.txt b/docs/reference/gtk/gtk4-sections.txt
index e88cb0b6dc..186dea70bd 100644
--- a/docs/reference/gtk/gtk4-sections.txt
+++ b/docs/reference/gtk/gtk4-sections.txt
@@ -5365,6 +5365,7 @@ gtk_drag_set_icon_default
gtk_drag_check_threshold
gtk_drag_source_set
gtk_drag_source_set_icon_pixbuf
+gtk_drag_source_set_icon_surface
gtk_drag_source_set_icon_name
gtk_drag_source_set_icon_gicon
gtk_drag_source_unset
diff --git a/gtk/gtkdragsource.c b/gtk/gtkdragsource.c
index e6bc185797..4c701b4599 100644
--- a/gtk/gtkdragsource.c
+++ b/gtk/gtkdragsource.c
@@ -374,6 +374,32 @@ gtk_drag_source_set_icon_pixbuf (GtkWidget *widget,
}
/**
+ * gtk_drag_source_set_icon_surface: (method)
+ * @widget: a #GtkWidget
+ * @surface: the cairo surface for the drag icon
+ *
+ * Sets the icon that will be used for drags from a particular widget
+ * from a cairo surface. GTK+ retains a reference for @surface and will
+ * release it when it is no longer needed.
+ *
+ * Since: 3.94
+ */
+void
+gtk_drag_source_set_icon_surface (GtkWidget *widget,
+ cairo_surface_t *surface)
+{
+ GtkDragSourceSite *site;
+
+ g_return_if_fail (GTK_IS_WIDGET (widget));
+
+ site = g_object_get_data (G_OBJECT (widget), "gtk-site-data");
+ g_return_if_fail (site != NULL);
+
+ g_clear_pointer (&site->image_def, gtk_image_definition_unref);
+ site->image_def = gtk_image_definition_new_surface (surface);
+}
+
+/**
* gtk_drag_source_set_icon_name: (method)
* @widget: a #GtkWidget
* @icon_name: name of icon to use
diff --git a/gtk/gtkdragsource.h b/gtk/gtkdragsource.h
index 2e3e2c39fb..cca2a9784c 100644
--- a/gtk/gtkdragsource.h
+++ b/gtk/gtkdragsource.h
@@ -62,6 +62,9 @@ void gtk_drag_source_add_uri_targets (GtkWidget *widget);
GDK_AVAILABLE_IN_ALL
void gtk_drag_source_set_icon_pixbuf (GtkWidget *widget,
GdkPixbuf *pixbuf);
+GDK_AVAILABLE_IN_3_94
+void gtk_drag_source_set_icon_surface (GtkWidget *widget,
+ cairo_surface_t *surface);
GDK_AVAILABLE_IN_ALL
void gtk_drag_source_set_icon_name (GtkWidget *widget,
const gchar *icon_name);