summaryrefslogtreecommitdiff
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-25 13:00:34 +0200
commit99f8bcf1ef7fdfa25e8b532200ea04421d93a190 (patch)
tree30075fd93bec8d5f315e605d7abb78ce6d3c6fcb
parent8ffe9f441ac4c119432115881148d9e487025dac (diff)
downloadgtk+-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.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;