From d9dd312752f69acdfcba05afaffb83316589d17c Mon Sep 17 00:00:00 2001 From: Daniel Boles Date: Wed, 18 Jan 2017 22:54:42 +0000 Subject: [PATCH] Scale: Always sync ::digits to Range::round-digits MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The documents state that gtk_scale_set_digits() “causes the value of the adjustment to be rounded off to this number of digits, so the retrieved value matches the value the user saw.” Note the lack of any condition. But in fact, if draw-value was false, rounding was disabled on the base Range, so values that weren’t displayed weren’t rounded. This made the docs wrong and made an apparently cosmetic detail alter functionality. Fix by ensuring the number of digits set on Scale is always propagated along to gtk_range_set_round_digits(), thus rounding to it in all cases when the value changes, regardless of whether the value is displayed. This doesn’t address the other idea from Bugzilla: that changing the number of digits should clamp the _existing_ value if it’s more precise. This contradicts digits docs in the base Range, but the above from Scale can be read as implying it’ll happen. For now, that’s an open question. https://bugzilla.gnome.org/show_bug.cgi?id=358970 --- gtk/gtkscale.c | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/gtk/gtkscale.c b/gtk/gtkscale.c index 46afb9e47d..bd4164fdad 100644 --- a/gtk/gtkscale.c +++ b/gtk/gtkscale.c @@ -1106,8 +1106,7 @@ gtk_scale_set_digits (GtkScale *scale, if (priv->digits != digits) { priv->digits = digits; - if (priv->draw_value) - gtk_range_set_round_digits (range, digits); + gtk_range_set_round_digits (range, digits); gtk_scale_clear_value_layout (scale); gtk_widget_queue_resize (GTK_WIDGET (scale)); @@ -1298,7 +1297,6 @@ gtk_scale_set_draw_value (GtkScale *scale, else gtk_css_node_insert_before (widget_node, gtk_css_gadget_get_node (priv->value_gadget), NULL); - gtk_range_set_round_digits (GTK_RANGE (scale), priv->digits); update_value_position (scale); } else @@ -1306,8 +1304,6 @@ gtk_scale_set_draw_value (GtkScale *scale, if (priv->value_gadget) gtk_css_node_set_parent (gtk_css_gadget_get_node (priv->value_gadget), NULL); g_clear_object (&priv->value_gadget); - - gtk_range_set_round_digits (GTK_RANGE (scale), -1); } gtk_scale_clear_value_layout (scale);