summaryrefslogtreecommitdiff
path: root/gtk/gtkstack.c
diff options
context:
space:
mode:
authorTimm Bäder <mail@baedert.org>2015-05-24 16:55:34 +0200
committerTimm Bäder <mail@baedert.org>2015-05-29 17:37:04 +0200
commitbdabea3ae38e1cd1d0029681369de65f19866d05 (patch)
treecca7ecd88cb7f07ff2bdff381f51aacd068337eb /gtk/gtkstack.c
parentb3bbe990010ef44fdeeabe3f379394f91593f20d (diff)
downloadgtk+-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.c18
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;