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-25 13:00:34 +0200 |
commit | 99f8bcf1ef7fdfa25e8b532200ea04421d93a190 (patch) | |
tree | 30075fd93bec8d5f315e605d7abb78ce6d3c6fcb | |
parent | 8ffe9f441ac4c119432115881148d9e487025dac (diff) | |
download | gtk+-99f8bcf1ef7fdfa25e8b532200ea04421d93a190.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.
-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; |