summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEmmanuele Bassi <ebassi@linux.intel.com>2012-04-12 17:04:57 +0100
committerEmmanuele Bassi <ebassi@linux.intel.com>2012-04-16 16:05:04 +0100
commit89ab7bbb7e6b15dc79fb17faaf9f92079165fd50 (patch)
treec4e44557c8aa580af30dffb8ba50e25b6920d4c7
parent8484a350b4548d6aa37106b1711faddaec42b57e (diff)
downloadclutter-89ab7bbb7e6b15dc79fb17faaf9f92079165fd50.tar.gz
actor: Clear MetaGroups when empty
When removing the last Action, Constraint, or Effect, we should also be clearing the corresponding MetaGroup: code inside ClutterActor relies on NULL checks, and changing them all to check for NULL && n_items == 0 would not be fun.
-rw-r--r--clutter/clutter-actor.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/clutter/clutter-actor.c b/clutter/clutter-actor.c
index e46a9a77e..a0932c341 100644
--- a/clutter/clutter-actor.c
+++ b/clutter/clutter-actor.c
@@ -3241,6 +3241,9 @@ _clutter_actor_remove_effect_internal (ClutterActor *self,
return;
_clutter_meta_group_remove_meta (priv->effects, CLUTTER_ACTOR_META (effect));
+
+ if (_clutter_meta_group_peek_metas (priv->effects) == NULL)
+ g_clear_object (&priv->effects);
}
static gboolean
@@ -14768,6 +14771,9 @@ clutter_actor_remove_action (ClutterActor *self,
_clutter_meta_group_remove_meta (priv->actions, CLUTTER_ACTOR_META (action));
+ if (_clutter_meta_group_peek_metas (priv->actions) == NULL)
+ g_clear_object (&priv->actions);
+
g_object_notify_by_pspec (G_OBJECT (self), obj_props[PROP_ACTIONS]);
}
@@ -14971,6 +14977,10 @@ clutter_actor_remove_constraint (ClutterActor *self,
_clutter_meta_group_remove_meta (priv->constraints,
CLUTTER_ACTOR_META (constraint));
+
+ if (_clutter_meta_group_peek_metas (priv->constraints) == NULL)
+ g_clear_object (&priv->constraints);
+
clutter_actor_queue_relayout (self);
g_object_notify_by_pspec (G_OBJECT (self), obj_props[PROP_CONSTRAINTS]);