summaryrefslogtreecommitdiff
path: root/gtk/gtkcolorswatch.c
diff options
context:
space:
mode:
authorBenjamin Otte <otte@redhat.com>2020-03-01 17:32:40 +0100
committerBenjamin Otte <otte@redhat.com>2020-03-02 03:18:55 +0100
commitc3fb6ca747c4f49c3e5a21c287baf37f1ab4676d (patch)
tree432c7f64175cf36e49a19ba9c6dfa21cf74049b4 /gtk/gtkcolorswatch.c
parent3f7b401de06c3e7559d613a7bf8246639186884c (diff)
downloadgtk+-c3fb6ca747c4f49c3e5a21c287baf37f1ab4676d.tar.gz
colorswatch: Switch to dragged color during dnd
This is really simple to implement now, so do it.
Diffstat (limited to 'gtk/gtkcolorswatch.c')
-rw-r--r--gtk/gtkcolorswatch.c22
1 files changed, 17 insertions, 5 deletions
diff --git a/gtk/gtkcolorswatch.c b/gtk/gtkcolorswatch.c
index ae424ad572..63dad35bd9 100644
--- a/gtk/gtkcolorswatch.c
+++ b/gtk/gtkcolorswatch.c
@@ -89,25 +89,35 @@ swatch_snapshot (GtkWidget *widget,
GtkColorSwatchPrivate *priv = gtk_color_swatch_get_instance_private (swatch);
const int width = gtk_widget_get_width (widget);
const int height = gtk_widget_get_height (widget);
+ const GdkRGBA *color;
+
+ color = &priv->color;
+ if (priv->dest)
+ {
+ const GValue *value = gtk_drop_target_get_value (priv->dest);
+
+ if (value)
+ color = g_value_get_boxed (value);
+ }
if (priv->has_color)
{
- if (priv->use_alpha && !gdk_rgba_is_opaque (&priv->color))
+ if (priv->use_alpha && !gdk_rgba_is_opaque (color))
{
_gtk_color_chooser_snapshot_checkered_pattern (snapshot, width, height);
gtk_snapshot_append_color (snapshot,
- &priv->color,
+ color,
&GRAPHENE_RECT_INIT (0, 0, width, height));
}
else
{
- GdkRGBA color = priv->color;
+ GdkRGBA opaque = *color;
- color.alpha = 1.0;
+ opaque.alpha = 1.0;
gtk_snapshot_append_color (snapshot,
- &color,
+ &opaque,
&GRAPHENE_RECT_INIT (0, 0, width, height));
}
}
@@ -654,7 +664,9 @@ gtk_color_swatch_set_can_drop (GtkColorSwatch *swatch,
if (can_drop && !priv->dest)
{
priv->dest = gtk_drop_target_new (GDK_TYPE_RGBA, GDK_ACTION_COPY);
+ gtk_drop_target_set_preload (priv->dest, TRUE);
g_signal_connect (priv->dest, "drop", G_CALLBACK (swatch_drag_drop), swatch);
+ g_signal_connect_swapped (priv->dest, "notify::value", G_CALLBACK (gtk_widget_queue_draw), swatch);
gtk_widget_add_controller (GTK_WIDGET (swatch), GTK_EVENT_CONTROLLER (priv->dest));
}
if (!can_drop && priv->dest)