- /*char *chunk_size = ((Class*)class)->chunk_size;*/
-
- out_printf(out,
- "GType\n"
- "%s_get_type (void)\n"
- "{\n"
- "\tstatic GType type = 0;\n\n"
- "\tif ___GOB_UNLIKELY(type == 0) {\n"
- "\t\tstatic const GTypeInfo info = {\n"
- "\t\t\tsizeof (%sClass),\n"
- "\t\t\t(GBaseInitFunc) NULL,\n"
- "\t\t\t(GBaseFinalizeFunc) NULL,\n"
- "\t\t\t(GClassInitFunc) %s_class_init,\n"
- "\t\t\t(GClassFinalizeFunc) NULL,\n"
- "\t\t\tNULL /* class_data */,\n"
- "\t\t\tsizeof (%s),\n"
- "\t\t\t%d /* n_preallocs */,\n"
- "\t\t\t(GInstanceInitFunc) %s_init,\n"
- "\t\t\tNULL\n"
- "\t\t};\n\n",
- funcbase, typebase, funcbase, typebase, prealloc, funcbase);
-
- add_interface_infos ();
+ Class *c = (Class *)class;
+
+ define_add_interfaces(c);
+
+ out_printf(out, "#ifdef G_DEFINE_TYPE_EXTENDED\n\n"
+ "G_DEFINE_TYPE_EXTENDED(%s, %s, %s,\n"
+ "\t(GTypeFlags)%s,\n",
+ typebase, funcbase, pmacrotype,
+ c->abstract ? "G_TYPE_FLAG_ABSTRACT" : "0");
+
+ if (c->interfaces)
+ out_printf(out, "\t___add_interfaces(g_define_type_id);\n");
+
+ /* Fallback for GLib < 2.4 */
+ out_printf(out, ");\n\n"
+ "#else\n\n"
+ "GType %s_get_type(void)\n"
+ "{\n"
+ "\tstatic GType type = 0;\n",
+ funcbase);
+
+ add_type_info();
+
+ out_printf(out, "\tif ___GOB_UNLIKELY(type == 0) {\n"
+ "\t\ttype = g_type_register_static\n"
+ "\t\t\t( %s\n"
+ "\t\t\t, \"%s\"\n"
+ "\t\t\t, &info\n"
+ "\t\t\t, (GTypeFlags)%s\n"
+ "\t\t\t);\n",
+ pmacrotype, typebase,
+ c->abstract ? "G_TYPE_FLAG_ABSTRACT" : "0");
+
+ if (c->interfaces)
+ out_printf(out, "\t\t___add_interfaces(type);\n");
+
+ out_printf(out, "\t}\n\n"
+ "\treturn type;\n"
+ "}\n\n"
+ "#endif\n\n");
+}