diff options
author | Tristan Van Berkom <tristan.van.berkom@gmail.com> | 2010-04-10 22:48:13 -0400 |
---|---|---|
committer | Tristan Van Berkom <tristan.van.berkom@gmail.com> | 2010-04-10 22:48:13 -0400 |
commit | 1b2be80f10964e1ded1591294acc603f78980c93 (patch) | |
tree | d8ff36a9a7029e2dfd8ce371310a2fd93cadf8fb /gtk | |
parent | 6b89f05a99f62281953a806de3ef332d7e777ac9 (diff) | |
download | gtk+-1b2be80f10964e1ded1591294acc603f78980c93.tar.gz |
Constrain the window to the minimum width for the natural heightBEFORE_NATIVE_LAYOUT_API_SWITCH
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.
Diffstat (limited to 'gtk')
-rw-r--r-- | gtk/gtkwindow.c | 40 |
1 files changed, 36 insertions, 4 deletions
diff --git a/gtk/gtkwindow.c b/gtk/gtkwindow.c index 33d5dab5e4..5d351cb408 100644 --- a/gtk/gtkwindow.c +++ b/gtk/gtkwindow.c @@ -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; + } } } |