mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2025-01-24 21:16:15 +01:00
GObject: prevent installing properties after init
GObject has previously allowed installing properties after class_init has finished running. This means that you could install some of your own properties on G_TYPE_OBJECT, for example, although they wouldn't have worked properly. A previous patch asserted that this was not true and we had to revert it because it broke the shell. Instead of reverting, we should have used a critical, so do that now. Complaints go to this bug: https://bugzilla.gnome.org/show_bug.cgi?id=698614
This commit is contained in:
parent
8df1bb3486
commit
a8a9afe17c
@ -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);
|
||||
|
||||
|
@ -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
|
||||
|
||||
|
@ -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;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user