mirror of
https://gitlab.gnome.org/GNOME/gtk.git
synced 2024-11-13 04:10:13 +00:00
scrolledwindow: Better size requisition for GTK_SCROLL_NATURAL children
GtkScrolledWindow leans towards using the minimum size of its child widget, unless the scrollbar policy is GTK_POLICY_NEVER. This is probably fine for most GtkScrollable implementations out there. Especially when using GTK_SCROLL_MINIMUM, which is the default for all implementations inside gtk+. However, this is not good for GTK_SCROLL_NATURAL children. eg., VteTerminal's minimum size is 1x1 and natural size is the number of visible rows and columns requested by the user. We really want to use the natural size unless the user has resized the window to change that. https://bugzilla.gnome.org/show_bug.cgi?id=766569
This commit is contained in:
parent
0d18a429aa
commit
096bea3f0e
@ -1711,6 +1711,8 @@ gtk_scrolled_window_measure (GtkCssGadget *gadget,
|
||||
GtkScrolledWindow *scrolled_window = GTK_SCROLLED_WINDOW (widget);
|
||||
GtkScrolledWindowPrivate *priv = scrolled_window->priv;
|
||||
GtkBin *bin = GTK_BIN (scrolled_window);
|
||||
GtkScrollablePolicy scrollable_hpolicy = GTK_SCROLL_MINIMUM;
|
||||
GtkScrollablePolicy scrollable_vpolicy = GTK_SCROLL_MINIMUM;
|
||||
gint extra_width;
|
||||
gint extra_height;
|
||||
gint scrollbar_spacing;
|
||||
@ -1738,7 +1740,11 @@ gtk_scrolled_window_measure (GtkCssGadget *gadget,
|
||||
child = gtk_bin_get_child (bin);
|
||||
|
||||
if (GTK_IS_SCROLLABLE (child))
|
||||
gtk_scrollable_get_border (GTK_SCROLLABLE (child), &border);
|
||||
{
|
||||
gtk_scrollable_get_border (GTK_SCROLLABLE (child), &border);
|
||||
scrollable_hpolicy = gtk_scrollable_get_hscroll_policy (GTK_SCROLLABLE (child));
|
||||
scrollable_vpolicy = gtk_scrollable_get_vscroll_policy (GTK_SCROLLABLE (child));
|
||||
}
|
||||
|
||||
if (child && gtk_widget_get_visible (child))
|
||||
{
|
||||
@ -1761,6 +1767,11 @@ gtk_scrolled_window_measure (GtkCssGadget *gadget,
|
||||
natural_req.width += priv->min_content_width;
|
||||
extra_width = -1;
|
||||
}
|
||||
else if (scrollable_hpolicy == GTK_SCROLL_NATURAL)
|
||||
{
|
||||
minimum_req.width += min_child_size;
|
||||
natural_req.width += nat_child_size;
|
||||
}
|
||||
else if (policy_may_be_visible (priv->vscrollbar_policy) && !priv->use_indicators)
|
||||
{
|
||||
minimum_req.width += vscrollbar_requisition.width;
|
||||
@ -1787,6 +1798,11 @@ gtk_scrolled_window_measure (GtkCssGadget *gadget,
|
||||
natural_req.height += priv->min_content_height;
|
||||
extra_height = -1;
|
||||
}
|
||||
else if (scrollable_vpolicy == GTK_SCROLL_NATURAL)
|
||||
{
|
||||
minimum_req.height += min_child_size;
|
||||
natural_req.height += nat_child_size;
|
||||
}
|
||||
else if (policy_may_be_visible (priv->hscrollbar_policy) && !priv->use_indicators)
|
||||
{
|
||||
minimum_req.height += hscrollbar_requisition.height;
|
||||
|
Loading…
Reference in New Issue
Block a user