scalebutton: fix orientation not applied to scale
authorG.Willems <g.willems.dev@laposte.net>
Tue, 11 Apr 2023 21:53:35 +0000 (23:53 +0200)
committerMatthias Clasen <mclasen@redhat.com>
Fri, 21 Apr 2023 07:16:21 +0000 (09:16 +0200)
gtk/gtkscalebutton.c

index 2742864841f2d03b66b1d5f8e1059d400ab4ad62..f64f122beda7f8d87e295121c48bc9e73c3b1c9a 100644 (file)
@@ -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);
 }