actor: Make _clutter_actor_foreach_child() safe again

We were using g_list_foreach() prior to the first Apocalypse, and that
function is resilient against changes to the list while iterating it;
since we are not using a GList any more, we need handle this case
ourselves.
This commit is contained in:
Emmanuele Bassi 2012-03-29 15:52:51 +01:00
parent 656c641d31
commit d45420f992

View File

@ -15801,15 +15801,25 @@ _clutter_actor_foreach_child (ClutterActor *self,
ClutterForeachCallback callback,
gpointer user_data)
{
ClutterActorPrivate *priv = self->priv;
ClutterActor *iter;
gboolean cont;
for (cont = TRUE, iter = priv->first_child;
cont && iter != NULL;
iter = iter->priv->next_sibling)
if (self->priv->first_child == NULL)
return TRUE;
cont = TRUE;
iter = self->priv->first_child;
/* we use this form so that it's safe to change the children
* list while iterating it
*/
while (cont && iter != NULL)
{
ClutterActor *next = iter->priv->next_sibling;
cont = callback (iter, user_data);
iter = next;
}
return cont;