mirror of
https://gitlab.gnome.org/GNOME/gtk.git
synced 2025-01-01 00:11:29 +00:00
color chooser: Fix fallout from floatification
We are using (dddd) variants to store colors in variants, which is dangerous now that GdkRGBA members are just floats. Avoid passsing the GdkRGBA members directly to any varargs functions.
This commit is contained in:
parent
13ed531301
commit
9fa7a47081
@ -115,6 +115,7 @@ select_swatch (GtkColorChooserWidget *cc,
|
|||||||
{
|
{
|
||||||
GtkColorChooserWidgetPrivate *priv = gtk_color_chooser_widget_get_instance_private (cc);
|
GtkColorChooserWidgetPrivate *priv = gtk_color_chooser_widget_get_instance_private (cc);
|
||||||
GdkRGBA color;
|
GdkRGBA color;
|
||||||
|
double red, green, blue, alpha;
|
||||||
|
|
||||||
if (priv->current == swatch)
|
if (priv->current == swatch)
|
||||||
return;
|
return;
|
||||||
@ -127,8 +128,12 @@ select_swatch (GtkColorChooserWidget *cc,
|
|||||||
|
|
||||||
gtk_color_swatch_get_rgba (swatch, &color);
|
gtk_color_swatch_get_rgba (swatch, &color);
|
||||||
|
|
||||||
|
red = color.red;
|
||||||
|
green = color.green;
|
||||||
|
blue = color.blue;
|
||||||
|
alpha = color.alpha;
|
||||||
g_settings_set (priv->settings, "selected-color", "(bdddd)",
|
g_settings_set (priv->settings, "selected-color", "(bdddd)",
|
||||||
TRUE, color.red, color.green, color.blue, color.alpha);
|
TRUE, red, green, blue, alpha);
|
||||||
|
|
||||||
if (gtk_widget_get_visible (GTK_WIDGET (priv->editor)))
|
if (gtk_widget_get_visible (GTK_WIDGET (priv->editor)))
|
||||||
gtk_color_chooser_set_rgba (GTK_COLOR_CHOOSER (priv->editor), &color);
|
gtk_color_chooser_set_rgba (GTK_COLOR_CHOOSER (priv->editor), &color);
|
||||||
@ -180,8 +185,15 @@ save_custom_colors (GtkColorChooserWidget *cc)
|
|||||||
{
|
{
|
||||||
child = l->data;
|
child = l->data;
|
||||||
if (gtk_color_swatch_get_rgba (GTK_COLOR_SWATCH (child), &color))
|
if (gtk_color_swatch_get_rgba (GTK_COLOR_SWATCH (child), &color))
|
||||||
g_variant_builder_add (&builder, "(dddd)",
|
{
|
||||||
color.red, color.green, color.blue, color.alpha);
|
double red, green, blue, alpha;
|
||||||
|
|
||||||
|
red = color.red;
|
||||||
|
green = color.green;
|
||||||
|
blue = color.blue;
|
||||||
|
alpha = color.alpha;
|
||||||
|
g_variant_builder_add (&builder, "(dddd)", red, green, blue, alpha);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
variant = g_variant_builder_end (&builder);
|
variant = g_variant_builder_end (&builder);
|
||||||
@ -499,9 +511,14 @@ gtk_color_chooser_widget_activate_color_customize (GtkWidget *widget,
|
|||||||
{
|
{
|
||||||
GtkColorChooserWidget *cc = GTK_COLOR_CHOOSER_WIDGET (widget);
|
GtkColorChooserWidget *cc = GTK_COLOR_CHOOSER_WIDGET (widget);
|
||||||
GtkColorChooserWidgetPrivate *priv = gtk_color_chooser_widget_get_instance_private (cc);
|
GtkColorChooserWidgetPrivate *priv = gtk_color_chooser_widget_get_instance_private (cc);
|
||||||
|
double red, green, blue, alpha;
|
||||||
GdkRGBA color;
|
GdkRGBA color;
|
||||||
|
|
||||||
g_variant_get (parameter, "(dddd)", &color.red, &color.green, &color.blue, &color.alpha);
|
g_variant_get (parameter, "(dddd)", &red, &green, &blue, &alpha);
|
||||||
|
color.red = red;
|
||||||
|
color.green = green;
|
||||||
|
color.blue = blue;
|
||||||
|
color.alpha = alpha;
|
||||||
|
|
||||||
gtk_color_chooser_set_rgba (GTK_COLOR_CHOOSER (priv->editor), &color);
|
gtk_color_chooser_set_rgba (GTK_COLOR_CHOOSER (priv->editor), &color);
|
||||||
|
|
||||||
@ -517,8 +534,13 @@ gtk_color_chooser_widget_activate_color_select (GtkWidget *widget,
|
|||||||
{
|
{
|
||||||
GtkColorChooserWidget *cc = GTK_COLOR_CHOOSER_WIDGET (widget);
|
GtkColorChooserWidget *cc = GTK_COLOR_CHOOSER_WIDGET (widget);
|
||||||
GdkRGBA color;
|
GdkRGBA color;
|
||||||
|
double red, green, blue, alpha;
|
||||||
|
|
||||||
g_variant_get (parameter, "(dddd)", &color.red, &color.green, &color.blue, &color.alpha);
|
g_variant_get (parameter, "(dddd)", &red, &green, &blue, &alpha);
|
||||||
|
color.red = red;
|
||||||
|
color.green = green;
|
||||||
|
color.blue = blue;
|
||||||
|
color.alpha = alpha;
|
||||||
|
|
||||||
_gtk_color_chooser_color_activated (GTK_COLOR_CHOOSER (cc), &color);
|
_gtk_color_chooser_color_activated (GTK_COLOR_CHOOSER (cc), &color);
|
||||||
}
|
}
|
||||||
|
@ -167,24 +167,30 @@ static void
|
|||||||
activate_color (GtkColorSwatch *swatch)
|
activate_color (GtkColorSwatch *swatch)
|
||||||
{
|
{
|
||||||
GtkColorSwatchPrivate *priv = gtk_color_swatch_get_instance_private (swatch);
|
GtkColorSwatchPrivate *priv = gtk_color_swatch_get_instance_private (swatch);
|
||||||
|
double red, green, blue, alpha;
|
||||||
|
|
||||||
|
red = priv->color.red;
|
||||||
|
green = priv->color.green;
|
||||||
|
blue = priv->color.blue;
|
||||||
|
alpha = priv->color.alpha;
|
||||||
|
|
||||||
gtk_widget_activate_action (GTK_WIDGET (swatch),
|
gtk_widget_activate_action (GTK_WIDGET (swatch),
|
||||||
"color.select", "(dddd)",
|
"color.select", "(dddd)", red, green, blue, alpha);
|
||||||
priv->color.red,
|
|
||||||
priv->color.green,
|
|
||||||
priv->color.blue,
|
|
||||||
priv->color.alpha);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
customize_color (GtkColorSwatch *swatch)
|
customize_color (GtkColorSwatch *swatch)
|
||||||
{
|
{
|
||||||
GtkColorSwatchPrivate *priv = gtk_color_swatch_get_instance_private (swatch);
|
GtkColorSwatchPrivate *priv = gtk_color_swatch_get_instance_private (swatch);
|
||||||
|
double red, green, blue, alpha;
|
||||||
|
|
||||||
|
red = priv->color.red;
|
||||||
|
green = priv->color.green;
|
||||||
|
blue = priv->color.blue;
|
||||||
|
alpha = priv->color.alpha;
|
||||||
|
|
||||||
gtk_widget_activate_action (GTK_WIDGET (swatch),
|
gtk_widget_activate_action (GTK_WIDGET (swatch),
|
||||||
"color.customize", "(dddd)",
|
"color.customize", "(dddd)", red, green, blue, alpha);
|
||||||
priv->color.red,
|
|
||||||
priv->color.green,
|
|
||||||
priv->color.blue,
|
|
||||||
priv->color.alpha);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
@ -222,17 +228,19 @@ gtk_color_swatch_get_menu_model (GtkColorSwatch *swatch)
|
|||||||
GtkColorSwatchPrivate *priv = gtk_color_swatch_get_instance_private (swatch);
|
GtkColorSwatchPrivate *priv = gtk_color_swatch_get_instance_private (swatch);
|
||||||
GMenu *menu, *section;
|
GMenu *menu, *section;
|
||||||
GMenuItem *item;
|
GMenuItem *item;
|
||||||
|
double red, green, blue, alpha;
|
||||||
|
|
||||||
menu = g_menu_new ();
|
menu = g_menu_new ();
|
||||||
|
|
||||||
|
red = priv->color.red;
|
||||||
|
green = priv->color.green;
|
||||||
|
blue = priv->color.blue;
|
||||||
|
alpha = priv->color.alpha;
|
||||||
|
|
||||||
section = g_menu_new ();
|
section = g_menu_new ();
|
||||||
item = g_menu_item_new (_("Customize"), NULL);
|
item = g_menu_item_new (_("Customize"), NULL);
|
||||||
g_menu_item_set_action_and_target_value (item, "color.customize",
|
g_menu_item_set_action_and_target_value (item, "color.customize",
|
||||||
g_variant_new ("(dddd)",
|
g_variant_new ("(dddd)", red, green, blue, alpha));
|
||||||
priv->color.red,
|
|
||||||
priv->color.green,
|
|
||||||
priv->color.blue,
|
|
||||||
priv->color.alpha));
|
|
||||||
|
|
||||||
g_menu_append_item (section, item);
|
g_menu_append_item (section, item);
|
||||||
g_menu_append_section (menu, NULL, G_MENU_MODEL (section));
|
g_menu_append_section (menu, NULL, G_MENU_MODEL (section));
|
||||||
|
Loading…
Reference in New Issue
Block a user