[clutter] actor: Add a default handler for ::destroy
- From: Emmanuele Bassi <ebassi src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [clutter] actor: Add a default handler for ::destroy
- Date: Thu, 9 Feb 2012 15:52:08 +0000 (UTC)
commit 59bb19a4494d4be2b431cf62ccb34efc894cd027
Author: Emmanuele Bassi <ebassi linux intel com>
Date: Thu Feb 9 15:43:25 2012 +0000
actor: Add a default handler for ::destroy
Now that ClutterActor can be instantiated, we need to do the right
thing, and destroy its children when it is destroyed.
clutter/clutter-actor.c | 54 ++++++++++++++++++++++++++++++----------------
1 files changed, 35 insertions(+), 19 deletions(-)
---
diff --git a/clutter/clutter-actor.c b/clutter/clutter-actor.c
index c25a5f7..98a72b0 100644
--- a/clutter/clutter-actor.c
+++ b/clutter/clutter-actor.c
@@ -4754,6 +4754,21 @@ clutter_actor_real_has_overlaps (ClutterActor *self)
return TRUE;
}
+static void
+clutter_actor_real_destroy (ClutterActor *actor)
+{
+ ClutterActorIter iter;
+ ClutterActor *child;
+
+ clutter_actor_iter_init (&iter, actor);
+ while (clutter_actor_iter_next (&iter, &child))
+ {
+ g_object_ref (child);
+ clutter_actor_iter_remove (&iter);
+ clutter_actor_destroy (child);
+ }
+}
+
static GObject *
clutter_actor_constructor (GType gtype,
guint n_props,
@@ -4795,6 +4810,26 @@ clutter_actor_class_init (ClutterActorClass *klass)
object_class->dispose = clutter_actor_dispose;
object_class->finalize = clutter_actor_finalize;
+ klass->show = clutter_actor_real_show;
+ klass->show_all = clutter_actor_show;
+ klass->hide = clutter_actor_real_hide;
+ klass->hide_all = clutter_actor_hide;
+ klass->map = clutter_actor_real_map;
+ klass->unmap = clutter_actor_real_unmap;
+ klass->unrealize = clutter_actor_real_unrealize;
+ klass->pick = clutter_actor_real_pick;
+ klass->get_preferred_width = clutter_actor_real_get_preferred_width;
+ klass->get_preferred_height = clutter_actor_real_get_preferred_height;
+ klass->allocate = clutter_actor_real_allocate;
+ klass->queue_redraw = clutter_actor_real_queue_redraw;
+ klass->queue_relayout = clutter_actor_real_queue_relayout;
+ klass->apply_transform = clutter_actor_real_apply_transform;
+ klass->get_accessible = clutter_actor_real_get_accessible;
+ klass->get_paint_volume = clutter_actor_real_get_paint_volume;
+ klass->has_overlaps = clutter_actor_real_has_overlaps;
+ klass->paint = clutter_actor_real_paint;
+ klass->destroy = clutter_actor_real_destroy;
+
g_type_class_add_private (klass, sizeof (ClutterActorPrivate));
/**
@@ -6321,25 +6356,6 @@ clutter_actor_class_init (ClutterActorClass *klass)
G_TYPE_NONE, 2,
CLUTTER_TYPE_ACTOR_BOX,
CLUTTER_TYPE_ALLOCATION_FLAGS);
-
- klass->show = clutter_actor_real_show;
- klass->show_all = clutter_actor_show;
- klass->hide = clutter_actor_real_hide;
- klass->hide_all = clutter_actor_hide;
- klass->map = clutter_actor_real_map;
- klass->unmap = clutter_actor_real_unmap;
- klass->unrealize = clutter_actor_real_unrealize;
- klass->pick = clutter_actor_real_pick;
- klass->get_preferred_width = clutter_actor_real_get_preferred_width;
- klass->get_preferred_height = clutter_actor_real_get_preferred_height;
- klass->allocate = clutter_actor_real_allocate;
- klass->queue_redraw = clutter_actor_real_queue_redraw;
- klass->queue_relayout = clutter_actor_real_queue_relayout;
- klass->apply_transform = clutter_actor_real_apply_transform;
- klass->get_accessible = clutter_actor_real_get_accessible;
- klass->get_paint_volume = clutter_actor_real_get_paint_volume;
- klass->has_overlaps = clutter_actor_real_has_overlaps;
- klass->paint = clutter_actor_real_paint;
}
static void
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]