gtype: interface-after-init exception for glibmm
authorRyan Lortie <desrt@desrt.ca>
Thu, 4 Apr 2013 13:31:11 +0000 (09:31 -0400)
committerRyan Lortie <desrt@desrt.ca>
Thu, 4 Apr 2013 15:10:17 +0000 (11:10 -0400)
glibmm has a pretty difficult-to-solve problem caused by our recent
change to deny addition of interfaces to classes after initialisation.

They're looking for a long-term workaround for the problem, but in the
meantime we can allow the registration to succeed (with warning) if the
class looks like it's being defined by gtkmm.

https://bugzilla.gnome.org/show_bug.cgi?id=697229

gobject/gtype.c

index a821442513eaedfb2285f3dfdf8438b6fa9e464f..1fd31e87d3d4e8f8ce8abf10418c239ff674f0cb 100644 (file)
@@ -1006,7 +1006,10 @@ check_add_interface_L (GType instance_type,
     {
       g_warning ("attempting to add an interface (%s) to class (%s) after class_init",
                  NODE_NAME (iface), NODE_NAME (node));
-      return FALSE;
+
+      /* See https://bugzilla.gnome.org/show_bug.cgi?id=697229 */
+      if (!g_str_has_prefix (NODE_NAME (node), "gtkmm__CustomObject_"))
+        return FALSE;
     }
   tnode = lookup_type_node_I (NODE_PARENT_TYPE (iface));
   if (NODE_PARENT_TYPE (tnode) && !type_lookup_iface_entry_L (node, tnode))