box: Restore the ::destroy handler

During the gutting of ClutterBox, the destroy and dispose implementation
were removed. The former, especially, destroyed all children - which
usually meant that the redraw queues for the childre was cleared as
well. The removal introduced crashes when a Box was destroyed while its
children were still queueing redraws.
This commit is contained in:
Emmanuele Bassi 2012-01-27 11:48:14 +00:00
parent 9d355f12c6
commit fa856e3f5e

View File

@ -231,6 +231,22 @@ clutter_box_get_property (GObject *gobject,
} }
} }
static void
clutter_box_real_destroy (ClutterActor *actor)
{
ClutterActor *iter;
iter = clutter_actor_get_first_child (actor);
while (iter != NULL)
{
ClutterActor *next = clutter_actor_get_next_sibling (iter);
clutter_actor_destroy (iter);
iter = next;
}
}
static void static void
clutter_box_class_init (ClutterBoxClass *klass) clutter_box_class_init (ClutterBoxClass *klass)
{ {
@ -239,6 +255,7 @@ clutter_box_class_init (ClutterBoxClass *klass)
g_type_class_add_private (klass, sizeof (ClutterBoxPrivate)); g_type_class_add_private (klass, sizeof (ClutterBoxPrivate));
actor_class->destroy = clutter_box_real_destroy;
actor_class->get_paint_volume = clutter_box_real_get_paint_volume; actor_class->get_paint_volume = clutter_box_real_get_paint_volume;
actor_class->pick = clutter_box_real_pick; actor_class->pick = clutter_box_real_pick;