summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthias Clasen <mclasen@redhat.com>2016-06-07 23:04:40 -0400
committerMatthias Clasen <mclasen@redhat.com>2016-06-07 23:04:40 -0400
commitf23e99b063857a4a3f9e2fc81ff62021820edb77 (patch)
treed1c3e0e16bae4374fe12340c414a9f07642bc45e
parent7f06f2818aaef1994cb7224d95522b956bfd4ab8 (diff)
downloadgtk+-f23e99b063857a4a3f9e2fc81ff62021820edb77.tar.gz
scale, spinbutton: Avoid -0.0
This is a very longstanding bug; time to finally put it to rest. https://bugzilla.gnome.org/show_bug.cgi?id=118959
-rw-r--r--gtk/gtkscale.c18
-rw-r--r--gtk/gtkspinbutton.c15
2 files changed, 31 insertions, 2 deletions
diff --git a/gtk/gtkscale.c b/gtk/gtkscale.c
index 43161a33ef..2a402270f1 100644
--- a/gtk/gtkscale.c
+++ b/gtk/gtkscale.c
@@ -1933,6 +1933,19 @@ gtk_scale_real_get_layout_offsets (GtkScale *scale,
*y = value_alloc.y;
}
+static gchar *
+weed_out_neg_zero (gchar *str, gint digits)
+{
+ if (str[0] == '-')
+ {
+ gchar neg_zero[8];
+ snprintf (neg_zero, 8, "%0.*f", digits, -0.0);
+ if (strcmp (neg_zero, str) == 0)
+ memmove (str, str + 1, strlen (str) - 1);
+ }
+ return str;
+}
+
/*
* Emits #GtkScale::format-value signal to format the value,
* if no user signal handlers, falls back to a default format.
@@ -1950,7 +1963,10 @@ gtk_scale_format_value (GtkScale *scale,
if (fmt)
return fmt;
else
- return g_strdup_printf ("%0.*f", scale->priv->digits, value);
+ {
+ fmt = g_strdup_printf ("%0.*f", scale->priv->digits, value);
+ return weed_out_neg_zero (fmt, scale->priv->digits);
+ }
}
static void
diff --git a/gtk/gtkspinbutton.c b/gtk/gtkspinbutton.c
index fbe9c170d3..c159f26d3a 100644
--- a/gtk/gtkspinbutton.c
+++ b/gtk/gtkspinbutton.c
@@ -1116,13 +1116,26 @@ measure_string_width (PangoLayout *layout,
}
static gchar *
+weed_out_neg_zero (gchar *str, gint digits)
+{
+ if (str[0] == '-')
+ {
+ gchar neg_zero[8];
+ snprintf (neg_zero, 8, "%0.*f", digits, -0.0);
+ if (strcmp (neg_zero, str) == 0)
+ memmove (str, str + 1, strlen (str) - 1);
+ }
+ return str;
+}
+
+static gchar *
gtk_spin_button_format_for_value (GtkSpinButton *spin_button,
gdouble value)
{
GtkSpinButtonPrivate *priv = spin_button->priv;
gchar *buf = g_strdup_printf ("%0.*f", priv->digits, value);
- return buf;
+ return weed_out_neg_zero (buf, priv->digits);
}
gint