linux-packaging-mono/external/bockbuild/packages/patches/gtk/0029-Reclamp-unclamped-adjustments-after-resize.patch
Xamarin Public Jenkins (auto-signing) 6bdd276d05 Imported Upstream version 5.0.0.42
Former-commit-id: fd56571888259555122d8a0f58c68838229cea2b
2017-04-10 11:41:01 +00:00

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)