summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTimm Bäder <mail@baedert.org>2021-04-19 14:42:29 -0400
committerMatthias Clasen <mclasen@redhat.com>2021-04-19 14:43:01 -0400
commit25879ea37e8918a28187dd382e7704051a38f011 (patch)
tree5ae04d3bcf89ed16bacb618822a8928134ccbc54
parent610f52b125235bfa419686de95a5684fe91edf08 (diff)
downloadgtk+-25879ea37e8918a28187dd382e7704051a38f011.tar.gz
scrolledwindow: Always add other scrollbar size...
... if we're not using indicators and the policy may be visible. Not doing this if the policy may be invisible is incorrect as we need to reserve the space anyway in case the scrolledwindow is allocated at minimum size and the child size increases to show the scrollbar.
-rw-r--r--gtk/gtkscrolledwindow.c30
-rw-r--r--testsuite/gtk/scrolledwindow.c4
2 files changed, 26 insertions, 8 deletions
diff --git a/gtk/gtkscrolledwindow.c b/gtk/gtkscrolledwindow.c
index 1909077220..a931d2bad5 100644
--- a/gtk/gtkscrolledwindow.c
+++ b/gtk/gtkscrolledwindow.c
@@ -1900,10 +1900,19 @@ gtk_scrolled_window_measure (GtkCssGadget *gadget,
*/
if (policy_may_be_visible (priv->hscrollbar_policy))
{
- 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);
+ int vscrollbar_extra_size;
- if (!priv->use_indicators && priv->hscrollbar_policy == GTK_POLICY_ALWAYS)
+ if (!priv->use_indicators && policy_may_be_visible (priv->vscrollbar_policy))
+ vscrollbar_extra_size = vscrollbar_requisition.width;
+ else
+ vscrollbar_extra_size = 0;
+
+ minimum_req.width = MAX (minimum_req.width,
+ hscrollbar_requisition.width + sborder.left + sborder.right + vscrollbar_extra_size);
+ natural_req.width = MAX (natural_req.width,
+ hscrollbar_requisition.width + sborder.left + sborder.right + vscrollbar_extra_size);
+
+ if (!priv->use_indicators)
{
minimum_req.height += scrollbar_spacing + hscrollbar_requisition.height;
natural_req.height += scrollbar_spacing + hscrollbar_requisition.height;
@@ -1912,10 +1921,19 @@ gtk_scrolled_window_measure (GtkCssGadget *gadget,
if (policy_may_be_visible (priv->vscrollbar_policy))
{
- 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);
+ int hscrollbar_extra_size;
+
+ if (!priv->use_indicators && policy_may_be_visible (priv->hscrollbar_policy))
+ hscrollbar_extra_size = hscrollbar_requisition.height;
+ else
+ hscrollbar_extra_size = 0;
+
+ minimum_req.height = MAX (minimum_req.height,
+ vscrollbar_requisition.height + sborder.top + sborder.bottom + hscrollbar_extra_size);
+ natural_req.height = MAX (natural_req.height,
+ vscrollbar_requisition.height + sborder.top + sborder.bottom + hscrollbar_extra_size);
- if (!priv->use_indicators && priv->vscrollbar_policy == GTK_POLICY_ALWAYS)
+ if (!priv->use_indicators)
{
minimum_req.width += scrollbar_spacing + vscrollbar_requisition.width;
natural_req.width += scrollbar_spacing + vscrollbar_requisition.width;
diff --git a/testsuite/gtk/scrolledwindow.c b/testsuite/gtk/scrolledwindow.c
index c6093d8256..e141fe35ba 100644
--- a/testsuite/gtk/scrolledwindow.c
+++ b/testsuite/gtk/scrolledwindow.c
@@ -58,7 +58,7 @@ test_size (gboolean overlay,
/* If the relevant scrollbar is non-overlay and always shown, it is added
* to the preferred size. When comparing to the expected size, we need to
* to exclude that extra, as we are only interested in the content size */
- if (!overlay && policy == GTK_POLICY_ALWAYS)
+ if (!overlay)
{
GtkWidget *scrollbar = gtk_scrolled_window_get_vscrollbar (GTK_SCROLLED_WINDOW (scrolledwindow));
gtk_widget_get_preferred_width (scrollbar, &scrollbar_size, NULL);
@@ -87,7 +87,7 @@ test_size (gboolean overlay,
gtk_widget_get_preferred_height (box, &child_size, NULL);
}
- if (!overlay && policy == GTK_POLICY_ALWAYS)
+ if (!overlay)
{
GtkWidget *scrollbar = gtk_scrolled_window_get_hscrollbar (GTK_SCROLLED_WINDOW (scrolledwindow));
gtk_widget_get_preferred_height (scrollbar, &scrollbar_size, NULL);