diff --git a/gobject/gobject.c b/gobject/gobject.c index 0eaba7e0e..c22b655d8 100644 --- a/gobject/gobject.c +++ b/gobject/gobject.c @@ -540,8 +540,10 @@ g_object_class_install_property (GObjectClass *class, g_return_if_fail (G_IS_PARAM_SPEC (pspec)); if (CLASS_HAS_DERIVED_CLASS (class)) - g_error ("Attempt to add property %s::%s to class after it was derived", - G_OBJECT_CLASS_NAME (class), pspec->name); + g_error ("Attempt to add property %s::%s to class after it was derived", G_OBJECT_CLASS_NAME (class), pspec->name); + + if (!g_type_is_in_init (G_OBJECT_CLASS_TYPE (class))) + g_critical ("Attempt to add property %s::%s after class was initialised", G_OBJECT_CLASS_NAME (class), pspec->name); class->flags |= CLASS_HAS_PROPS_FLAG; @@ -653,6 +655,9 @@ g_object_class_install_properties (GObjectClass *oclass, g_error ("Attempt to add properties to %s after it was derived", G_OBJECT_CLASS_NAME (oclass)); + if (!g_type_is_in_init (G_OBJECT_CLASS_TYPE (oclass))) + g_critical ("Attempt to add properties %s after it was initialised", G_OBJECT_CLASS_NAME (oclass)); + oclass_type = G_OBJECT_CLASS_TYPE (oclass); parent_type = g_type_parent (oclass_type); diff --git a/gobject/gtype-private.h b/gobject/gtype-private.h index 5c415e5d0..d9e31e482 100644 --- a/gobject/gtype-private.h +++ b/gobject/gtype-private.h @@ -72,6 +72,7 @@ void _g_closure_invoke_va (GClosure *closure, int n_params, GType *param_types); +gboolean g_type_is_in_init (GType type); G_END_DECLS diff --git a/gobject/gtype.c b/gobject/gtype.c index 01a00dc6e..8d5df09d0 100644 --- a/gobject/gtype.c +++ b/gobject/gtype.c @@ -4701,3 +4701,13 @@ g_type_ensure (GType type) if (G_UNLIKELY (type == (GType)-1)) g_error ("can't happen"); } + +gboolean +g_type_is_in_init (GType type) +{ + TypeNode *node; + + node = lookup_type_node_I (type); + + return node->data->class.init_state != INITIALIZED; +}