diff options
author | Matthias Clasen <mclasen@redhat.com> | 2012-01-31 00:31:41 -0500 |
---|---|---|
committer | Matthias Clasen <mclasen@redhat.com> | 2012-02-14 16:36:50 -0500 |
commit | 9b813224093e6ff0ea82340a77b89d46154bc886 (patch) | |
tree | 115deac9555a5efc70454a301b93b51dc2ea911f /gtk/gtkcolorchooserwidget.c | |
parent | e1bf3b66507e0b315dbfc8f0fb1a2f03a223930c (diff) | |
download | gtk+-9b813224093e6ff0ea82340a77b89d46154bc886.tar.gz |
Make saving custom colors work as intended
The custom colors are now pushed over to the right as new ones
are added, and everything beyond the 9th row gets dropped.
Customized colors are added to the custom colors array.
Diffstat (limited to 'gtk/gtkcolorchooserwidget.c')
-rw-r--r-- | gtk/gtkcolorchooserwidget.c | 57 |
1 files changed, 45 insertions, 12 deletions
diff --git a/gtk/gtkcolorchooserwidget.c b/gtk/gtkcolorchooserwidget.c index a4ad5e75ed..54c59cb378 100644 --- a/gtk/gtkcolorchooserwidget.c +++ b/gtk/gtkcolorchooserwidget.c @@ -40,6 +40,7 @@ struct _GtkColorChooserWidgetPrivate GtkWidget *grays; GtkWidget *custom; + GtkWidget *button; GtkColorSwatch *current; GSettings *settings; @@ -76,7 +77,7 @@ select_swatch (GtkColorChooserWidget *cc, g_object_notify (G_OBJECT (cc), "color"); } -static void save_custom (GtkColorChooserWidget *cc); +static void save_custom_colors (GtkColorChooserWidget *cc); static void button_activate (GtkColorSwatch *swatch, @@ -144,31 +145,32 @@ static void connect_custom_signals (GtkWidget *p, gpointer data) { connect_swatch_signals (p, data); - g_signal_connect_swapped (p, "notify::color", G_CALLBACK (save_custom), data); + g_signal_connect_swapped (p, "notify::color", + G_CALLBACK (save_custom_colors), data); } static void -save_custom (GtkColorChooserWidget *cc) +save_custom_colors (GtkColorChooserWidget *cc) { GVariantBuilder builder; GVariant *variant; GdkRGBA color; - GList *children, *l; + GtkWidget *child; + gint i; g_variant_builder_init (&builder, G_VARIANT_TYPE ("a(dddd)")); - children = gtk_container_get_children (GTK_CONTAINER (cc->priv->custom)); - for (l = children; l; l = l->next) + i = 1; + while ((child = gtk_grid_get_child_at (GTK_GRID (cc->priv->custom), i, 0)) != NULL) { - if (gtk_color_swatch_get_color (GTK_COLOR_SWATCH (l->data), &color)) + i++; + if (gtk_color_swatch_get_color (GTK_COLOR_SWATCH (child), &color)) { g_variant_builder_add (&builder, "(dddd)", color.red, color.green, color.blue, color.alpha); - } + } } - g_list_free (children); - variant = g_variant_builder_end (&builder); g_settings_set_value (cc->priv->settings, "custom-colors", variant); } @@ -273,7 +275,7 @@ gtk_color_chooser_widget_init (GtkColorChooserWidget *cc) gtk_grid_set_column_spacing (GTK_GRID (grid), 4); gtk_container_add (GTK_CONTAINER (cc->priv->palette), grid); - button = gtk_color_swatch_new (); + cc->priv->button = button = gtk_color_swatch_new (); gtk_color_swatch_set_corner_radii (GTK_COLOR_SWATCH (button), 10, 10, 10, 10); connect_button_signals (button, cc); gtk_color_swatch_set_icon (GTK_COLOR_SWATCH (button), "list-add-symbolic"); @@ -410,6 +412,37 @@ gtk_color_chooser_widget_get_color (GtkColorChooser *chooser, } static void +add_custom_color (GtkColorChooserWidget *cc, + const GdkRGBA *color) +{ + GtkWidget *last; + GtkWidget *p; + + last = gtk_grid_get_child_at (GTK_GRID (cc->priv->custom), 9, 0); + if (last) + gtk_container_remove (GTK_CONTAINER (cc->priv->custom), last); + + gtk_color_swatch_set_corner_radii (GTK_COLOR_SWATCH (cc->priv->button), 10, 1, 1, 10); + + p = gtk_color_swatch_new (); + gtk_color_swatch_set_color (GTK_COLOR_SWATCH (p), color); + gtk_color_swatch_set_can_drop (GTK_COLOR_SWATCH (p), TRUE); + connect_custom_signals (p, cc); + + if (gtk_grid_get_child_at (GTK_GRID (cc->priv->custom), 1, 0) != NULL) + gtk_color_swatch_set_corner_radii (GTK_COLOR_SWATCH (p), 1, 1, 1, 1); + else + gtk_color_swatch_set_corner_radii (GTK_COLOR_SWATCH (p), 1, 10, 10, 1); + + gtk_grid_insert_next_to (GTK_GRID (cc->priv->custom), cc->priv->button, GTK_POS_RIGHT); + gtk_grid_attach (GTK_GRID (cc->priv->custom), p, 1, 0, 1, 1); + gtk_widget_show (p); + + select_swatch (cc, GTK_COLOR_SWATCH (p)); + save_custom_colors (cc); +} + +static void gtk_color_chooser_widget_set_color (GtkColorChooser *chooser, const GdkRGBA *color) { @@ -441,7 +474,7 @@ gtk_color_chooser_widget_set_color (GtkColorChooser *chooser, g_list_free (children); } - /* FIXME: add new custom color */ + add_custom_color (cc, color); } static void |