summaryrefslogtreecommitdiff
path: root/gtk/gtkcolorswatch.c
diff options
context:
space:
mode:
authorBenjamin Otte <otte@redhat.com>2020-02-16 16:22:37 +0100
committerBenjamin Otte <otte@redhat.com>2020-02-16 20:10:31 +0100
commitda83457a60b4a1f375efb14f06f6be7c45ea0128 (patch)
tree52b4a7c07bc583d1a6f85e3d0d9c234f138a0807 /gtk/gtkcolorswatch.c
parentdbad4404680204923df9abaa37ff077d1e350294 (diff)
downloadgtk+-da83457a60b4a1f375efb14f06f6be7c45ea0128.tar.gz
dnd: Remove gdk_content_provider_new_with_callback()
Content providers are meant to be immutable, apart from very special cases, but in those cases they need to emit gdk_content_provider_content_changed(). Having a constructor that just uses a get_func invites abuse of this by not making developers aware of those requirments. In fact, all users in GTK failed to do this. Instead, code should use the GtkDragSource::prepare signal to create content providers when needed. The same problem exists with gdk_content_provider_new_with_formats(), but this commit doesn't touch that.
Diffstat (limited to 'gtk/gtkcolorswatch.c')
-rw-r--r--gtk/gtkcolorswatch.c18
1 files changed, 9 insertions, 9 deletions
diff --git a/gtk/gtkcolorswatch.c b/gtk/gtkcolorswatch.c
index e66caa63e3..4a2ad7e93b 100644
--- a/gtk/gtkcolorswatch.c
+++ b/gtk/gtkcolorswatch.c
@@ -578,12 +578,15 @@ static const char *dnd_targets[] = {
"application/x-color"
};
-static void
-get_rgba_value (GValue *value,
- gpointer data)
+static GdkContentProvider *
+gtk_color_swatch_drag_prepare (GtkDragSource *source,
+ double x,
+ double y,
+ GtkColorSwatch *swatch)
{
- GtkColorSwatchPrivate *priv = gtk_color_swatch_get_instance_private (GTK_COLOR_SWATCH (data));
- g_value_set_boxed (value, &priv->color);
+ GtkColorSwatchPrivate *priv = gtk_color_swatch_get_instance_private (swatch);
+
+ return gdk_content_provider_new_typed (GDK_TYPE_RGBA, &priv->color);
}
void
@@ -594,13 +597,10 @@ gtk_color_swatch_set_rgba (GtkColorSwatch *swatch,
if (!priv->has_color)
{
- GdkContentProvider *content;
GtkDragSource *source;
source = gtk_drag_source_new ();
- content = gdk_content_provider_new_with_callback (GDK_TYPE_RGBA, get_rgba_value, swatch, NULL);
- gtk_drag_source_set_content (source, content);
- g_object_unref (content);
+ g_signal_connect (source, "prepare", G_CALLBACK (gtk_color_swatch_drag_prepare), swatch);
g_signal_connect (source, "drag-begin", G_CALLBACK (gtk_color_swatch_drag_begin), swatch);
gtk_widget_add_controller (GTK_WIDGET (swatch), GTK_EVENT_CONTROLLER (source));