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.
This commit is contained in:
parent
7dd06de6d5
commit
bb8abe832e
@ -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 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
|
/* Helper macro which translates by the anchor coord, applies the
|
||||||
given transformation and then translates back */
|
given transformation and then translates back */
|
||||||
#define TRANSFORM_ABOUT_ANCHOR_COORD(a,m,c,_transform) G_STMT_START { \
|
#define TRANSFORM_ABOUT_ANCHOR_COORD(a,m,c,_transform) G_STMT_START { \
|
||||||
@ -4419,21 +4422,6 @@ clutter_actor_real_has_overlaps (ClutterActor *self)
|
|||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
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
|
static void
|
||||||
clutter_actor_class_init (ClutterActorClass *klass)
|
clutter_actor_class_init (ClutterActorClass *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_layout_info = g_quark_from_static_string ("-clutter-actor-layout-info");
|
||||||
quark_actor_transform_info = g_quark_from_static_string ("-clutter-actor-transform-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->set_property = clutter_actor_set_property;
|
||||||
object_class->get_property = clutter_actor_get_property;
|
object_class->get_property = clutter_actor_get_property;
|
||||||
object_class->dispose = clutter_actor_dispose;
|
object_class->dispose = clutter_actor_dispose;
|
||||||
@ -5996,6 +5983,18 @@ clutter_actor_init (ClutterActor *self)
|
|||||||
priv->last_paint_volume_valid = TRUE;
|
priv->last_paint_volume_valid = TRUE;
|
||||||
|
|
||||||
priv->transform_valid = FALSE;
|
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);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Loading…
x
Reference in New Issue
Block a user