]> Pileus Git - ~andy/gtk/commitdiff
colorchooser: Allow removing the palettes again
authorChristian Persch <chpe@gnome.org>
Sun, 4 Mar 2012 05:28:08 +0000 (00:28 -0500)
committerMatthias Clasen <mclasen@redhat.com>
Sun, 4 Mar 2012 05:29:04 +0000 (00:29 -0500)
https://bugzilla.gnome.org/show_bug.cgi?id=671057

gtk/gtkcolorchooser.c
gtk/gtkcolorchooser.h
gtk/gtkcolorchooserwidget.c
tests/testcolorchooser.c

index b98eb70c1b488a12ca9fe0e7e941250b78ae791b..869f73bc0fdc71eebfdd1d904dac0b3379e2960c 100644 (file)
@@ -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,
index fd54101261bdf835d39f4f2284b802bf7000b408..f64d4fe39978f2953c3b58a35108797e0ef5bffd 100644 (file)
@@ -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);
index 05b87bd13220a458c686fab6927d535e54204226..ff51d73448de3f2cc2526c54e2e09901702ae6cd 100644 (file)
@@ -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;
 }
 
index fc06772bad9f6a665f8fe05e684d22b26ae9621a..2ef880808309476bd058172a80f710871d0d5992 100644 (file)
@@ -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);