diff options
author | Benjamin Otte <otte@redhat.com> | 2020-02-16 16:22:37 +0100 |
---|---|---|
committer | Benjamin Otte <otte@redhat.com> | 2020-02-16 20:10:31 +0100 |
commit | da83457a60b4a1f375efb14f06f6be7c45ea0128 (patch) | |
tree | 52b4a7c07bc583d1a6f85e3d0d9c234f138a0807 /gtk/gtkcolorswatch.c | |
parent | dbad4404680204923df9abaa37ff077d1e350294 (diff) | |
download | gtk+-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.c | 18 |
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)); |