[clutter] stage: Fix up a copy-and-paste train wreck
- From: Emmanuele Bassi <ebassi src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [clutter] stage: Fix up a copy-and-paste train wreck
- Date: Mon, 5 Mar 2012 17:39:40 +0000 (UTC)
commit 720fbd3bec522f200396f206242bc76285492f15
Author: Emmanuele Bassi <ebassi linux intel com>
Date: Mon Mar 5 17:38:27 2012 +0000
stage: Fix up a copy-and-paste train wreck
The show and hide implementation inside ClutterStage ended up being
recursive, and the hide implementation would actually show the children
of the stage unconditionally.
Whoopsie.
clutter/clutter-stage.c | 36 +++++++++++++++++++++++++++++-------
1 files changed, 29 insertions(+), 7 deletions(-)
---
diff --git a/clutter/clutter-stage.c b/clutter/clutter-stage.c
index a9ab25a..123caeb 100644
--- a/clutter/clutter-stage.c
+++ b/clutter/clutter-stage.c
@@ -790,16 +790,26 @@ clutter_stage_unrealize (ClutterActor *self)
}
static void
-clutter_stage_show (ClutterActor *self)
+clutter_stage_show_all (ClutterActor *self)
{
- ClutterStagePrivate *priv = CLUTTER_STAGE (self)->priv;
ClutterActorIter iter;
ClutterActor *child;
+ /* we don't do a recursive show_all(), to maintain the old
+ * invariants from ClutterGroup
+ */
clutter_actor_iter_init (&iter, self);
while (clutter_actor_iter_next (&iter, &child))
clutter_actor_show (child);
+ clutter_actor_show (self);
+}
+
+static void
+clutter_stage_show (ClutterActor *self)
+{
+ ClutterStagePrivate *priv = CLUTTER_STAGE (self)->priv;
+
CLUTTER_ACTOR_CLASS (clutter_stage_parent_class)->show (self);
/* Possibly do an allocation run so that the stage will have the
@@ -811,18 +821,28 @@ clutter_stage_show (ClutterActor *self)
}
static void
-clutter_stage_hide (ClutterActor *self)
+clutter_stage_hide_all (ClutterActor *self)
{
- ClutterStagePrivate *priv = CLUTTER_STAGE (self)->priv;
ClutterActorIter iter;
ClutterActor *child;
- g_assert (priv->impl != NULL);
- _clutter_stage_window_hide (priv->impl);
+ clutter_actor_hide (self);
+ /* we don't do a recursive hide_all(), to maintain the old invariants
+ * from ClutterGroup
+ */
clutter_actor_iter_init (&iter, self);
while (clutter_actor_iter_next (&iter, &child))
- clutter_actor_show (child);
+ clutter_actor_hide (child);
+}
+
+static void
+clutter_stage_hide (ClutterActor *self)
+{
+ ClutterStagePrivate *priv = CLUTTER_STAGE (self)->priv;
+
+ g_assert (priv->impl != NULL);
+ _clutter_stage_window_hide (priv->impl);
CLUTTER_ACTOR_CLASS (clutter_stage_parent_class)->hide (self);
}
@@ -1844,7 +1864,9 @@ clutter_stage_class_init (ClutterStageClass *klass)
actor_class->realize = clutter_stage_realize;
actor_class->unrealize = clutter_stage_unrealize;
actor_class->show = clutter_stage_show;
+ actor_class->show_all = clutter_stage_show_all;
actor_class->hide = clutter_stage_hide;
+ actor_class->hide_all = clutter_stage_hide_all;
actor_class->queue_relayout = clutter_stage_real_queue_relayout;
actor_class->queue_redraw = clutter_stage_real_queue_redraw;
actor_class->apply_transform = clutter_stage_real_apply_transform;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]