[gtk/color-float-fix] color chooser: Fix fallout from floatification
- From: Matthias Clasen <matthiasc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk/color-float-fix] color chooser: Fix fallout from floatification
- Date: Sat, 22 Feb 2020 01:00:28 +0000 (UTC)
commit 9fa7a47081066e92068b4f954eff7ba541f0d4a4
Author: Matthias Clasen <mclasen redhat com>
Date: Fri Feb 21 19:56:44 2020 -0500
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.
gtk/gtkcolorchooserwidget.c | 32 +++++++++++++++++++++++++++-----
gtk/gtkcolorswatch.c | 38 +++++++++++++++++++++++---------------
2 files changed, 50 insertions(+), 20 deletions(-)
---
diff --git a/gtk/gtkcolorchooserwidget.c b/gtk/gtkcolorchooserwidget.c
index 0b6b3afe4b..269c6a26e8 100644
--- a/gtk/gtkcolorchooserwidget.c
+++ b/gtk/gtkcolorchooserwidget.c
@@ -115,6 +115,7 @@ select_swatch (GtkColorChooserWidget *cc,
{
GtkColorChooserWidgetPrivate *priv = gtk_color_chooser_widget_get_instance_private (cc);
GdkRGBA color;
+ double red, green, blue, alpha;
if (priv->current == swatch)
return;
@@ -127,8 +128,12 @@ select_swatch (GtkColorChooserWidget *cc,
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)",
- TRUE, color.red, color.green, color.blue, color.alpha);
+ TRUE, red, green, blue, alpha);
if (gtk_widget_get_visible (GTK_WIDGET (priv->editor)))
gtk_color_chooser_set_rgba (GTK_COLOR_CHOOSER (priv->editor), &color);
@@ -180,8 +185,15 @@ save_custom_colors (GtkColorChooserWidget *cc)
{
child = l->data;
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);
@@ -499,9 +511,14 @@ gtk_color_chooser_widget_activate_color_customize (GtkWidget *widget,
{
GtkColorChooserWidget *cc = GTK_COLOR_CHOOSER_WIDGET (widget);
GtkColorChooserWidgetPrivate *priv = gtk_color_chooser_widget_get_instance_private (cc);
+ double red, green, blue, alpha;
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);
@@ -517,8 +534,13 @@ gtk_color_chooser_widget_activate_color_select (GtkWidget *widget,
{
GtkColorChooserWidget *cc = GTK_COLOR_CHOOSER_WIDGET (widget);
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);
}
diff --git a/gtk/gtkcolorswatch.c b/gtk/gtkcolorswatch.c
index ac40dfae8c..bc7a4c9fc8 100644
--- a/gtk/gtkcolorswatch.c
+++ b/gtk/gtkcolorswatch.c
@@ -167,24 +167,30 @@ static void
activate_color (GtkColorSwatch *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),
- "color.select", "(dddd)",
- priv->color.red,
- priv->color.green,
- priv->color.blue,
- priv->color.alpha);
+ "color.select", "(dddd)", red, green, blue, alpha);
}
static void
customize_color (GtkColorSwatch *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),
- "color.customize", "(dddd)",
- priv->color.red,
- priv->color.green,
- priv->color.blue,
- priv->color.alpha);
+ "color.customize", "(dddd)", red, green, blue, alpha);
}
static gboolean
@@ -222,17 +228,19 @@ gtk_color_swatch_get_menu_model (GtkColorSwatch *swatch)
GtkColorSwatchPrivate *priv = gtk_color_swatch_get_instance_private (swatch);
GMenu *menu, *section;
GMenuItem *item;
+ double red, green, blue, alpha;
menu = g_menu_new ();
+ red = priv->color.red;
+ green = priv->color.green;
+ blue = priv->color.blue;
+ alpha = priv->color.alpha;
+
section = g_menu_new ();
item = g_menu_item_new (_("Customize"), NULL);
g_menu_item_set_action_and_target_value (item, "color.customize",
- g_variant_new ("(dddd)",
- priv->color.red,
- priv->color.green,
- priv->color.blue,
- priv->color.alpha));
+ g_variant_new ("(dddd)", red, green, blue, alpha));
g_menu_append_item (section, item);
g_menu_append_section (menu, NULL, G_MENU_MODEL (section));
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]