[clutter] actor: Do not use ::constructed
- From: Emmanuele Bassi <ebassi src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [clutter] actor: Do not use ::constructed
- Date: Tue, 17 Jan 2012 18:21:17 +0000 (UTC)
commit bb8abe832ec11cdc9c336cc949ce913ef4e131e7
Author: Emmanuele Bassi <ebassi linux intel com>
Date: Tue Jan 17 18:13:42 2012 +0000
actor: Do not use ::constructed
If we want to set a default layout manager, we need to do so inside
init(), as it's not guaranteed that people subclassing Actor and
overriding ::constructed will actually chain up as they should.
clutter/clutter-actor.c | 31 +++++++++++++++----------------
1 files changed, 15 insertions(+), 16 deletions(-)
---
diff --git a/clutter/clutter-actor.c b/clutter/clutter-actor.c
index c51d8c0..c313d3f 100644
--- a/clutter/clutter-actor.c
+++ b/clutter/clutter-actor.c
@@ -674,6 +674,9 @@ static void _clutter_actor_get_relative_transformation_matrix (ClutterActor *sel
static ClutterPaintVolume *_clutter_actor_get_paint_volume_mutable (ClutterActor *self);
+static void on_layout_manager_changed (ClutterLayoutManager *manager,
+ ClutterActor *self);
+
/* Helper macro which translates by the anchor coord, applies the
given transformation and then translates back */
#define TRANSFORM_ABOUT_ANCHOR_COORD(a,m,c,_transform) G_STMT_START { \
@@ -4420,21 +4423,6 @@ clutter_actor_real_has_overlaps (ClutterActor *self)
}
static void
-clutter_actor_constructed (GObject *gobject)
-{
- ClutterActor *self = CLUTTER_ACTOR (gobject);
-
- /* if we weren't constructed with a layout manager, we fall back to a
- * fixed layout; this is the most sensible option, as it will make
- * things like constraints work out of the box
- */
- if (self->priv->layout_manager == NULL)
- clutter_actor_set_layout_manager (self, clutter_fixed_layout_new ());
-
- G_OBJECT_CLASS (clutter_actor_parent_class)->constructed (gobject);
-}
-
-static void
clutter_actor_class_init (ClutterActorClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
@@ -4443,7 +4431,6 @@ clutter_actor_class_init (ClutterActorClass *klass)
quark_actor_layout_info = g_quark_from_static_string ("-clutter-actor-layout-info");
quark_actor_transform_info = g_quark_from_static_string ("-clutter-actor-transform-info");
- object_class->constructed = clutter_actor_constructed;
object_class->set_property = clutter_actor_set_property;
object_class->get_property = clutter_actor_get_property;
object_class->dispose = clutter_actor_dispose;
@@ -5996,6 +5983,18 @@ clutter_actor_init (ClutterActor *self)
priv->last_paint_volume_valid = TRUE;
priv->transform_valid = FALSE;
+
+ /* we need to create the default layout manager here, because
+ * constructed() may not end up being called, if for instance
+ * somebody forgot to chain up
+ */
+ priv->layout_manager = clutter_fixed_layout_new ();
+ g_object_ref_sink (priv->layout_manager);
+ clutter_layout_manager_set_container (priv->layout_manager,
+ CLUTTER_CONTAINER (self));
+ g_signal_connect (priv->layout_manager, "layout-changed",
+ G_CALLBACK (on_layout_manager_changed),
+ self);
}
/**
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]