Allow register_type() to be executed multiple times soc.2013.gobjectification.plugins

Fri, 20 Sep 2013 22:09:12 +0530

author
Ankit Vani <a@nevitus.org>
date
Fri, 20 Sep 2013 22:09:12 +0530
branch
soc.2013.gobjectification.plugins
changeset 36776
5f61d5e5cf47
parent 36775
5e59f252d777
child 36777
7db2a0940b39

Allow register_type() to be executed multiple times

libpurple/plugins.h file | annotate | diff | comparison | revisions
--- a/libpurple/plugins.h	Fri Sep 20 22:08:33 2013 +0530
+++ b/libpurple/plugins.h	Fri Sep 20 22:09:12 2013 +0530
@@ -290,30 +290,28 @@
 /** A more general version of PURPLE_DEFINE_DYNAMIC_TYPE(). */
 #define PURPLE_DEFINE_DYNAMIC_TYPE_EXTENDED(TypeName, type_name, TYPE_PARENT, flags, CODE) \
 static GType type_name##_type_id = 0; \
-GType type_name##_get_type(void) { \
+G_MODULE_EXPORT GType type_name##_get_type(void) { \
 	return type_name##_type_id; \
 } \
 void type_name##_register_type(PurplePlugin *); \
 void type_name##_register_type(PurplePlugin *plugin) { \
-	if (type_name##_type_id == 0) { \
-		GType type_id; \
-		const GTypeInfo type_info = { \
-			sizeof (TypeName##Class), \
-			(GBaseInitFunc) NULL, \
-			(GBaseFinalizeFunc) NULL, \
-			(GClassInitFunc) type_name##_class_init, \
-			(GClassFinalizeFunc) NULL, \
-			NULL, \
-			sizeof (TypeName), \
-			0, \
-			(GInstanceInitFunc) type_name##_init, \
-			NULL \
-		}; \
-		type_id = purple_plugin_register_type(plugin, TYPE_PARENT, #TypeName, \
-		                                      &type_info, (GTypeFlags) flags); \
-		type_name##_type_id = type_id; \
-		{ CODE ; } \
-	} \
+	GType type_id; \
+	const GTypeInfo type_info = { \
+		sizeof (TypeName##Class), \
+		(GBaseInitFunc) NULL, \
+		(GBaseFinalizeFunc) NULL, \
+		(GClassInitFunc) type_name##_class_init, \
+		(GClassFinalizeFunc) NULL, \
+		NULL, \
+		sizeof (TypeName), \
+		0, \
+		(GInstanceInitFunc) type_name##_init, \
+		NULL \
+	}; \
+	type_id = purple_plugin_register_type(plugin, TYPE_PARENT, #TypeName, \
+	                                      &type_info, (GTypeFlags) flags); \
+	type_name##_type_id = type_id; \
+	{ CODE ; } \
 }
 
 /** A convenience macro to ease dynamic interface addition. */

mercurial