[gtk: 1/2] GtkScale: Update the label's size request from set_digits ()
- From: Matthias Clasen <matthiasc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk: 1/2] GtkScale: Update the label's size request from set_digits ()
- Date: Tue, 6 Sep 2022 20:34:40 +0000 (UTC)
commit cc57692345042a2d49f1caccc9d06926da119e33
Author: Luca Bacci <luca bacci982 gmail com>
Date: Tue Sep 6 19:27:38 2022 +0200
GtkScale: Update the label's size request from set_digits ()
Update the label size request when setting the digits property
by calling the update_label_request () util function.
That util function works by measuring the size request of the
label with the lower and upper values of the adjustment, then
taking the max. That way the size requisition is constant
regardless of the actual displayed value.
Since the util function internally works by setting the text
of the label, let it also set the text at last by taking in
account the current adjustment's value. Most of its callers
do that anyway.
Fixes https://gitlab.gnome.org/GNOME/gtk/-/issues/5156
gtk/gtkscale.c | 32 ++++++++------------------------
1 file changed, 8 insertions(+), 24 deletions(-)
---
diff --git a/gtk/gtkscale.c b/gtk/gtkscale.c
index 7d289d9363..801d9dde10 100644
--- a/gtk/gtkscale.c
+++ b/gtk/gtkscale.c
@@ -243,7 +243,6 @@ update_label_request (GtkScale *scale)
GtkScalePrivate *priv = gtk_scale_get_instance_private (scale);
GtkAdjustment *adjustment = gtk_range_get_adjustment (GTK_RANGE (scale));
double lowest_value, highest_value;
- char *old_text;
char *text;
int size = 0;
int min;
@@ -253,7 +252,6 @@ update_label_request (GtkScale *scale)
lowest_value = gtk_adjustment_get_lower (adjustment);
highest_value = gtk_adjustment_get_upper (adjustment);
- old_text = g_strdup (gtk_label_get_label (GTK_LABEL (priv->value_widget)));
gtk_widget_set_size_request (priv->value_widget, -1, -1);
text = gtk_scale_format_value (scale, lowest_value);
@@ -272,9 +270,10 @@ update_label_request (GtkScale *scale)
size = MAX (size, min);
g_free (text);
+ text = gtk_scale_format_value (scale, gtk_adjustment_get_value (adjustment));
gtk_widget_set_size_request (priv->value_widget, size, -1);
- gtk_label_set_label (GTK_LABEL (priv->value_widget), old_text);
- g_free (old_text);
+ gtk_label_set_label (GTK_LABEL (priv->value_widget), text);
+ g_free (text);
}
static void
@@ -1028,6 +1027,9 @@ gtk_scale_set_digits (GtkScale *scale,
if (priv->draw_value)
gtk_range_set_round_digits (range, digits);
+ if (priv->value_widget)
+ update_label_request (scale);
+
gtk_widget_queue_resize (GTK_WIDGET (scale));
g_object_notify_by_pspec (G_OBJECT (scale), properties[PROP_DIGITS]);
@@ -1108,16 +1110,9 @@ gtk_scale_set_draw_value (GtkScale *scale,
priv->draw_value = draw_value;
if (draw_value)
{
- char *txt;
-
- txt = gtk_scale_format_value (scale,
- gtk_adjustment_get_value (gtk_range_get_adjustment (GTK_RANGE
(scale))));
-
priv->value_widget = g_object_new (GTK_TYPE_LABEL,
"css-name", "value",
- "label", txt,
NULL);
- g_free (txt);
gtk_widget_insert_after (priv->value_widget, GTK_WIDGET (scale), NULL);
gtk_range_set_round_digits (GTK_RANGE (scale), priv->digits);
@@ -2057,8 +2052,6 @@ gtk_scale_set_format_value_func (GtkScale *scale,
GDestroyNotify destroy_notify)
{
GtkScalePrivate *priv = gtk_scale_get_instance_private (scale);
- GtkAdjustment *adjustment;
- char *text;
g_return_if_fail (GTK_IS_SCALE (scale));
@@ -2069,15 +2062,6 @@ gtk_scale_set_format_value_func (GtkScale *scale,
priv->format_value_func_user_data = user_data;
priv->format_value_func_destroy_notify = destroy_notify;
- if (!priv->value_widget)
- return;
-
- update_label_request (scale);
-
- adjustment = gtk_range_get_adjustment (GTK_RANGE (scale));
- text = gtk_scale_format_value (scale,
- gtk_adjustment_get_value (adjustment));
- gtk_label_set_label (GTK_LABEL (priv->value_widget), text);
-
- g_free (text);
+ if (priv->value_widget)
+ update_label_request (scale);
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]