diff options
author | Timm Bäder <mail@baedert.org> | 2015-05-24 16:55:34 +0200 |
---|---|---|
committer | Timm Bäder <mail@baedert.org> | 2015-05-29 17:37:04 +0200 |
commit | bdabea3ae38e1cd1d0029681369de65f19866d05 (patch) | |
tree | cca7ecd88cb7f07ff2bdff381f51aacd068337eb /gtk/gtkstack.c | |
parent | b3bbe990010ef44fdeeabe3f379394f91593f20d (diff) | |
download | gtk+-bdabea3ae38e1cd1d0029681369de65f19866d05.tar.gz |
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.
Diffstat (limited to 'gtk/gtkstack.c')
-rw-r--r-- | gtk/gtkstack.c | 18 |
1 files changed, 16 insertions, 2 deletions
diff --git a/gtk/gtkstack.c b/gtk/gtkstack.c index 46a8f73081..49a9a7cff0 100644 --- a/gtk/gtkstack.c +++ b/gtk/gtkstack.c @@ -137,6 +137,9 @@ typedef struct { gint64 start_time; gint64 end_time; + gint last_visible_widget_width; + gint last_visible_widget_height; + GtkStackTransitionType active_transition_type; } GtkStackPrivate; @@ -1059,9 +1062,20 @@ set_visible_child (GtkStack *stack, if (priv->visible_child && priv->visible_child->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 - 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; |