box: Check before using the LayoutManager instance

A ClutterBox might not have a ClutterLayoutManager instance
associated -- for instance, during destruction. We should check
for one before calling methods on it.
This commit is contained in:
Emmanuele Bassi 2009-10-26 15:08:03 +00:00
parent 81c8cf3e6d
commit 2cad7e24f0

View File

@ -118,9 +118,10 @@ clutter_box_real_add (ClutterContainer *container,
clutter_actor_set_parent (actor, CLUTTER_ACTOR (container)); clutter_actor_set_parent (actor, CLUTTER_ACTOR (container));
clutter_layout_manager_add_child_meta (priv->manager, if (priv->manager != NULL)
container, clutter_layout_manager_add_child_meta (priv->manager,
actor); container,
actor);
clutter_actor_queue_relayout (actor); clutter_actor_queue_relayout (actor);
@ -140,9 +141,10 @@ clutter_box_real_remove (ClutterContainer *container,
priv->children = g_list_remove (priv->children, actor); priv->children = g_list_remove (priv->children, actor);
clutter_actor_unparent (actor); clutter_actor_unparent (actor);
clutter_layout_manager_remove_child_meta (priv->manager, if (priv->manager != NULL)
container, clutter_layout_manager_remove_child_meta (priv->manager,
actor); container,
actor);
clutter_actor_queue_relayout (CLUTTER_ACTOR (container)); clutter_actor_queue_relayout (CLUTTER_ACTOR (container));
@ -277,7 +279,7 @@ clutter_box_real_get_preferred_width (ClutterActor *actor,
/* if we don't have any children don't bother proxying the /* if we don't have any children don't bother proxying the
* call to the layout manager instance * call to the layout manager instance
*/ */
if (priv->children == NULL) if (priv->children == NULL || priv->manager == NULL)
{ {
if (min_width) if (min_width)
*min_width = 0.0; *min_width = 0.0;
@ -305,7 +307,7 @@ clutter_box_real_get_preferred_height (ClutterActor *actor,
/* if we don't have any children don't bother proxying the /* if we don't have any children don't bother proxying the
* call to the layout manager instance * call to the layout manager instance
*/ */
if (priv->children == NULL) if (priv->children == NULL || priv->manager == NULL)
{ {
if (min_height) if (min_height)
*min_height = 0.0; *min_height = 0.0;
@ -333,7 +335,7 @@ clutter_box_real_allocate (ClutterActor *actor,
klass = CLUTTER_ACTOR_CLASS (clutter_box_parent_class); klass = CLUTTER_ACTOR_CLASS (clutter_box_parent_class);
klass->allocate (actor, allocation, flags); klass->allocate (actor, allocation, flags);
if (priv->children == NULL) if (priv->children == NULL || priv->manager == NULL)
return; return;
clutter_layout_manager_allocate (priv->manager, clutter_layout_manager_allocate (priv->manager,
@ -349,7 +351,8 @@ clutter_box_destroy (ClutterActor *actor)
/* destroy all our children */ /* destroy all our children */
g_list_foreach (priv->children, (GFunc) clutter_actor_destroy, NULL); g_list_foreach (priv->children, (GFunc) clutter_actor_destroy, NULL);
CLUTTER_ACTOR_CLASS (clutter_box_parent_class)->destroy (actor); if (CLUTTER_ACTOR_CLASS (clutter_box_parent_class)->destroy)
CLUTTER_ACTOR_CLASS (clutter_box_parent_class)->destroy (actor);
} }
static inline void static inline void