Constrain the window to the minimum width for the natural height

GtkWindow now requests the minimum width for the natural height
of its child, or the opposite; depending on ->get_height_for_width.
Currently its not done for GTK_WINDOW_POPUP windows as the menushells
aren't working right yet.
This commit is contained in:
Tristan Van Berkom 2010-04-10 22:48:13 -04:00
parent 6b89f05a99
commit 1b2be80f10

View File

@ -48,6 +48,7 @@
#include "gtkmarshalers.h"
#include "gtkplug.h"
#include "gtkbuildable.h"
#include "gtkextendedlayout.h"
#include "gtkalias.h"
#ifdef GDK_WINDOWING_X11
@ -4948,12 +4949,43 @@ gtk_window_size_request (GtkWidget *widget,
if (bin->child && gtk_widget_get_visible (bin->child))
{
GtkRequisition child_requisition;
GtkRequisition child_requisition, child_natural;
gint wfh, hfw;
gtk_widget_size_request (bin->child, &child_requisition);
requisition->width += child_requisition.width;
requisition->height += child_requisition.height;
gtk_extended_layout_get_desired_size (GTK_EXTENDED_LAYOUT (bin->child),
&child_requisition,
&child_natural);
/* TODO: Change wrapping label requisitions to desired a user intended wrap length,
* and make the minimum size out the minimum height for the natural-width, instead of
* the minimum height for the minimum width, which is backwards */
if (window->type != GTK_WINDOW_POPUP)
{
if (gtk_extended_layout_is_height_for_width (GTK_EXTENDED_LAYOUT (bin->child)))
{
gtk_extended_layout_get_height_for_width (GTK_EXTENDED_LAYOUT (bin->child),
child_natural.width,
&hfw, NULL);
requisition->width += child_requisition.height;
requisition->height += hfw;
}
else
{
gtk_extended_layout_get_width_for_height (GTK_EXTENDED_LAYOUT (bin->child),
child_natural.height,
&wfh, NULL);
requisition->width += wfh;
requisition->height += child_requisition.height;
}
}
else
{
requisition->width += child_requisition.width;
requisition->height += child_requisition.height;
}
}
}