GtkStack: Save last visible widget size

When interpolating the stack size, we compute the current size by using
the prefered/minimum current size and the last size. We can't use the
last_visible_surface_allocation because that is not available until the
first _draw call and it doesn't include the child's margins.
This commit is contained in:
Timm Bäder 2015-05-24 16:55:34 +02:00
parent b3bbe99001
commit bdabea3ae3

View File

@ -137,6 +137,9 @@ typedef struct {
gint64 start_time; gint64 start_time;
gint64 end_time; gint64 end_time;
gint last_visible_widget_width;
gint last_visible_widget_height;
GtkStackTransitionType active_transition_type; GtkStackTransitionType active_transition_type;
} GtkStackPrivate; } GtkStackPrivate;
@ -1059,9 +1062,20 @@ set_visible_child (GtkStack *stack,
if (priv->visible_child && priv->visible_child->widget) if (priv->visible_child && priv->visible_child->widget)
{ {
if (gtk_widget_is_visible (widget)) if (gtk_widget_is_visible (widget))
priv->last_visible_child = priv->visible_child; {
int fake;
priv->last_visible_child = priv->visible_child;
gtk_widget_get_preferred_width (priv->last_visible_child->widget,
&fake,
&priv->last_visible_widget_width);
gtk_widget_get_preferred_height (priv->last_visible_child->widget,
&fake,
&priv->last_visible_widget_height);
}
else else
gtk_widget_set_child_visible (priv->visible_child->widget, FALSE); {
gtk_widget_set_child_visible (priv->visible_child->widget, FALSE);
}
} }
priv->visible_child = child_info; priv->visible_child = child_info;