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:
Ryan Lortie
2013-04-22 17:37:18 -04:00
parent 8df1bb3486
commit a8a9afe17c
3 changed files with 18 additions and 2 deletions

View File

@@ -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);