widget: force adjustment method is one size is FILL

If halign=fill, force adjustment to height-for-width.
If valign=fill, force adjustment to width-for-height.
Otherwise look at request mode.

This way we don't try to adapt the filled dimension and only adjust
the one that is not set to fill.
This commit is contained in:
Benjamin Otte 2021-11-20 00:46:08 +01:00
parent 7459d430eb
commit 50e0893497
2 changed files with 6 additions and 9 deletions

View File

@ -3832,7 +3832,9 @@ gtk_widget_adjust_size_allocation (GtkWidget *widget,
/* Note that adjust_for_align removes any margins from the
* allocated sizes and possibly limits them to the natural sizes */
if (gtk_widget_get_request_mode (widget) == GTK_SIZE_REQUEST_HEIGHT_FOR_WIDTH)
if (priv->halign == GTK_ALIGN_FILL ||
(priv->valign != GTK_ALIGN_FILL &&
gtk_widget_get_request_mode (widget) == GTK_SIZE_REQUEST_HEIGHT_FOR_WIDTH))
{
gtk_widget_measure (widget, GTK_ORIENTATION_HORIZONTAL,
allocation->height + priv->margin.top + priv->margin.bottom,

View File

@ -5,15 +5,10 @@
<property name="default-height">300</property>
<property name="decorated">0</property>
<child>
<object class="GtkBox">
<object class="GtkLabel">
<property name="halign">center</property>
<child>
<object class="GtkLabel">
<property name="halign">center</property>
<property name="label">Hello World</property>
<property name="wrap">True</property>
</object>
</child>
<property name="label">Hello World</property>
<property name="wrap">True</property>
</object>
</child>
</object>