[gtk+] colorchooser: Allow removing the palettes again



commit 5a8dba7eacc024f1b9893b1a42255b8c5af94bf0
Author: Christian Persch <chpe gnome org>
Date:   Sun Mar 4 00:28:08 2012 -0500

    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 b98eb70..869f73b 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 fd54101..f64d4fe 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 05b87bd..ff51d73 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 fc06772..2ef8808 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);



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]