expander: fix sizes in resize_toplevel

We can't use gtk_widget_get_allocation for either non-anchored widgets
(which happens with the child widget when the expander is unexpanded)
nor toplevel windows since that will include the window decorations.

Fixes #70 in gtk3
This commit is contained in:
Timm Bäder
2018-03-06 17:44:33 +01:00
parent 23b91856e1
commit 46828f8e0a

View File

@@ -1030,30 +1030,23 @@ gtk_expander_resize_toplevel (GtkExpander *expander)
{
GtkWidget *toplevel = gtk_widget_get_toplevel (GTK_WIDGET (expander));
if (toplevel && gtk_widget_get_realized (toplevel))
if (toplevel && GTK_IS_WINDOW (toplevel) &&
gtk_widget_get_realized (toplevel))
{
GtkAllocation toplevel_allocation;
GtkAllocation child_allocation;
int toplevel_width, toplevel_height;
int child_height;
gtk_widget_get_allocation (toplevel, &toplevel_allocation);
gtk_widget_get_allocation (child, &child_allocation);
gtk_widget_get_preferred_height (child, &child_height, NULL);
gtk_window_get_size (GTK_WINDOW (toplevel), &toplevel_width, &toplevel_height);
if (priv->expanded)
{
GtkRequisition child_requisition;
gtk_widget_get_preferred_height_for_width (child, child_allocation.width, &child_requisition.height, NULL);
toplevel_allocation.height += child_requisition.height;
}
toplevel_height += child_height;
else
{
toplevel_allocation.height -= child_allocation.height;
}
toplevel_height -= child_height;
gtk_window_resize (GTK_WINDOW (toplevel),
toplevel_allocation.width,
toplevel_allocation.height);
toplevel_width,
toplevel_height);
}
}
}