From 367e0216524154a8a43c357c75ec686a8ceba11b Mon Sep 17 00:00:00 2001 From: Daniel Boles Date: Fri, 17 Feb 2017 19:48:42 +0000 Subject: [PATCH] =?UTF-8?q?ScrolledWindow=E2=80=94Don=E2=80=99t=20req=20si?= =?UTF-8?q?ze=20for=20auto-hidden=20bars?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit POLICY_AUTOMATIC means scrollbars are only shown when needed, i.e. when the size of the window is not large enough to show the entire child. So when measuring the preferred size, such scrollbars should be ignored. But measure() was adding size for bars for which policy_may_be_visible() was TRUE, which it returns for POLICY_ALWAYS (good) & _AUTOMATIC (bad). So we reserved space for child plus scrollbars, & because we have enough space for the child, POLICY_AUTOMATIC hides the scrollbar, leaving the extra reserved space empty at the right/bottom sides of the child. This is very noticeable/inconvenient for non-overlay, automatic scrollbars. Fix this by only requesting size for scrollbars that use POLICY_ALWAYS, rather than basing the decision on policy_may_be_visible(). https://bugzilla.gnome.org/show_bug.cgi?id=778853 --- gtk/gtkscrolledwindow.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gtk/gtkscrolledwindow.c b/gtk/gtkscrolledwindow.c index 9718556978..7fd217cef4 100644 --- a/gtk/gtkscrolledwindow.c +++ b/gtk/gtkscrolledwindow.c @@ -1886,7 +1886,7 @@ gtk_scrolled_window_measure (GtkCssGadget *gadget, * Now add to the requisition any additional space for surrounding scrollbars * and the special scrollable border. */ - if (policy_may_be_visible (priv->hscrollbar_policy)) + if (priv->hscrollbar_policy == GTK_POLICY_ALWAYS) { minimum_req.width = MAX (minimum_req.width, hscrollbar_requisition.width + sborder.left + sborder.right); natural_req.width = MAX (natural_req.width, hscrollbar_requisition.width + sborder.left + sborder.right); @@ -1898,7 +1898,7 @@ gtk_scrolled_window_measure (GtkCssGadget *gadget, } } - if (policy_may_be_visible (priv->vscrollbar_policy)) + if (priv->vscrollbar_policy == GTK_POLICY_ALWAYS) { minimum_req.height = MAX (minimum_req.height, vscrollbar_requisition.height + sborder.top + sborder.bottom); natural_req.height = MAX (natural_req.height, vscrollbar_requisition.height + sborder.top + sborder.bottom);