From 5a8dba7eacc024f1b9893b1a42255b8c5af94bf0 Mon Sep 17 00:00:00 2001 From: Christian Persch Date: Sun, 4 Mar 2012 00:28:08 -0500 Subject: [PATCH] colorchooser: Allow removing the palettes again https://bugzilla.gnome.org/show_bug.cgi?id=671057 --- gtk/gtkcolorchooser.c | 8 +++++++- gtk/gtkcolorchooser.h | 1 + gtk/gtkcolorchooserwidget.c | 36 +++++++++++++++++++++++------------- tests/testcolorchooser.c | 5 +++++ 4 files changed, 36 insertions(+), 14 deletions(-) diff --git a/gtk/gtkcolorchooser.c b/gtk/gtkcolorchooser.c index b98eb70c1b..869f73bc0f 100644 --- a/gtk/gtkcolorchooser.c +++ b/gtk/gtkcolorchooser.c @@ -143,6 +143,8 @@ gtk_color_chooser_get_rgba (GtkColorChooser *chooser, * @color: the new color * * Sets the color. + * + * Since: 3.4 */ void gtk_color_chooser_set_rgba (GtkColorChooser *chooser, @@ -203,7 +205,7 @@ gtk_color_chooser_set_use_alpha (GtkColorChooser *chooser, * %FALSE for columns * @colors_per_line: the number of colors to show in each row/column * @n_colors: the total number of elements in @colors - * @colors: (array length=n_colors): the colors of the palette + * @colors: (allow-none) (array length=n_colors): the colors of the palette, or %NULL * * Adds a palette to the color chooser. If @horizontal is %TRUE, * the colors are grouped in rows, with @colors_per_line colors @@ -220,6 +222,10 @@ gtk_color_chooser_set_use_alpha (GtkColorChooser *chooser, * Calling this function is called for the first time has the * side effect of removing the default color and gray palettes * from the color chooser. + * + * If @colors is %NULL, removes all previously added palettes. + * + * Since: 3.4 */ void gtk_color_chooser_add_palette (GtkColorChooser *chooser, diff --git a/gtk/gtkcolorchooser.h b/gtk/gtkcolorchooser.h index fd54101261..f64d4fe399 100644 --- a/gtk/gtkcolorchooser.h +++ b/gtk/gtkcolorchooser.h @@ -70,6 +70,7 @@ void gtk_color_chooser_set_rgba (GtkColorChooser *chooser, const GdkRGBA *color); GDK_AVAILABLE_IN_3_4 gboolean gtk_color_chooser_get_use_alpha (GtkColorChooser *chooser); + GDK_AVAILABLE_IN_3_4 void gtk_color_chooser_set_use_alpha (GtkColorChooser *chooser, gboolean use_alpha); diff --git a/gtk/gtkcolorchooserwidget.c b/gtk/gtkcolorchooserwidget.c index 05b87bd132..ff51d73448 100644 --- a/gtk/gtkcolorchooserwidget.c +++ b/gtk/gtkcolorchooserwidget.c @@ -290,6 +290,22 @@ accessible_color_name (GdkRGBA *color) scale_round (color->blue, 100)); } +static void +remove_palette (GtkColorChooserWidget *cc) +{ + GList *children, *l; + GtkWidget *widget; + + children = gtk_container_get_children (GTK_CONTAINER (cc->priv->palette)); + for (l = children; l; l = l->next) + { + widget = l->data; + if (widget == cc->priv->custom_label || widget == cc->priv->custom) + continue; + gtk_container_remove (GTK_CONTAINER (cc->priv->palette), widget); + } + g_list_free (children); +} static void add_palette (GtkColorChooserWidget *cc, @@ -306,6 +322,12 @@ add_palette (GtkColorChooserWidget *cc, gint i; gint left, right; + if (colors == NULL) + { + remove_palette (cc); + return; + } + grid = gtk_grid_new (); gtk_widget_set_margin_bottom (grid, 12); gtk_grid_set_row_spacing (GTK_GRID (grid), 2); @@ -372,22 +394,10 @@ add_palette (GtkColorChooserWidget *cc, static void remove_default_palette (GtkColorChooserWidget *cc) { - GList *children, *l; - GtkWidget *widget; - if (!cc->priv->has_default_palette) return; - children = gtk_container_get_children (GTK_CONTAINER (cc->priv->palette)); - for (l = children; l; l = l->next) - { - widget = l->data; - if (widget == cc->priv->custom_label || widget == cc->priv->custom) - continue; - gtk_container_remove (GTK_CONTAINER (cc->priv->palette), widget); - } - g_list_free (children); - + remove_palette (cc); cc->priv->has_default_palette = FALSE; } diff --git a/tests/testcolorchooser.c b/tests/testcolorchooser.c index fc06772bad..2ef8808083 100644 --- a/tests/testcolorchooser.c +++ b/tests/testcolorchooser.c @@ -84,6 +84,11 @@ main (int argc, char *argv[]) 9, 9*9, colors); } + else if (g_strcmp0 (argv[i], "--no-palette") == 0) + { + gtk_color_chooser_add_palette (GTK_COLOR_CHOOSER (dialog), + FALSE, 0, NULL, 0); + } } g_signal_connect (dialog, "notify::color", G_CALLBACK (color_changed), NULL);