- if (hadj)
- g_return_if_fail (GTK_IS_ADJUSTMENT (hadj));
- else
- hadj = GTK_ADJUSTMENT (gtk_adjustment_new (0.0, 0.0, 0.0, 0.0, 0.0, 0.0));
- if (vadj)
- g_return_if_fail (GTK_IS_ADJUSTMENT (vadj));
- else
- vadj = GTK_ADJUSTMENT (gtk_adjustment_new (0.0, 0.0, 0.0, 0.0, 0.0, 0.0));
-
- if (layout->hadjustment && (layout->hadjustment != hadj))
- {
- gtk_signal_disconnect_by_data (GTK_OBJECT (layout->hadjustment), layout);
- gtk_object_unref (GTK_OBJECT (layout->hadjustment));
- }
-
- if (layout->vadjustment && (layout->vadjustment != vadj))
- {
- gtk_signal_disconnect_by_data (GTK_OBJECT (layout->vadjustment), layout);
- gtk_object_unref (GTK_OBJECT (layout->vadjustment));
- }
-
- if (layout->hadjustment != hadj)
- {
- layout->hadjustment = hadj;
- gtk_object_ref (GTK_OBJECT (layout->hadjustment));
- gtk_object_sink (GTK_OBJECT (layout->hadjustment));
-
- gtk_signal_connect (GTK_OBJECT (layout->hadjustment), "value_changed",
- (GtkSignalFunc) gtk_layout_adjustment_changed,
- layout);
- need_adjust = TRUE;
- }
-
- if (layout->vadjustment != vadj)
- {
- layout->vadjustment = vadj;
- gtk_object_ref (GTK_OBJECT (layout->vadjustment));
- gtk_object_sink (GTK_OBJECT (layout->vadjustment));
-
- gtk_signal_connect (GTK_OBJECT (layout->vadjustment), "value_changed",
- (GtkSignalFunc) gtk_layout_adjustment_changed,
- layout);
- need_adjust = TRUE;
- }
+static void
+gtk_layout_set_hadjustment_values (GtkLayout *layout)
+{
+ GtkLayoutPrivate *priv = layout->priv;
+ GtkAllocation allocation;
+ GtkAdjustment *adj = priv->hadjustment;
+ gdouble old_value;
+ gdouble new_value;
+ gdouble new_upper;
+
+ gtk_widget_get_allocation (GTK_WIDGET (layout), &allocation);
+
+ old_value = gtk_adjustment_get_value (adj);
+ new_upper = MAX (allocation.width, priv->width);
+
+ g_object_set (adj,
+ "lower", 0.0,
+ "upper", new_upper,
+ "page-size", (gdouble)allocation.width,
+ "step-increment", allocation.width * 0.1,
+ "page-increment", allocation.width * 0.9,
+ NULL);
+
+ new_value = CLAMP (old_value, 0, new_upper - allocation.width);
+ if (new_value != old_value)
+ gtk_adjustment_set_value (adj, new_value);
+}