From 353cec50c837902f93a3cb06483095fcc0176e78 Mon Sep 17 00:00:00 2001 From: "G.Willems" Date: Tue, 11 Apr 2023 23:53:35 +0200 Subject: [PATCH] scalebutton: fix orientation not applied to scale --- gtk/gtkscalebutton.c | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/gtk/gtkscalebutton.c b/gtk/gtkscalebutton.c index 2742864841..f64f122bed 100644 --- a/gtk/gtkscalebutton.c +++ b/gtk/gtkscalebutton.c @@ -816,6 +816,40 @@ gtk_scale_button_get_active (GtkScaleButton *button) return gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (priv->button)); } +static void +apply_orientation (GtkScaleButton *button, + GtkOrientation orientation) +{ + GtkScaleButtonPrivate *priv = gtk_scale_button_get_instance_private (button); + + if (priv->applied_orientation != orientation) + { + priv->applied_orientation = orientation; + + gtk_orientable_set_orientation (GTK_ORIENTABLE (priv->box), orientation); + gtk_orientable_set_orientation (GTK_ORIENTABLE (priv->scale), orientation); + + if (orientation == GTK_ORIENTATION_VERTICAL) + { + gtk_box_reorder_child_after (GTK_BOX (priv->box), priv->scale, + priv->plus_button); + gtk_box_reorder_child_after (GTK_BOX (priv->box), priv->minus_button, + priv->scale); + gtk_widget_set_size_request (GTK_WIDGET (priv->scale), -1, SCALE_SIZE); + gtk_range_set_inverted (GTK_RANGE (priv->scale), TRUE); + } + else + { + gtk_box_reorder_child_after (GTK_BOX (priv->box), priv->scale, + priv->minus_button); + gtk_box_reorder_child_after (GTK_BOX (priv->box), priv->plus_button, + priv->scale); + gtk_widget_set_size_request (GTK_WIDGET (priv->scale), SCALE_SIZE, -1); + gtk_range_set_inverted (GTK_RANGE (priv->scale), FALSE); + } + } +} + static void gtk_scale_button_set_orientation_private (GtkScaleButton *button, GtkOrientation orientation) @@ -825,6 +859,9 @@ gtk_scale_button_set_orientation_private (GtkScaleButton *button, if (priv->orientation != orientation) { priv->orientation = orientation; + + apply_orientation (button, priv->orientation); + g_object_notify (G_OBJECT (button), "orientation"); } } @@ -861,6 +898,8 @@ gtk_scale_popup (GtkWidget *widget) GtkScaleButton *button = GTK_SCALE_BUTTON (widget); GtkScaleButtonPrivate *priv = gtk_scale_button_get_instance_private (button); + apply_orientation (button, priv->orientation); + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (priv->button), TRUE); } -- 2.30.2