colorchooser: Allow removing the palettes again

https://bugzilla.gnome.org/show_bug.cgi?id=671057
This commit is contained in:
Christian Persch 2012-03-04 00:28:08 -05:00 committed by Matthias Clasen
parent 912ad3b698
commit 5a8dba7eac
4 changed files with 36 additions and 14 deletions

View 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,

View 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);

View 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;
}

View 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);