65 lines
2.7 KiB
Diff
65 lines
2.7 KiB
Diff
|
From 5d691b32e0792cce518643f2e650909101c1095d Mon Sep 17 00:00:00 2001
|
||
|
From: Michael Natterer <mitch@gimp.org>
|
||
|
Date: Thu, 8 Nov 2012 15:54:13 +0100
|
||
|
Subject: [PATCH 29/68] Reclamp unclamped adjustments after resize
|
||
|
|
||
|
---
|
||
|
gtk/gtkscrolledwindow.c | 28 ++++++++++++++++++++++++++++
|
||
|
1 file changed, 28 insertions(+)
|
||
|
|
||
|
diff --git a/gtk/gtkscrolledwindow.c b/gtk/gtkscrolledwindow.c
|
||
|
index 7f56793..09f19d9 100644
|
||
|
--- a/gtk/gtkscrolledwindow.c
|
||
|
+++ b/gtk/gtkscrolledwindow.c
|
||
|
@@ -1926,6 +1926,7 @@ gtk_scrolled_window_size_allocate (GtkWidget *widget,
|
||
|
GtkAllocation old_allocation;
|
||
|
gboolean scrollbars_within_bevel;
|
||
|
gint scrollbar_spacing;
|
||
|
+ gint overshoot_x, overshoot_y;
|
||
|
|
||
|
g_return_if_fail (GTK_IS_SCROLLED_WINDOW (widget));
|
||
|
g_return_if_fail (allocation != NULL);
|
||
|
@@ -1936,6 +1937,10 @@ gtk_scrolled_window_size_allocate (GtkWidget *widget,
|
||
|
priv = GTK_SCROLLED_WINDOW_GET_PRIVATE (scrolled_window);
|
||
|
bin = GTK_BIN (scrolled_window);
|
||
|
|
||
|
+ /* Save overshoot state from before resizing the child. */
|
||
|
+ _gtk_scrolled_window_get_overshoot (scrolled_window,
|
||
|
+ &overshoot_x, &overshoot_y);
|
||
|
+
|
||
|
scrollbar_spacing = _gtk_scrolled_window_get_scrollbar_spacing (scrolled_window);
|
||
|
gtk_widget_style_get (widget, "scrollbars-within-bevel", &scrollbars_within_bevel, NULL);
|
||
|
|
||
|
@@ -2095,6 +2100,29 @@ gtk_scrolled_window_size_allocate (GtkWidget *widget,
|
||
|
else if (gtk_widget_get_visible (scrolled_window->vscrollbar))
|
||
|
gtk_widget_hide (scrolled_window->vscrollbar);
|
||
|
|
||
|
+ /* We have to reclamp the unclamped adjustments, otherwise the content
|
||
|
+ * widget might be stuck in overshot state after resizing.
|
||
|
+ */
|
||
|
+ if (overshoot_x == 0.0)
|
||
|
+ {
|
||
|
+ GtkAdjustment *hadj;
|
||
|
+ hadj = gtk_range_get_adjustment (GTK_RANGE (scrolled_window->hscrollbar));
|
||
|
+ priv->unclamped_hadj_value = CLAMP (priv->unclamped_hadj_value,
|
||
|
+ gtk_adjustment_get_lower (hadj),
|
||
|
+ gtk_adjustment_get_upper (hadj) -
|
||
|
+ gtk_adjustment_get_page_size (hadj));
|
||
|
+ }
|
||
|
+
|
||
|
+ if (overshoot_y == 0.0)
|
||
|
+ {
|
||
|
+ GtkAdjustment *vadj;
|
||
|
+ vadj = gtk_range_get_adjustment (GTK_RANGE (scrolled_window->vscrollbar));
|
||
|
+ priv->unclamped_vadj_value = CLAMP (priv->unclamped_vadj_value,
|
||
|
+ gtk_adjustment_get_lower (vadj),
|
||
|
+ gtk_adjustment_get_upper (vadj) -
|
||
|
+ gtk_adjustment_get_page_size (vadj));
|
||
|
+ }
|
||
|
+
|
||
|
/* need to update the overlay scrollbars only if the allocation has
|
||
|
* actually changed, not if only the content changed
|
||
|
*/
|
||
|
--
|
||
|
1.7.10.2 (Apple Git-33)
|