diff --git a/gtk/gtkscale.c b/gtk/gtkscale.c
index 61e2275..8deb8c4 100644
--- a/gtk/gtkscale.c
+++ b/gtk/gtkscale.c
@@ -197,6 +197,10 @@ static void     gtk_scale_get_preferred_height    (GtkWidget      *widget,
 static void     gtk_scale_style_updated           (GtkWidget      *widget);
 static void     gtk_scale_get_range_border        (GtkRange       *range,
                                                    GtkBorder      *border);
+static void     gtk_scale_get_range_size_request  (GtkRange       *range,
+                                                   GtkOrientation  orientation,
+                                                   gint           *minimum,
+                                                   gint           *natural);
 static void     gtk_scale_finalize                (GObject        *object);
 static void     gtk_scale_screen_changed          (GtkWidget      *widget,
                                                    GdkScreen      *old_screen);
@@ -714,6 +718,7 @@ gtk_scale_class_init (GtkScaleClass *class)
   widget_class->get_preferred_height = gtk_scale_get_preferred_height;
 
   range_class->get_range_border = gtk_scale_get_range_border;
+  range_class->get_range_size_request = gtk_scale_get_range_size_request;
 
   class->get_layout_offsets = gtk_scale_real_get_layout_offsets;
 
@@ -1524,6 +1529,45 @@ gtk_scale_get_range_border (GtkRange  *range,
 }
 
 static void
+gtk_scale_get_range_size_request (GtkRange       *range,
+                                  GtkOrientation  request_orientation,
+                                  gint           *minimum,
+                                  gint           *natural)
+{
+  GtkScalePrivate *priv = GTK_SCALE (range)->priv;
+  GtkCssGadget *value_gadget = priv->value_gadget;
+
+  /* Ensure the base Range requests enough size for our value */
+  if (value_gadget) /* i.e. priv->draw_value is true */
+    {
+      GtkOrientation value_orientation;
+      if (priv->value_pos == GTK_POS_LEFT || priv->value_pos == GTK_POS_RIGHT)
+        value_orientation = GTK_ORIENTATION_HORIZONTAL;
+      else
+        value_orientation = GTK_ORIENTATION_VERTICAL;
+
+      /* We need to catch what border doesn't: vScale@top/bottom or hScale@side
+         and request size for the opposite dimension, e.g. top value => width */
+      if (value_orientation != request_orientation)
+        {
+          if ( value_orientation == gtk_orientable_get_orientation
+                                 ( GTK_ORIENTABLE(range) ) )
+            {
+              gtk_css_gadget_get_preferred_size (value_gadget,
+                                                 request_orientation, -1,
+                                                 minimum, natural,
+                                                 NULL, NULL);
+              return;
+            }
+        }
+    }
+
+  /* else we needn't request anything */
+  *minimum = 0;
+  *natural = 0;
+}
+
+static void
 gtk_scale_style_updated (GtkWidget *widget)
 {
   gtk_scale_clear_layout (GTK_SCALE (widget));
