libpurple: Port self-contained code from g_type_class_add_private()

Thu, 01 Nov 2018 15:45:13 -0500

author
Mike Ruprecht <cmaiku@gmail.com>
date
Thu, 01 Nov 2018 15:45:13 -0500
changeset 39364
54439db24429
parent 39363
3932ab2393a7
child 39367
ddb8c4b365dd

libpurple: Port self-contained code from g_type_class_add_private()

This patch ports the self-contained libpurple GObjects away from the
deprecated g_type_class_add_private() function in favor of the
G_DEFINE_TYPE_WITH_PRIVATE() macro.

libpurple/blistnode.c file | annotate | diff | comparison | revisions
libpurple/buddylist.c file | annotate | diff | comparison | revisions
libpurple/chat.c file | annotate | diff | comparison | revisions
libpurple/contact.c file | annotate | diff | comparison | revisions
libpurple/countingnode.c file | annotate | diff | comparison | revisions
libpurple/group.c file | annotate | diff | comparison | revisions
libpurple/memorypool.c file | annotate | diff | comparison | revisions
libpurple/roomlist.c file | annotate | diff | comparison | revisions
libpurple/sound-theme.c file | annotate | diff | comparison | revisions
libpurple/theme-loader.c file | annotate | diff | comparison | revisions
libpurple/theme.c file | annotate | diff | comparison | revisions
libpurple/trie.c file | annotate | diff | comparison | revisions
--- a/libpurple/blistnode.c	Tue Dec 04 03:27:04 2018 +0000
+++ b/libpurple/blistnode.c	Thu Nov 01 15:45:13 2018 -0500
@@ -23,9 +23,6 @@
 #include "internal.h"
 #include "glibcompat.h"
 
-#define PURPLE_BLIST_NODE_GET_PRIVATE(obj) \
-	(G_TYPE_INSTANCE_GET_PRIVATE((obj), PURPLE_TYPE_BLIST_NODE, PurpleBlistNodePrivate))
-
 typedef struct _PurpleBlistNodePrivate  PurpleBlistNodePrivate;
 
 /* Private data of a buddy list node */
@@ -42,9 +39,10 @@
 	BLNODE_PROP_LAST
 };
 
-static GObjectClass *parent_class;
+static GParamSpec *bn_properties[BLNODE_PROP_LAST];
 
-static GParamSpec *bn_properties[BLNODE_PROP_LAST];
+G_DEFINE_ABSTRACT_TYPE_WITH_PRIVATE(PurpleBlistNode, purple_blist_node,
+		G_TYPE_OBJECT);
 
 /**************************************************************************/
 /* Buddy list node API                                                    */
@@ -117,7 +115,8 @@
 void purple_blist_node_remove_setting(PurpleBlistNode *node, const char *key)
 {
 	PurpleBlistUiOps *ops;
-	PurpleBlistNodePrivate *priv = PURPLE_BLIST_NODE_GET_PRIVATE(node);
+	PurpleBlistNodePrivate *priv =
+			purple_blist_node_get_instance_private(node);
 
 	g_return_if_fail(priv != NULL);
 	g_return_if_fail(priv->settings != NULL);
@@ -133,7 +132,8 @@
 void
 purple_blist_node_set_transient(PurpleBlistNode *node, gboolean transient)
 {
-	PurpleBlistNodePrivate *priv = PURPLE_BLIST_NODE_GET_PRIVATE(node);
+	PurpleBlistNodePrivate *priv =
+			purple_blist_node_get_instance_private(node);
 
 	g_return_if_fail(priv != NULL);
 
@@ -146,7 +146,8 @@
 gboolean
 purple_blist_node_is_transient(PurpleBlistNode *node)
 {
-	PurpleBlistNodePrivate *priv = PURPLE_BLIST_NODE_GET_PRIVATE(node);
+	PurpleBlistNodePrivate *priv =
+			purple_blist_node_get_instance_private(node);
 
 	g_return_val_if_fail(priv != NULL, 0);
 
@@ -156,7 +157,8 @@
 GHashTable *
 purple_blist_node_get_settings(PurpleBlistNode *node)
 {
-	PurpleBlistNodePrivate *priv = PURPLE_BLIST_NODE_GET_PRIVATE(node);
+	PurpleBlistNodePrivate *priv =
+			purple_blist_node_get_instance_private(node);
 
 	g_return_val_if_fail(priv != NULL, NULL);
 
@@ -166,7 +168,8 @@
 gboolean
 purple_blist_node_has_setting(PurpleBlistNode* node, const char *key)
 {
-	PurpleBlistNodePrivate *priv = PURPLE_BLIST_NODE_GET_PRIVATE(node);
+	PurpleBlistNodePrivate *priv =
+			purple_blist_node_get_instance_private(node);
 
 	g_return_val_if_fail(priv != NULL, FALSE);
 	g_return_val_if_fail(priv->settings != NULL, FALSE);
@@ -181,7 +184,8 @@
 {
 	GValue *value;
 	PurpleBlistUiOps *ops;
-	PurpleBlistNodePrivate *priv = PURPLE_BLIST_NODE_GET_PRIVATE(node);
+	PurpleBlistNodePrivate *priv =
+			purple_blist_node_get_instance_private(node);
 
 	g_return_if_fail(priv != NULL);
 	g_return_if_fail(priv->settings != NULL);
@@ -201,7 +205,8 @@
 purple_blist_node_get_bool(PurpleBlistNode* node, const char *key)
 {
 	GValue *value;
-	PurpleBlistNodePrivate *priv = PURPLE_BLIST_NODE_GET_PRIVATE(node);
+	PurpleBlistNodePrivate *priv =
+			purple_blist_node_get_instance_private(node);
 
 	g_return_val_if_fail(priv != NULL, FALSE);
 	g_return_val_if_fail(priv->settings != NULL, FALSE);
@@ -222,7 +227,8 @@
 {
 	GValue *value;
 	PurpleBlistUiOps *ops;
-	PurpleBlistNodePrivate *priv = PURPLE_BLIST_NODE_GET_PRIVATE(node);
+	PurpleBlistNodePrivate *priv =
+			purple_blist_node_get_instance_private(node);
 
 	g_return_if_fail(priv != NULL);
 	g_return_if_fail(priv->settings != NULL);
@@ -242,7 +248,8 @@
 purple_blist_node_get_int(PurpleBlistNode* node, const char *key)
 {
 	GValue *value;
-	PurpleBlistNodePrivate *priv = PURPLE_BLIST_NODE_GET_PRIVATE(node);
+	PurpleBlistNodePrivate *priv =
+			purple_blist_node_get_instance_private(node);
 
 	g_return_val_if_fail(priv != NULL, 0);
 	g_return_val_if_fail(priv->settings != NULL, 0);
@@ -263,7 +270,8 @@
 {
 	GValue *value;
 	PurpleBlistUiOps *ops;
-	PurpleBlistNodePrivate *priv = PURPLE_BLIST_NODE_GET_PRIVATE(node);
+	PurpleBlistNodePrivate *priv =
+			purple_blist_node_get_instance_private(node);
 
 	g_return_if_fail(priv != NULL);
 	g_return_if_fail(priv->settings != NULL);
@@ -283,7 +291,8 @@
 purple_blist_node_get_string(PurpleBlistNode* node, const char *key)
 {
 	GValue *value;
-	PurpleBlistNodePrivate *priv = PURPLE_BLIST_NODE_GET_PRIVATE(node);
+	PurpleBlistNodePrivate *priv =
+			purple_blist_node_get_instance_private(node);
 
 	g_return_val_if_fail(priv != NULL, NULL);
 	g_return_val_if_fail(priv->settings != NULL, NULL);
@@ -351,9 +360,10 @@
 
 /* GObject initialization function */
 static void
-purple_blist_node_init(GTypeInstance *instance, gpointer klass)
+purple_blist_node_init(PurpleBlistNode *node)
 {
-	PurpleBlistNodePrivate *priv = PURPLE_BLIST_NODE_GET_PRIVATE(instance);
+	PurpleBlistNodePrivate *priv =
+			purple_blist_node_get_instance_private(node);
 
 	priv->settings = g_hash_table_new_full(g_str_hash, g_str_equal, g_free,
 			(GDestroyNotify)purple_value_free);
@@ -363,11 +373,12 @@
 static void
 purple_blist_node_finalize(GObject *object)
 {
-	PurpleBlistNodePrivate *priv = PURPLE_BLIST_NODE_GET_PRIVATE(object);
+	PurpleBlistNodePrivate *priv = purple_blist_node_get_instance_private(
+			PURPLE_BLIST_NODE(object));
 
 	g_hash_table_destroy(priv->settings);
 
-	parent_class->finalize(object);
+	G_OBJECT_CLASS(purple_blist_node_parent_class)->finalize(object);
 }
 
 /* Class initializer function */
@@ -376,16 +387,12 @@
 {
 	GObjectClass *obj_class = G_OBJECT_CLASS(klass);
 
-	parent_class = g_type_class_peek_parent(klass);
-
 	obj_class->finalize = purple_blist_node_finalize;
 
 	/* Setup properties */
 	obj_class->get_property = purple_blist_node_get_property;
 	obj_class->set_property = purple_blist_node_set_property;
 
-	g_type_class_add_private(klass, sizeof(PurpleBlistNodePrivate));
-
 	bn_properties[BLNODE_PROP_TRANSIENT] = g_param_spec_boolean("transient",
 				"Transient",
 				"Whether node should not be saved with the buddy list.",
@@ -395,29 +402,3 @@
 				bn_properties);
 }
 
-GType
-purple_blist_node_get_type(void)
-{
-	static GType type = 0;
-
-	if(type == 0) {
-		static const GTypeInfo info = {
-			sizeof(PurpleBlistNodeClass),
-			NULL,
-			NULL,
-			(GClassInitFunc)purple_blist_node_class_init,
-			NULL,
-			NULL,
-			sizeof(PurpleBlistNode),
-			0,
-			(GInstanceInitFunc)purple_blist_node_init,
-			NULL,
-		};
-
-		type = g_type_register_static(G_TYPE_OBJECT, "PurpleBlistNode",
-				&info, G_TYPE_FLAG_ABSTRACT);
-	}
-
-	return type;
-}
-
--- a/libpurple/buddylist.c	Tue Dec 04 03:27:04 2018 +0000
+++ b/libpurple/buddylist.c	Thu Nov 01 15:45:13 2018 -0500
@@ -33,9 +33,6 @@
 #include "util.h"
 #include "xmlnode.h"
 
-#define PURPLE_BUDDY_LIST_GET_PRIVATE(obj) \
-	(G_TYPE_INSTANCE_GET_PRIVATE((obj), PURPLE_TYPE_BUDDY_LIST, PurpleBuddyListPrivate))
-
 /* Private data for a buddy list. */
 typedef struct  {
 	GHashTable *buddies;  /* Every buddy in this list */
@@ -45,7 +42,7 @@
 
 static PurpleBuddyList *purplebuddylist = NULL;
 
-static GObjectClass *parent_class;
+G_DEFINE_TYPE_WITH_PRIVATE(PurpleBuddyList, purple_buddy_list, G_TYPE_OBJECT);
 
 /*
  * A hash table used for efficient lookups of buddies by name.
@@ -759,13 +756,14 @@
 GSList *
 purple_blist_get_buddies()
 {
+	PurpleBuddyListPrivate *priv;
 	GSList *buddies = NULL;
 
 	if (!purplebuddylist)
 		return NULL;
 
-	g_hash_table_foreach(PURPLE_BUDDY_LIST_GET_PRIVATE(purplebuddylist)->buddies,
-			append_buddy, &buddies);
+	priv = purple_buddy_list_get_instance_private(purplebuddylist);
+	g_hash_table_foreach(priv->buddies, append_buddy, &buddies);
 	return buddies;
 }
 
@@ -803,7 +801,8 @@
 	GHashTable *account_buddies;
 	PurpleAccount *account;
 	gchar *name;
-	PurpleBuddyListPrivate *priv = PURPLE_BUDDY_LIST_GET_PRIVATE(purplebuddylist);
+	PurpleBuddyListPrivate *priv =
+			purple_buddy_list_get_instance_private(purplebuddylist);
 
 	g_return_if_fail(PURPLE_IS_BUDDY(buddy));
 
@@ -941,7 +940,8 @@
 	PurpleBlistUiOps *ops = purple_blist_get_ui_ops();
 	struct _purple_hbuddy *hb, *hb2;
 	GHashTable *account_buddies;
-	PurpleBuddyListPrivate *priv = PURPLE_BUDDY_LIST_GET_PRIVATE(purplebuddylist);
+	PurpleBuddyListPrivate *priv =
+			purple_buddy_list_get_instance_private(purplebuddylist);
 
 	g_return_if_fail(PURPLE_IS_BUDDY(buddy));
 
@@ -1097,7 +1097,8 @@
 	PurpleGroup *g;
 	PurpleBlistNode *gnode, *cnode, *bnode;
 	PurpleCountingNode *contact_counter, *group_counter;
-	PurpleBuddyListPrivate *priv = PURPLE_BUDDY_LIST_GET_PRIVATE(purplebuddylist);
+	PurpleBuddyListPrivate *priv =
+			purple_buddy_list_get_instance_private(purplebuddylist);
 
 	g_return_if_fail(PURPLE_IS_CONTACT(contact));
 
@@ -1359,6 +1360,8 @@
 
 void purple_blist_remove_buddy(PurpleBuddy *buddy)
 {
+	PurpleBuddyListPrivate *priv =
+			purple_buddy_list_get_instance_private(purplebuddylist);
 	PurpleBlistUiOps *ops = purple_blist_get_ui_ops();
 	PurpleBlistNode *node, *cnode, *gnode;
 	PurpleCountingNode *contact_counter, *group_counter;
@@ -1415,7 +1418,7 @@
 	hb.name = (gchar *)purple_normalize(account, purple_buddy_get_name(buddy));
 	hb.account = account;
 	hb.group = gnode;
-	g_hash_table_remove(PURPLE_BUDDY_LIST_GET_PRIVATE(purplebuddylist)->buddies, &hb);
+	g_hash_table_remove(priv->buddies, &hb);
 
 	account_buddies = g_hash_table_lookup(buddies_cache, account);
 	g_hash_table_remove(account_buddies, &hb);
@@ -1542,6 +1545,8 @@
 
 PurpleBuddy *purple_blist_find_buddy(PurpleAccount *account, const char *name)
 {
+	PurpleBuddyListPrivate *priv =
+			purple_buddy_list_get_instance_private(purplebuddylist);
 	PurpleBuddy *buddy;
 	struct _purple_hbuddy hb;
 	PurpleBlistNode *group;
@@ -1558,8 +1563,7 @@
 			continue;
 
 		hb.group = group;
-		if ((buddy = g_hash_table_lookup(PURPLE_BUDDY_LIST_GET_PRIVATE(purplebuddylist)->buddies,
-				&hb))) {
+		if ((buddy = g_hash_table_lookup(priv->buddies, &hb))) {
 			return buddy;
 		}
 	}
@@ -1570,6 +1574,8 @@
 PurpleBuddy *purple_blist_find_buddy_in_group(PurpleAccount *account, const char *name,
 		PurpleGroup *group)
 {
+	PurpleBuddyListPrivate *priv =
+			purple_buddy_list_get_instance_private(purplebuddylist);
 	struct _purple_hbuddy hb;
 
 	g_return_val_if_fail(PURPLE_IS_BUDDY_LIST(purplebuddylist), NULL);
@@ -1580,8 +1586,7 @@
 	hb.account = account;
 	hb.group = (PurpleBlistNode*)group;
 
-	return g_hash_table_lookup(PURPLE_BUDDY_LIST_GET_PRIVATE(purplebuddylist)->buddies,
-			&hb);
+	return g_hash_table_lookup(priv->buddies, &hb);
 }
 
 static void find_acct_buddies(gpointer key, gpointer value, gpointer data)
@@ -1594,6 +1599,8 @@
 
 GSList *purple_blist_find_buddies(PurpleAccount *account, const char *name)
 {
+	PurpleBuddyListPrivate *priv =
+			purple_buddy_list_get_instance_private(purplebuddylist);
 	PurpleBuddy *buddy;
 	PurpleBlistNode *node;
 	GSList *ret = NULL;
@@ -1612,7 +1619,7 @@
 				continue;
 
 			hb.group = node;
-			if ((buddy = g_hash_table_lookup(PURPLE_BUDDY_LIST_GET_PRIVATE(purplebuddylist)->buddies,
+			if ((buddy = g_hash_table_lookup(priv->buddies,
 					&hb)) != NULL)
 				ret = g_slist_prepend(ret, buddy);
 		}
@@ -2114,11 +2121,12 @@
 
 /* GObject initialization function */
 static void
-purple_buddy_list_init(GTypeInstance *instance, gpointer klass)
+purple_buddy_list_init(PurpleBuddyList *blist)
 {
-	PurpleBuddyList *blist = PURPLE_BUDDY_LIST(instance);
+	PurpleBuddyListPrivate *priv =
+			purple_buddy_list_get_instance_private(blist);
 
-	PURPLE_BUDDY_LIST_GET_PRIVATE(blist)->buddies = g_hash_table_new_full(
+	priv->buddies = g_hash_table_new_full(
 					 (GHashFunc)_purple_blist_hbuddy_hash,
 					 (GEqualFunc)_purple_blist_hbuddy_equal,
 					 (GDestroyNotify)_purple_blist_hbuddy_free_key, NULL);
@@ -2128,9 +2136,11 @@
 static void
 purple_buddy_list_finalize(GObject *object)
 {
-	g_hash_table_destroy(PURPLE_BUDDY_LIST_GET_PRIVATE(object)->buddies);
+	PurpleBuddyListPrivate *priv = purple_buddy_list_get_instance_private(
+			PURPLE_BUDDY_LIST(object));
+	g_hash_table_destroy(priv->buddies);
 
-	G_OBJECT_CLASS(parent_class)->finalize(object);
+	G_OBJECT_CLASS(purple_buddy_list_parent_class)->finalize(object);
 }
 
 /* Class initializer function */
@@ -2138,35 +2148,6 @@
 {
 	GObjectClass *obj_class = G_OBJECT_CLASS(klass);
 
-	parent_class = g_type_class_peek_parent(klass);
-
 	obj_class->finalize = purple_buddy_list_finalize;
-
-	g_type_class_add_private(klass, sizeof(PurpleBuddyListPrivate));
 }
 
-GType
-purple_buddy_list_get_type(void)
-{
-	static GType type = 0;
-
-	if(type == 0) {
-		static const GTypeInfo info = {
-			sizeof(PurpleBuddyListClass),
-			NULL,
-			NULL,
-			(GClassInitFunc)purple_buddy_list_class_init,
-			NULL,
-			NULL,
-			sizeof(PurpleBuddyList),
-			0,
-			(GInstanceInitFunc)purple_buddy_list_init,
-			NULL,
-		};
-
-		type = g_type_register_static(G_TYPE_OBJECT,
-				"PurpleBuddyList", &info, 0);
-	}
-
-	return type;
-}
--- a/libpurple/chat.c	Tue Dec 04 03:27:04 2018 +0000
+++ b/libpurple/chat.c	Thu Nov 01 15:45:13 2018 -0500
@@ -24,9 +24,6 @@
 #include "chat.h"
 #include "util.h"
 
-#define PURPLE_CHAT_GET_PRIVATE(obj) \
-	(G_TYPE_INSTANCE_GET_PRIVATE((obj), PURPLE_TYPE_CHAT, PurpleChatPrivate))
-
 typedef struct _PurpleChatPrivate       PurpleChatPrivate;
 
 /* Private data for a chat node */
@@ -53,16 +50,17 @@
 /******************************************************************************
  * Globals
  *****************************************************************************/
-static PurpleBlistNode *blistnode_parent_class;
 static GParamSpec *properties[PROP_LAST];
 
+G_DEFINE_TYPE_WITH_PRIVATE(PurpleChat, purple_chat, PURPLE_TYPE_BLIST_NODE);
+
 /******************************************************************************
  * API
  *****************************************************************************/
 
 const char *purple_chat_get_name(PurpleChat *chat)
 {
-	PurpleChatPrivate *priv = PURPLE_CHAT_GET_PRIVATE(chat);
+	PurpleChatPrivate *priv = purple_chat_get_instance_private(chat);
 
 	g_return_val_if_fail(priv != NULL, NULL);
 
@@ -76,7 +74,7 @@
 {
 	char *ret = NULL;
 	PurpleProtocol *protocol = NULL;
-	PurpleChatPrivate *priv = PURPLE_CHAT_GET_PRIVATE(chat);
+	PurpleChatPrivate *priv = purple_chat_get_instance_private(chat);
 
 	g_return_val_if_fail(priv != NULL, NULL);
 
@@ -100,7 +98,7 @@
 	PurpleBlistUiOps *ops = purple_blist_get_ui_ops();
 	char *old_alias;
 	char *new_alias = NULL;
-	PurpleChatPrivate *priv = PURPLE_CHAT_GET_PRIVATE(chat);
+	PurpleChatPrivate *priv = purple_chat_get_instance_private(chat);
 
 	g_return_if_fail(priv != NULL);
 
@@ -146,7 +144,7 @@
 PurpleAccount *
 purple_chat_get_account(PurpleChat *chat)
 {
-	PurpleChatPrivate *priv = PURPLE_CHAT_GET_PRIVATE(chat);
+	PurpleChatPrivate *priv = purple_chat_get_instance_private(chat);
 
 	g_return_val_if_fail(priv != NULL, NULL);
 
@@ -156,7 +154,7 @@
 GHashTable *
 purple_chat_get_components(PurpleChat *chat)
 {
-	PurpleChatPrivate *priv = PURPLE_CHAT_GET_PRIVATE(chat);
+	PurpleChatPrivate *priv = purple_chat_get_instance_private(chat);
 
 	g_return_val_if_fail(priv != NULL, NULL);
 
@@ -171,7 +169,7 @@
 		GParamSpec *pspec)
 {
 	PurpleChat *chat = PURPLE_CHAT(obj);
-	PurpleChatPrivate *priv = PURPLE_CHAT_GET_PRIVATE(chat);
+	PurpleChatPrivate *priv = purple_chat_get_instance_private(chat);
 
 	switch (param_id) {
 		case PROP_ALIAS:
@@ -198,7 +196,7 @@
 		GParamSpec *pspec)
 {
 	PurpleChat *chat = PURPLE_CHAT(obj);
-	PurpleChatPrivate *priv = PURPLE_CHAT_GET_PRIVATE(chat);
+	PurpleChatPrivate *priv = purple_chat_get_instance_private(chat);
 
 	switch (param_id) {
 		case PROP_ALIAS:
@@ -218,7 +216,7 @@
 
 /* GObject initialization function */
 static void
-purple_chat_init(GTypeInstance *instance, gpointer klass)
+purple_chat_init(PurpleChat *chat)
 {
 }
 
@@ -227,10 +225,10 @@
 purple_chat_constructed(GObject *object)
 {
 	PurpleChat *chat = PURPLE_CHAT(object);
-	PurpleChatPrivate *priv = PURPLE_CHAT_GET_PRIVATE(chat);
+	PurpleChatPrivate *priv = purple_chat_get_instance_private(chat);
 	PurpleBlistUiOps *ops = purple_blist_get_ui_ops();
 
-	G_OBJECT_CLASS(blistnode_parent_class)->constructed(object);
+	G_OBJECT_CLASS(purple_chat_parent_class)->constructed(object);
 
 	if (ops != NULL && ops->new_node != NULL)
 		ops->new_node(PURPLE_BLIST_NODE(chat));
@@ -242,12 +240,13 @@
 static void
 purple_chat_finalize(GObject *object)
 {
-	PurpleChatPrivate *priv = PURPLE_CHAT_GET_PRIVATE(object);
+	PurpleChatPrivate *priv =
+			purple_chat_get_instance_private(PURPLE_CHAT(object));
 
 	g_free(priv->alias);
 	g_hash_table_destroy(priv->components);
 
-	G_OBJECT_CLASS(blistnode_parent_class)->finalize(object);
+	G_OBJECT_CLASS(purple_chat_parent_class)->finalize(object);
 }
 
 /* Class initializer function */
@@ -255,8 +254,6 @@
 {
 	GObjectClass *obj_class = G_OBJECT_CLASS(klass);
 
-	blistnode_parent_class = g_type_class_peek_parent(klass);
-
 	obj_class->finalize = purple_chat_finalize;
 
 	/* Setup properties */
@@ -264,8 +261,6 @@
 	obj_class->set_property = purple_chat_set_property;
 	obj_class->constructed = purple_chat_constructed;
 
-	g_type_class_add_private(klass, sizeof(PurpleChatPrivate));
-
 	properties[PROP_ALIAS] = g_param_spec_string(
 		"alias",
 		"Alias",
@@ -292,33 +287,6 @@
 	g_object_class_install_properties(obj_class, PROP_LAST, properties);
 }
 
-GType
-purple_chat_get_type(void)
-{
-	static GType type = 0;
-
-	if(type == 0) {
-		static const GTypeInfo info = {
-			sizeof(PurpleChatClass),
-			NULL,
-			NULL,
-			(GClassInitFunc)purple_chat_class_init,
-			NULL,
-			NULL,
-			sizeof(PurpleChat),
-			0,
-			(GInstanceInitFunc)purple_chat_init,
-			NULL,
-		};
-
-		type = g_type_register_static(PURPLE_TYPE_BLIST_NODE,
-				"PurpleChat",
-				&info, 0);
-	}
-
-	return type;
-}
-
 PurpleChat *
 purple_chat_new(PurpleAccount *account, const char *alias, GHashTable *components)
 {
--- a/libpurple/contact.c	Tue Dec 04 03:27:04 2018 +0000
+++ b/libpurple/contact.c	Thu Nov 01 15:45:13 2018 -0500
@@ -25,9 +25,6 @@
 #include "internal.h" /* TODO: this needs to die */
 #include "util.h"
 
-#define PURPLE_CONTACT_GET_PRIVATE(obj) \
-	(G_TYPE_INSTANCE_GET_PRIVATE((obj), PURPLE_TYPE_CONTACT, PurpleContactPrivate))
-
 typedef struct _PurpleContactPrivate    PurpleContactPrivate;
 
 struct _PurpleContactPrivate {
@@ -47,9 +44,11 @@
 /******************************************************************************
  * Globals
  *****************************************************************************/
-static GObjectClass *parent_class = NULL;
 static GParamSpec *properties[PROP_LAST];
 
+G_DEFINE_TYPE_WITH_PRIVATE(PurpleContact, purple_contact,
+		PURPLE_TYPE_COUNTING_NODE);
+
 /******************************************************************************
  * API
  *****************************************************************************/
@@ -57,7 +56,8 @@
 purple_contact_compute_priority_buddy(PurpleContact *contact) {
 	PurpleBlistNode *bnode;
 	PurpleBuddy *new_priority = NULL;
-	PurpleContactPrivate *priv = PURPLE_CONTACT_GET_PRIVATE(contact);
+	PurpleContactPrivate *priv =
+			purple_contact_get_instance_private(contact);
 
 	g_return_if_fail(priv != NULL);
 
@@ -117,7 +117,8 @@
 	PurpleBlistNode *bnode;
 	char *old_alias;
 	char *new_alias = NULL;
-	PurpleContactPrivate *priv = PURPLE_CONTACT_GET_PRIVATE(contact);
+	PurpleContactPrivate *priv =
+			purple_contact_get_instance_private(contact);
 
 	g_return_if_fail(priv != NULL);
 
@@ -165,7 +166,8 @@
 
 const char *purple_contact_get_alias(PurpleContact* contact)
 {
-	PurpleContactPrivate *priv = PURPLE_CONTACT_GET_PRIVATE(contact);
+	PurpleContactPrivate *priv =
+			purple_contact_get_instance_private(contact);
 
 	g_return_val_if_fail(priv != NULL, NULL);
 
@@ -197,7 +199,8 @@
 
 void purple_contact_invalidate_priority_buddy(PurpleContact *contact)
 {
-	PurpleContactPrivate *priv = PURPLE_CONTACT_GET_PRIVATE(contact);
+	PurpleContactPrivate *priv =
+			purple_contact_get_instance_private(contact);
 
 	g_return_if_fail(priv != NULL);
 
@@ -206,7 +209,8 @@
 
 PurpleBuddy *purple_contact_get_priority_buddy(PurpleContact *contact)
 {
-	PurpleContactPrivate *priv = PURPLE_CONTACT_GET_PRIVATE(contact);
+	PurpleContactPrivate *priv =
+			purple_contact_get_instance_private(contact);
 
 	g_return_val_if_fail(priv != NULL, NULL);
 
@@ -276,7 +280,8 @@
 		GParamSpec *pspec)
 {
 	PurpleContact *contact = PURPLE_CONTACT(obj);
-	PurpleContactPrivate *priv = PURPLE_CONTACT_GET_PRIVATE(contact);
+	PurpleContactPrivate *priv =
+			purple_contact_get_instance_private(contact);
 
 	switch (param_id) {
 		case PROP_ALIAS:
@@ -293,9 +298,8 @@
 
 /* GObject initialization function */
 static void
-purple_contact_init(GTypeInstance *instance, gpointer klass)
+purple_contact_init(PurpleContact *contact)
 {
-	PurpleContact *contact = PURPLE_CONTACT(instance);
 	PurpleBlistUiOps *ops = purple_blist_get_ui_ops();
 
 	if (ops && ops->new_node)
@@ -306,9 +310,12 @@
 static void
 purple_contact_finalize(GObject *object)
 {
-	g_free(PURPLE_CONTACT_GET_PRIVATE(object)->alias);
+	PurpleContactPrivate *priv = purple_contact_get_instance_private(
+			PURPLE_CONTACT(object));
 
-	G_OBJECT_CLASS(parent_class)->finalize(object);
+	g_free(priv->alias);
+
+	G_OBJECT_CLASS(purple_contact_parent_class)->finalize(object);
 }
 
 /* Class initializer function */
@@ -316,16 +323,12 @@
 {
 	GObjectClass *obj_class = G_OBJECT_CLASS(klass);
 
-	parent_class = g_type_class_peek_parent(klass);
-
 	obj_class->finalize = purple_contact_finalize;
 
 	/* Setup properties */
 	obj_class->get_property = purple_contact_get_property;
 	obj_class->set_property = purple_contact_set_property;
 
-	g_type_class_add_private(klass, sizeof(PurpleContactPrivate));
-
 	properties[PROP_ALIAS] = g_param_spec_string(
 		"alias",
 		"Alias",
@@ -345,36 +348,6 @@
 	g_object_class_install_properties(obj_class, PROP_LAST, properties);
 }
 
-GType
-purple_contact_get_type(void)
-{
-	static GType type = 0;
-
-	if(type == 0) {
-		static const GTypeInfo info = {
-			sizeof(PurpleContactClass),
-			NULL,
-			NULL,
-			(GClassInitFunc)purple_contact_class_init,
-			NULL,
-			NULL,
-			sizeof(PurpleContact),
-			0,
-			(GInstanceInitFunc)purple_contact_init,
-			NULL,
-		};
-
-		type = g_type_register_static(
-			PURPLE_TYPE_COUNTING_NODE,
-			"PurpleContact",
-			&info,
-			0
-		);
-	}
-
-	return type;
-}
-
 PurpleContact *
 purple_contact_new(void)
 {
--- a/libpurple/countingnode.c	Tue Dec 04 03:27:04 2018 +0000
+++ b/libpurple/countingnode.c	Thu Nov 01 15:45:13 2018 -0500
@@ -24,9 +24,6 @@
 #include "glibcompat.h"
 #include "countingnode.h"
 
-#define PURPLE_COUNTING_NODE_GET_PRIVATE(obj) \
-	(G_TYPE_INSTANCE_GET_PRIVATE((obj), PURPLE_TYPE_COUNTING_NODE, PurpleCountingNodePrivate))
-
 typedef struct _PurpleCountingNodePrivate  PurpleCountingNodePrivate;
 
 /* Private data of a counting node */
@@ -50,13 +47,17 @@
 
 static GParamSpec *properties[PROP_LAST];
 
+G_DEFINE_ABSTRACT_TYPE_WITH_PRIVATE(PurpleCountingNode, purple_counting_node,
+		PURPLE_TYPE_BLIST_NODE);
+
 /******************************************************************************
  * API
  *****************************************************************************/
 int
 purple_counting_node_get_total_size(PurpleCountingNode *counter)
 {
-	PurpleCountingNodePrivate *priv = PURPLE_COUNTING_NODE_GET_PRIVATE(counter);
+	PurpleCountingNodePrivate *priv =
+			purple_counting_node_get_instance_private(counter);
 
 	g_return_val_if_fail(priv != NULL, -1);
 
@@ -66,7 +67,8 @@
 int
 purple_counting_node_get_current_size(PurpleCountingNode *counter)
 {
-	PurpleCountingNodePrivate *priv = PURPLE_COUNTING_NODE_GET_PRIVATE(counter);
+	PurpleCountingNodePrivate *priv =
+			purple_counting_node_get_instance_private(counter);
 
 	g_return_val_if_fail(priv != NULL, -1);
 
@@ -76,7 +78,8 @@
 int
 purple_counting_node_get_online_count(PurpleCountingNode *counter)
 {
-	PurpleCountingNodePrivate *priv = PURPLE_COUNTING_NODE_GET_PRIVATE(counter);
+	PurpleCountingNodePrivate *priv =
+			purple_counting_node_get_instance_private(counter);
 
 	g_return_val_if_fail(priv != NULL, -1);
 
@@ -86,7 +89,8 @@
 void
 purple_counting_node_change_total_size(PurpleCountingNode *counter, int delta)
 {
-	PurpleCountingNodePrivate *priv = PURPLE_COUNTING_NODE_GET_PRIVATE(counter);
+	PurpleCountingNodePrivate *priv =
+			purple_counting_node_get_instance_private(counter);
 
 	g_return_if_fail(priv != NULL);
 
@@ -96,7 +100,8 @@
 void
 purple_counting_node_change_current_size(PurpleCountingNode *counter, int delta)
 {
-	PurpleCountingNodePrivate *priv = PURPLE_COUNTING_NODE_GET_PRIVATE(counter);
+	PurpleCountingNodePrivate *priv =
+			purple_counting_node_get_instance_private(counter);
 
 	g_return_if_fail(priv != NULL);
 
@@ -106,7 +111,8 @@
 void
 purple_counting_node_change_online_count(PurpleCountingNode *counter, int delta)
 {
-	PurpleCountingNodePrivate *priv = PURPLE_COUNTING_NODE_GET_PRIVATE(counter);
+	PurpleCountingNodePrivate *priv =
+			purple_counting_node_get_instance_private(counter);
 
 	g_return_if_fail(priv != NULL);
 
@@ -116,7 +122,8 @@
 void
 purple_counting_node_set_total_size(PurpleCountingNode *counter, int totalsize)
 {
-	PurpleCountingNodePrivate *priv = PURPLE_COUNTING_NODE_GET_PRIVATE(counter);
+	PurpleCountingNodePrivate *priv =
+			purple_counting_node_get_instance_private(counter);
 
 	g_return_if_fail(priv != NULL);
 
@@ -128,7 +135,8 @@
 void
 purple_counting_node_set_current_size(PurpleCountingNode *counter, int currentsize)
 {
-	PurpleCountingNodePrivate *priv = PURPLE_COUNTING_NODE_GET_PRIVATE(counter);
+	PurpleCountingNodePrivate *priv =
+			purple_counting_node_get_instance_private(counter);
 
 	g_return_if_fail(priv != NULL);
 
@@ -140,7 +148,8 @@
 void
 purple_counting_node_set_online_count(PurpleCountingNode *counter, int onlinecount)
 {
-	PurpleCountingNodePrivate *priv = PURPLE_COUNTING_NODE_GET_PRIVATE(counter);
+	PurpleCountingNodePrivate *priv =
+			purple_counting_node_get_instance_private(counter);
 
 	g_return_if_fail(priv != NULL);
 
@@ -198,6 +207,11 @@
 	}
 }
 
+static void
+purple_counting_node_init(PurpleCountingNode *counter)
+{
+}
+
 /* Class initializer function */
 static void
 purple_counting_node_class_init(PurpleCountingNodeClass *klass)
@@ -208,8 +222,6 @@
 	obj_class->get_property = purple_counting_node_get_property;
 	obj_class->set_property = purple_counting_node_set_property;
 
-	g_type_class_add_private(klass, sizeof(PurpleCountingNodePrivate));
-
 	properties[PROP_TOTAL_SIZE] = g_param_spec_int(
 		"total-size",
 		"Total size",
@@ -237,29 +249,3 @@
 	g_object_class_install_properties(obj_class, PROP_LAST, properties);
 }
 
-GType
-purple_counting_node_get_type(void)
-{
-	static GType type = 0;
-
-	if(type == 0) {
-		static const GTypeInfo info = {
-			sizeof(PurpleCountingNodeClass),
-			NULL,
-			NULL,
-			(GClassInitFunc)purple_counting_node_class_init,
-			NULL,
-			NULL,
-			sizeof(PurpleCountingNode),
-			0,
-			NULL,
-			NULL,
-		};
-
-		type = g_type_register_static(PURPLE_TYPE_BLIST_NODE,
-				"PurpleCountingNode",
-				&info, G_TYPE_FLAG_ABSTRACT);
-	}
-
-	return type;
-}
--- a/libpurple/group.c	Tue Dec 04 03:27:04 2018 +0000
+++ b/libpurple/group.c	Thu Nov 01 15:45:13 2018 -0500
@@ -24,9 +24,6 @@
 #include "group.h"
 #include "internal.h" /* TODO: we need to kill this */
 
-#define PURPLE_GROUP_GET_PRIVATE(obj) \
-	(G_TYPE_INSTANCE_GET_PRIVATE((obj), PURPLE_TYPE_GROUP, PurpleGroupPrivate))
-
 typedef struct _PurpleGroupPrivate      PurpleGroupPrivate;
 
 /******************************************************************************
@@ -50,7 +47,9 @@
  * Globals
  *****************************************************************************/
 static GParamSpec *properties[GROUP_PROP_LAST];
-static GObjectClass *parent_class = NULL;
+
+G_DEFINE_TYPE_WITH_PRIVATE(PurpleGroup, purple_group,
+		PURPLE_TYPE_COUNTING_NODE);
 
 /******************************************************************************
  * Group API
@@ -104,7 +103,7 @@
 	gchar *new_name;
 	GList *moved_buddies = NULL;
 	GSList *accts;
-	PurpleGroupPrivate *priv = PURPLE_GROUP_GET_PRIVATE(source);
+	PurpleGroupPrivate *priv = purple_group_get_instance_private(source);
 
 	g_return_if_fail(priv != NULL);
 	g_return_if_fail(name != NULL);
@@ -118,7 +117,7 @@
 
 	dest = purple_blist_find_group(new_name);
 	if (dest != NULL && purple_utf8_strcasecmp(priv->name,
-				PURPLE_GROUP_GET_PRIVATE(dest)->name) != 0) {
+			purple_group_get_name(dest)) != 0) {
 		/* We're merging two groups */
 		PurpleBlistNode *prev, *child, *next;
 
@@ -235,7 +234,7 @@
 }
 
 const char *purple_group_get_name(PurpleGroup *group) {
-	PurpleGroupPrivate *priv = PURPLE_GROUP_GET_PRIVATE(group);
+	PurpleGroupPrivate *priv = purple_group_get_instance_private(group);
 
 	g_return_val_if_fail(priv != NULL, NULL);
 
@@ -251,7 +250,7 @@
                           GParamSpec *pspec)
 {
 	PurpleGroup *group = PURPLE_GROUP(obj);
-	PurpleGroupPrivate *priv = PURPLE_GROUP_GET_PRIVATE(group);
+	PurpleGroupPrivate *priv = purple_group_get_instance_private(group);
 
 	switch (param_id) {
 		case GROUP_PROP_NAME:
@@ -286,17 +285,17 @@
 
 /* GObject initialization function */
 static void
-purple_group_init(GTypeInstance *instance, gpointer klass) {
+purple_group_init(PurpleGroup *group) {
 }
 
 /* Called when done constructing */
 static void
 purple_group_constructed(GObject *object) {
 	PurpleGroup *group = PURPLE_GROUP(object);
-	PurpleGroupPrivate *priv = PURPLE_GROUP_GET_PRIVATE(group);
+	PurpleGroupPrivate *priv = purple_group_get_instance_private(group);
 	PurpleBlistUiOps *ops = purple_blist_get_ui_ops();
 
-	G_OBJECT_CLASS(parent_class)->constructed(object);
+	G_OBJECT_CLASS(purple_group_parent_class)->constructed(object);
 
 	if (ops && ops->new_node)
 		ops->new_node(PURPLE_BLIST_NODE(group));
@@ -307,9 +306,12 @@
 /* GObject finalize function */
 static void
 purple_group_finalize(GObject *object) {
-	g_free(PURPLE_GROUP_GET_PRIVATE(object)->name);
+	PurpleGroupPrivate *priv = purple_group_get_instance_private(
+			PURPLE_GROUP(object));
 
-	G_OBJECT_CLASS(parent_class)->finalize(object);
+	g_free(priv->name);
+
+	G_OBJECT_CLASS(purple_group_parent_class)->finalize(object);
 }
 
 /* Class initializer function */
@@ -317,8 +319,6 @@
 purple_group_class_init(PurpleGroupClass *klass) {
 	GObjectClass *obj_class = G_OBJECT_CLASS(klass);
 
-	parent_class = g_type_class_peek_parent(klass);
-
 	obj_class->finalize = purple_group_finalize;
 	obj_class->constructed = purple_group_constructed;
 
@@ -326,8 +326,6 @@
 	obj_class->get_property = purple_group_get_property;
 	obj_class->set_property = purple_group_set_property;
 
-	g_type_class_add_private(klass, sizeof(PurpleGroupPrivate));
-
 	properties[GROUP_PROP_NAME] = g_param_spec_string(
 		"name",
 		"Name",
@@ -339,32 +337,6 @@
 	g_object_class_install_properties(obj_class, GROUP_PROP_LAST, properties);
 }
 
-GType
-purple_group_get_type(void) {
-	static GType type = 0;
-
-	if(type == 0) {
-		static const GTypeInfo info = {
-			sizeof(PurpleGroupClass),
-			NULL,
-			NULL,
-			(GClassInitFunc)purple_group_class_init,
-			NULL,
-			NULL,
-			sizeof(PurpleGroup),
-			0,
-			(GInstanceInitFunc)purple_group_init,
-			NULL,
-		};
-
-		type = g_type_register_static(PURPLE_TYPE_COUNTING_NODE,
-				"PurpleGroup",
-				&info, 0);
-	}
-
-	return type;
-}
-
 PurpleGroup *
 purple_group_new(const char *name) {
 	PurpleGroup *group;
--- a/libpurple/memorypool.c	Tue Dec 04 03:27:04 2018 +0000
+++ b/libpurple/memorypool.c	Thu Nov 01 15:45:13 2018 -0500
@@ -24,8 +24,6 @@
 
 #include <string.h>
 
-#define PURPLE_MEMORY_POOL_GET_PRIVATE(obj) \
-	(G_TYPE_INSTANCE_GET_PRIVATE((obj), PURPLE_TYPE_MEMORY_POOL, PurpleMemoryPoolPrivate))
 #define PURPLE_MEMORY_POOL_BLOCK_PADDING (sizeof(guint64))
 #define PURPLE_MEMORY_POINTER_SHIFT(pointer, value) \
 	(gpointer)((guintptr)(pointer) + (value))
@@ -60,9 +58,10 @@
 	PROP_LAST
 };
 
-static GObjectClass *parent_class = NULL;
 static GParamSpec *properties[PROP_LAST];
 
+G_DEFINE_TYPE_WITH_PRIVATE(PurpleMemoryPool, purple_memory_pool,
+		G_TYPE_OBJECT);
 
 /*******************************************************************************
  * Memory allocation/deallocation
@@ -100,7 +99,8 @@
 static gpointer
 purple_memory_pool_alloc_impl(PurpleMemoryPool *pool, gsize size, guint alignment)
 {
-	PurpleMemoryPoolPrivate *priv = PURPLE_MEMORY_POOL_GET_PRIVATE(pool);
+	PurpleMemoryPoolPrivate *priv =
+			purple_memory_pool_get_instance_private(pool);
 	PurpleMemoryPoolBlock *blk;
 	gpointer mem = NULL;
 
@@ -163,7 +163,8 @@
 static void
 purple_memory_pool_cleanup_impl(PurpleMemoryPool *pool)
 {
-	PurpleMemoryPoolPrivate *priv = PURPLE_MEMORY_POOL_GET_PRIVATE(pool);
+	PurpleMemoryPoolPrivate *priv =
+			purple_memory_pool_get_instance_private(pool);
 	PurpleMemoryPoolBlock *blk;
 
 	g_return_if_fail(priv != NULL);
@@ -186,7 +187,8 @@
 void
 purple_memory_pool_set_block_size(PurpleMemoryPool *pool, gulong block_size)
 {
-	PurpleMemoryPoolPrivate *priv = PURPLE_MEMORY_POOL_GET_PRIVATE(pool);
+	PurpleMemoryPoolPrivate *priv =
+			purple_memory_pool_get_instance_private(pool);
 
 	g_return_if_fail(priv != NULL);
 
@@ -269,10 +271,10 @@
 }
 
 static void
-purple_memory_pool_init(GTypeInstance *instance, gpointer klass)
+purple_memory_pool_init(PurpleMemoryPool *pool)
 {
-	PurpleMemoryPool *pool = PURPLE_MEMORY_POOL(instance);
-	PurpleMemoryPoolPrivate *priv = PURPLE_MEMORY_POOL_GET_PRIVATE(pool);
+	PurpleMemoryPoolPrivate *priv =
+			purple_memory_pool_get_instance_private(pool);
 
 	priv->disabled = PURPLE_MEMORY_POOL_DISABLED;
 }
@@ -282,7 +284,7 @@
 {
 	purple_memory_pool_cleanup(PURPLE_MEMORY_POOL(obj));
 
-	G_OBJECT_CLASS(parent_class)->finalize(obj);
+	G_OBJECT_CLASS(purple_memory_pool_parent_class)->finalize(obj);
 }
 
 static void
@@ -290,7 +292,8 @@
 	GParamSpec *pspec)
 {
 	PurpleMemoryPool *pool = PURPLE_MEMORY_POOL(obj);
-	PurpleMemoryPoolPrivate *priv = PURPLE_MEMORY_POOL_GET_PRIVATE(pool);
+	PurpleMemoryPoolPrivate *priv =
+			purple_memory_pool_get_instance_private(pool);
 
 	switch (param_id) {
 		case PROP_BLOCK_SIZE:
@@ -306,7 +309,8 @@
 	const GValue *value, GParamSpec *pspec)
 {
 	PurpleMemoryPool *pool = PURPLE_MEMORY_POOL(obj);
-	PurpleMemoryPoolPrivate *priv = PURPLE_MEMORY_POOL_GET_PRIVATE(pool);
+	PurpleMemoryPoolPrivate *priv =
+			purple_memory_pool_get_instance_private(pool);
 
 	switch (param_id) {
 		case PROP_BLOCK_SIZE:
@@ -322,10 +326,6 @@
 {
 	GObjectClass *obj_class = G_OBJECT_CLASS(klass);
 
-	parent_class = g_type_class_peek_parent(klass);
-
-	g_type_class_add_private(klass, sizeof(PurpleMemoryPoolPrivate));
-
 	obj_class->finalize = purple_memory_pool_finalize;
 	obj_class->get_property = purple_memory_pool_get_property;
 	obj_class->set_property = purple_memory_pool_set_property;
@@ -341,26 +341,6 @@
 	g_object_class_install_properties(obj_class, PROP_LAST, properties);
 }
 
-GType
-purple_memory_pool_get_type(void)
-{
-	static GType type = 0;
-
-	if (G_UNLIKELY(type == 0)) {
-		static const GTypeInfo info = {
-			.class_size = sizeof(PurpleMemoryPoolClass),
-			.class_init = (GClassInitFunc)purple_memory_pool_class_init,
-			.instance_size = sizeof(PurpleMemoryPool),
-			.instance_init = (GInstanceInitFunc)purple_memory_pool_init
-		};
-
-		type = g_type_register_static(G_TYPE_OBJECT,
-			"PurpleMemoryPool", &info, 0);
-	}
-
-	return type;
-}
-
 gchar *
 purple_memory_pool_strdup(PurpleMemoryPool *pool, const gchar *str)
 {
--- a/libpurple/roomlist.c	Tue Dec 04 03:27:04 2018 +0000
+++ b/libpurple/roomlist.c	Thu Nov 01 15:45:13 2018 -0500
@@ -28,9 +28,6 @@
 #include "roomlist.h"
 #include "server.h"
 
-#define PURPLE_ROOMLIST_GET_PRIVATE(obj) \
-	(G_TYPE_INSTANCE_GET_PRIVATE((obj), PURPLE_TYPE_ROOMLIST, PurpleRoomlistPrivate))
-
 typedef struct _PurpleRoomlistPrivate  PurpleRoomlistPrivate;
 
 /*
@@ -77,10 +74,11 @@
 	PROP_LAST
 };
 
-static GObjectClass *parent_class;
 static GParamSpec *properties[PROP_LAST];
 static PurpleRoomlistUiOps *ops = NULL;
 
+G_DEFINE_TYPE_WITH_PRIVATE(PurpleRoomlist, purple_roomlist, G_TYPE_OBJECT);
+
 static void purple_roomlist_field_free(PurpleRoomlistField *f);
 static void purple_roomlist_room_destroy(PurpleRoomlist *list, PurpleRoomlistRoom *r);
 
@@ -96,7 +94,8 @@
 
 PurpleAccount *purple_roomlist_get_account(PurpleRoomlist *list)
 {
-	PurpleRoomlistPrivate *priv = PURPLE_ROOMLIST_GET_PRIVATE(list);
+	PurpleRoomlistPrivate *priv =
+			purple_roomlist_get_instance_private(list);
 
 	g_return_val_if_fail(priv != NULL, NULL);
 
@@ -105,7 +104,8 @@
 
 void purple_roomlist_set_fields(PurpleRoomlist *list, GList *fields)
 {
-	PurpleRoomlistPrivate *priv = PURPLE_ROOMLIST_GET_PRIVATE(list);
+	PurpleRoomlistPrivate *priv =
+			purple_roomlist_get_instance_private(list);
 
 	g_return_if_fail(priv != NULL);
 
@@ -119,7 +119,8 @@
 
 void purple_roomlist_set_in_progress(PurpleRoomlist *list, gboolean in_progress)
 {
-	PurpleRoomlistPrivate *priv = PURPLE_ROOMLIST_GET_PRIVATE(list);
+	PurpleRoomlistPrivate *priv =
+			purple_roomlist_get_instance_private(list);
 
 	g_return_if_fail(priv != NULL);
 
@@ -133,7 +134,8 @@
 
 gboolean purple_roomlist_get_in_progress(PurpleRoomlist *list)
 {
-	PurpleRoomlistPrivate *priv = PURPLE_ROOMLIST_GET_PRIVATE(list);
+	PurpleRoomlistPrivate *priv =
+			purple_roomlist_get_instance_private(list);
 
 	g_return_val_if_fail(priv != NULL, FALSE);
 
@@ -142,7 +144,8 @@
 
 void purple_roomlist_room_add(PurpleRoomlist *list, PurpleRoomlistRoom *room)
 {
-	PurpleRoomlistPrivate *priv = PURPLE_ROOMLIST_GET_PRIVATE(list);
+	PurpleRoomlistPrivate *priv =
+			purple_roomlist_get_instance_private(list);
 
 	g_return_if_fail(priv != NULL);
 	g_return_if_fail(room != NULL);
@@ -170,7 +173,8 @@
 
 void purple_roomlist_cancel_get_list(PurpleRoomlist *list)
 {
-	PurpleRoomlistPrivate *priv = PURPLE_ROOMLIST_GET_PRIVATE(list);
+	PurpleRoomlistPrivate *priv =
+			purple_roomlist_get_instance_private(list);
 	PurpleProtocol *protocol = NULL;
 	PurpleConnection *gc;
 
@@ -189,7 +193,8 @@
 
 void purple_roomlist_expand_category(PurpleRoomlist *list, PurpleRoomlistRoom *category)
 {
-	PurpleRoomlistPrivate *priv = PURPLE_ROOMLIST_GET_PRIVATE(list);
+	PurpleRoomlistPrivate *priv =
+			purple_roomlist_get_instance_private(list);
 	PurpleProtocol *protocol = NULL;
 	PurpleConnection *gc;
 
@@ -209,7 +214,8 @@
 
 GList * purple_roomlist_get_fields(PurpleRoomlist *list)
 {
-	PurpleRoomlistPrivate *priv = PURPLE_ROOMLIST_GET_PRIVATE(list);
+	PurpleRoomlistPrivate *priv =
+			purple_roomlist_get_instance_private(list);
 
 	g_return_val_if_fail(priv != NULL, NULL);
 
@@ -218,7 +224,8 @@
 
 gpointer purple_roomlist_get_protocol_data(PurpleRoomlist *list)
 {
-	PurpleRoomlistPrivate *priv = PURPLE_ROOMLIST_GET_PRIVATE(list);
+	PurpleRoomlistPrivate *priv =
+			purple_roomlist_get_instance_private(list);
 
 	g_return_val_if_fail(priv != NULL, NULL);
 
@@ -227,7 +234,8 @@
 
 void purple_roomlist_set_protocol_data(PurpleRoomlist *list, gpointer proto_data)
 {
-	PurpleRoomlistPrivate *priv = PURPLE_ROOMLIST_GET_PRIVATE(list);
+	PurpleRoomlistPrivate *priv =
+			purple_roomlist_get_instance_private(list);
 
 	g_return_if_fail(priv != NULL);
 
@@ -258,7 +266,8 @@
 		GParamSpec *pspec)
 {
 	PurpleRoomlist *list = PURPLE_ROOMLIST(obj);
-	PurpleRoomlistPrivate *priv = PURPLE_ROOMLIST_GET_PRIVATE(list);
+	PurpleRoomlistPrivate *priv =
+			purple_roomlist_get_instance_private(list);
 
 	switch (param_id) {
 		case PROP_ACCOUNT:
@@ -299,13 +308,18 @@
 	}
 }
 
+static void
+purple_roomlist_init(PurpleRoomlist *list)
+{
+}
+
 /* Called when done constructing */
 static void
 purple_roomlist_constructed(GObject *object)
 {
 	PurpleRoomlist *list = PURPLE_ROOMLIST(object);
 
-	parent_class->constructed(object);
+	G_OBJECT_CLASS(purple_roomlist_parent_class)->constructed(object);
 
 	if (ops && ops->create)
 		ops->create(list);
@@ -316,7 +330,8 @@
 purple_roomlist_finalize(GObject *object)
 {
 	PurpleRoomlist *list = PURPLE_ROOMLIST(object);
-	PurpleRoomlistPrivate *priv = PURPLE_ROOMLIST_GET_PRIVATE(list);
+	PurpleRoomlistPrivate *priv =
+			purple_roomlist_get_instance_private(list);
 	GList *l;
 
 	purple_debug_misc("roomlist", "destroying list %p\n", list);
@@ -333,7 +348,7 @@
 	g_list_foreach(priv->fields, (GFunc)purple_roomlist_field_free, NULL);
 	g_list_free(priv->fields);
 
-	parent_class->finalize(object);
+	G_OBJECT_CLASS(purple_roomlist_parent_class)->finalize(object);
 }
 
 /* Class initializer function */
@@ -342,8 +357,6 @@
 {
 	GObjectClass *obj_class = G_OBJECT_CLASS(klass);
 
-	parent_class = g_type_class_peek_parent(klass);
-
 	obj_class->finalize = purple_roomlist_finalize;
 	obj_class->constructed = purple_roomlist_constructed;
 
@@ -351,8 +364,6 @@
 	obj_class->get_property = purple_roomlist_get_property;
 	obj_class->set_property = purple_roomlist_set_property;
 
-	g_type_class_add_private(klass, sizeof(PurpleRoomlistPrivate));
-
 	properties[PROP_ACCOUNT] = g_param_spec_object("account", "Account",
 				"The account for the room list.",
 				PURPLE_TYPE_ACCOUNT,
@@ -371,32 +382,6 @@
 	g_object_class_install_properties(obj_class, PROP_LAST, properties);
 }
 
-GType
-purple_roomlist_get_type(void)
-{
-	static GType type = 0;
-
-	if(type == 0) {
-		static const GTypeInfo info = {
-			sizeof(PurpleRoomlistClass),
-			NULL,
-			NULL,
-			(GClassInitFunc)purple_roomlist_class_init,
-			NULL,
-			NULL,
-			sizeof(PurpleRoomlist),
-			0,
-			NULL,
-			NULL,
-		};
-
-		type = g_type_register_static(G_TYPE_OBJECT, "PurpleRoomlist",
-				&info, 0);
-	}
-
-	return type;
-}
-
 PurpleRoomlist *purple_roomlist_new(PurpleAccount *account)
 {
 	PurpleRoomlist *list;
@@ -442,7 +427,8 @@
 
 void purple_roomlist_room_add_field(PurpleRoomlist *list, PurpleRoomlistRoom *room, gconstpointer field)
 {
-	PurpleRoomlistPrivate *priv = PURPLE_ROOMLIST_GET_PRIVATE(list);
+	PurpleRoomlistPrivate *priv =
+			purple_roomlist_get_instance_private(list);
 	PurpleRoomlistField *f;
 
 	g_return_if_fail(priv != NULL);
@@ -476,7 +462,8 @@
 
 void purple_roomlist_room_join(PurpleRoomlist *list, PurpleRoomlistRoom *room)
 {
-	PurpleRoomlistPrivate *priv = PURPLE_ROOMLIST_GET_PRIVATE(list);
+	PurpleRoomlistPrivate *priv =
+			purple_roomlist_get_instance_private(list);
 	GHashTable *components;
 	GList *l, *j;
 	PurpleConnection *gc;
@@ -538,7 +525,8 @@
 
 static void purple_roomlist_room_destroy(PurpleRoomlist *list, PurpleRoomlistRoom *r)
 {
-	PurpleRoomlistPrivate *priv = PURPLE_ROOMLIST_GET_PRIVATE(list);
+	PurpleRoomlistPrivate *priv =
+			purple_roomlist_get_instance_private(list);
 	GList *l, *j;
 
 	for (l = priv->fields, j = r->fields; l && j; l = l->next, j = j->next) {
--- a/libpurple/sound-theme.c	Tue Dec 04 03:27:04 2018 +0000
+++ b/libpurple/sound-theme.c	Thu Nov 01 15:45:13 2018 -0500
@@ -23,9 +23,6 @@
 #include "internal.h"
 #include "sound-theme.h"
 
-#define PURPLE_SOUND_THEME_GET_PRIVATE(Gobject) \
-	(G_TYPE_INSTANCE_GET_PRIVATE((Gobject), PURPLE_TYPE_SOUND_THEME, PurpleSoundThemePrivate))
-
 /******************************************************************************
  * Structs
  *****************************************************************************/
@@ -39,7 +36,8 @@
  * Globals
  *****************************************************************************/
 
-static GObjectClass *parent_class = NULL;
+G_DEFINE_TYPE_WITH_PRIVATE(PurpleSoundTheme, purple_sound_theme,
+		PURPLE_TYPE_THEME);
 
 /******************************************************************************
  * Enums
@@ -50,12 +48,11 @@
  *****************************************************************************/
 
 static void
-purple_sound_theme_init(GTypeInstance *instance,
-		gpointer klass)
+purple_sound_theme_init(PurpleSoundTheme *theme)
 {
 	PurpleSoundThemePrivate *priv;
 
-	priv = PURPLE_SOUND_THEME_GET_PRIVATE(instance);
+	priv = purple_sound_theme_get_instance_private(theme);
 
 	priv->sound_files = g_hash_table_new_full(g_str_hash,
 			g_str_equal, g_free, g_free);
@@ -66,11 +63,11 @@
 {
 	PurpleSoundThemePrivate *priv;
 
-	priv = PURPLE_SOUND_THEME_GET_PRIVATE(obj);
+	priv = purple_sound_theme_get_instance_private(PURPLE_SOUND_THEME(obj));
 
 	g_hash_table_destroy(priv->sound_files);
 
-	parent_class->finalize(obj);
+	G_OBJECT_CLASS(purple_sound_theme_parent_class)->finalize(obj);
 }
 
 static void
@@ -78,36 +75,9 @@
 {
 	GObjectClass *obj_class = G_OBJECT_CLASS(klass);
 
-	parent_class = g_type_class_peek_parent(klass);
-
-	g_type_class_add_private(klass, sizeof(PurpleSoundThemePrivate));
-
 	obj_class->finalize = purple_sound_theme_finalize;
 }
 
-GType
-purple_sound_theme_get_type(void)
-{
-	static GType type = 0;
-	if (type == 0) {
-		static const GTypeInfo info = {
-			sizeof(PurpleSoundThemeClass),
-			NULL, /* base_init */
-			NULL, /* base_finalize */
-			(GClassInitFunc)purple_sound_theme_class_init, /* class_init */
-			NULL, /* class_finalize */
-			NULL, /* class_data */
-			sizeof(PurpleSoundTheme),
-			0, /* n_preallocs */
-			purple_sound_theme_init, /* instance_init */
-			NULL, /* value table */
-		};
-		type = g_type_register_static(PURPLE_TYPE_THEME,
-				"PurpleSoundTheme", &info, 0);
-	}
-	return type;
-}
-
 /*****************************************************************************
  * Public API functions
  *****************************************************************************/
@@ -120,7 +90,7 @@
 
 	g_return_val_if_fail(PURPLE_IS_SOUND_THEME(theme), NULL);
 
-	priv = PURPLE_SOUND_THEME_GET_PRIVATE(theme);
+	priv = purple_sound_theme_get_instance_private(theme);
 
 	return g_hash_table_lookup(priv->sound_files, event);
 }
@@ -148,7 +118,7 @@
 	PurpleSoundThemePrivate *priv;
 	g_return_if_fail(PURPLE_IS_SOUND_THEME(theme));
 
-	priv = PURPLE_SOUND_THEME_GET_PRIVATE(theme);
+	priv = purple_sound_theme_get_instance_private(theme);
 
 	if (filename != NULL)
 		g_hash_table_replace(priv->sound_files,
--- a/libpurple/theme-loader.c	Tue Dec 04 03:27:04 2018 +0000
+++ b/libpurple/theme-loader.c	Thu Nov 01 15:45:13 2018 -0500
@@ -24,9 +24,6 @@
 #include "glibcompat.h"
 #include "theme-loader.h"
 
-#define PURPLE_THEME_LOADER_GET_PRIVATE(PurpleThemeLoader) \
-	(G_TYPE_INSTANCE_GET_PRIVATE((PurpleThemeLoader), PURPLE_TYPE_THEME_LOADER, PurpleThemeLoaderPrivate))
-
 void purple_theme_loader_set_type_string(PurpleThemeLoader *loader, const gchar *type);
 
 /******************************************************************************
@@ -50,9 +47,11 @@
  * Globals
  *****************************************************************************/
 
-static GObjectClass *parent_class = NULL;
 static GParamSpec *properties[PROP_LAST];
 
+G_DEFINE_ABSTRACT_TYPE_WITH_PRIVATE(PurpleThemeLoader, purple_theme_loader,
+		G_TYPE_OBJECT);
+
 /******************************************************************************
  * GObject Stuff                                                              *
  *****************************************************************************/
@@ -105,14 +104,20 @@
 }
 
 static void
+purple_theme_loader_init(PurpleThemeLoader *loader)
+{
+}
+
+static void
 purple_theme_loader_finalize(GObject *obj)
 {
 	PurpleThemeLoader *loader = PURPLE_THEME_LOADER(obj);
-	PurpleThemeLoaderPrivate *priv = PURPLE_THEME_LOADER_GET_PRIVATE(loader);
+	PurpleThemeLoaderPrivate *priv =
+			purple_theme_loader_get_instance_private(loader);
 
 	g_free(priv->type);
 
-	parent_class->finalize(obj);
+	G_OBJECT_CLASS(purple_theme_loader_parent_class)->finalize(obj);
 }
 
 static void
@@ -120,10 +125,6 @@
 {
 	GObjectClass *obj_class = G_OBJECT_CLASS(klass);
 
-	parent_class = g_type_class_peek_parent(klass);
-
-	g_type_class_add_private(klass, sizeof(PurpleThemeLoaderPrivate));
-
 	obj_class->get_property = purple_theme_loader_get_property;
 	obj_class->set_property = purple_theme_loader_set_property;
 	obj_class->finalize = purple_theme_loader_finalize;
@@ -138,29 +139,6 @@
 	g_object_class_install_properties(obj_class, PROP_LAST, properties);
 }
 
-GType
-purple_theme_loader_get_type(void)
-{
-	static GType type = 0;
-	if (type == 0) {
-		static const GTypeInfo info = {
-			sizeof(PurpleThemeLoaderClass),
-			NULL, /* base_init */
-			NULL, /* base_finalize */
-			(GClassInitFunc)purple_theme_loader_class_init, /* class_init */
-			NULL, /* class_finalize */
-			NULL, /* class_data */
-			sizeof(PurpleThemeLoader),
-			0, /* n_preallocs */
-			NULL, /* instance_init */
-			NULL, /* value table */
-		};
-		type = g_type_register_static(G_TYPE_OBJECT,
-				"PurpleThemeLoader", &info, G_TYPE_FLAG_ABSTRACT);
-	}
-	return type;
-}
-
 /*****************************************************************************
  * Public API functions
  *****************************************************************************/
@@ -172,7 +150,7 @@
 
 	g_return_val_if_fail(PURPLE_IS_THEME_LOADER(theme_loader), NULL);
 
-	priv = PURPLE_THEME_LOADER_GET_PRIVATE(theme_loader);
+	priv = purple_theme_loader_get_instance_private(theme_loader);
 	return priv->type;
 }
 
@@ -184,7 +162,7 @@
 
 	g_return_if_fail(PURPLE_IS_THEME_LOADER(loader));
 
-	priv = PURPLE_THEME_LOADER_GET_PRIVATE(loader);
+	priv = purple_theme_loader_get_instance_private(loader);
 
 	g_free(priv->type);
 	priv->type = g_strdup(type);
--- a/libpurple/theme.c	Tue Dec 04 03:27:04 2018 +0000
+++ b/libpurple/theme.c	Thu Nov 01 15:45:13 2018 -0500
@@ -25,9 +25,6 @@
 #include "theme.h"
 #include "util.h"
 
-#define PURPLE_THEME_GET_PRIVATE(PurpleTheme) \
-	(G_TYPE_INSTANCE_GET_PRIVATE((PurpleTheme), PURPLE_TYPE_THEME, PurpleThemePrivate))
-
 void purple_theme_set_type_string(PurpleTheme *theme, const gchar *type);
 
 /******************************************************************************
@@ -62,9 +59,10 @@
  * Globals
  *****************************************************************************/
 
-static GObjectClass *parent_class = NULL;
 static GParamSpec *properties[PROP_LAST];
 
+G_DEFINE_ABSTRACT_TYPE_WITH_PRIVATE(PurpleTheme, purple_theme, G_TYPE_OBJECT);
+
 /******************************************************************************
  * GObject Stuff
  *****************************************************************************/
@@ -132,10 +130,15 @@
 }
 
 static void
+purple_theme_init(PurpleTheme *theme)
+{
+}
+
+static void
 purple_theme_finalize(GObject *obj)
 {
 	PurpleTheme *theme = PURPLE_THEME(obj);
-	PurpleThemePrivate *priv = PURPLE_THEME_GET_PRIVATE(theme);
+	PurpleThemePrivate *priv = purple_theme_get_instance_private(theme);
 
 	g_free(priv->name);
 	g_free(priv->description);
@@ -144,7 +147,7 @@
 	g_free(priv->dir);
 	g_free(priv->img);
 
-	G_OBJECT_CLASS (parent_class)->finalize (obj);
+	G_OBJECT_CLASS(purple_theme_parent_class)->finalize(obj);
 }
 
 static void
@@ -152,10 +155,6 @@
 {
 	GObjectClass *obj_class = G_OBJECT_CLASS(klass);
 
-	parent_class = g_type_class_peek_parent(klass);
-
-	g_type_class_add_private(klass, sizeof(PurpleThemePrivate));
-
 	obj_class->get_property = purple_theme_get_property;
 	obj_class->set_property = purple_theme_set_property;
 	obj_class->finalize = purple_theme_finalize;
@@ -201,30 +200,6 @@
 	g_object_class_install_properties(obj_class, PROP_LAST, properties);
 }
 
-
-GType
-purple_theme_get_type(void)
-{
-	static GType type = 0;
-	if (type == 0) {
-		static const GTypeInfo info = {
-			sizeof(PurpleThemeClass),
-			NULL, /* base_init */
-			NULL, /* base_finalize */
-			(GClassInitFunc)purple_theme_class_init, /* class_init */
-			NULL, /* class_finalize */
-			NULL, /* class_data */
-			sizeof(PurpleTheme),
-			0, /* n_preallocs */
-			NULL, /* instance_init */
-			NULL, /* value table */
-		};
-		type = g_type_register_static (G_TYPE_OBJECT,
-				"PurpleTheme", &info, G_TYPE_FLAG_ABSTRACT);
-	}
-	return type;
-}
-
 /******************************************************************************
  * Helper Functions
  *****************************************************************************/
@@ -252,7 +227,7 @@
 
 	g_return_val_if_fail(PURPLE_IS_THEME(theme), NULL);
 
-	priv = PURPLE_THEME_GET_PRIVATE(theme);
+	priv = purple_theme_get_instance_private(theme);
 	return priv->name;
 }
 
@@ -263,7 +238,7 @@
 
 	g_return_if_fail(PURPLE_IS_THEME(theme));
 
-	priv = PURPLE_THEME_GET_PRIVATE(theme);
+	priv = purple_theme_get_instance_private(theme);
 
 	g_free(priv->name);
 	priv->name = theme_clean_text(name);
@@ -278,7 +253,7 @@
 
 	g_return_val_if_fail(PURPLE_IS_THEME(theme), NULL);
 
-	priv = PURPLE_THEME_GET_PRIVATE(theme);
+	priv = purple_theme_get_instance_private(theme);
 	return priv->description;
 }
 
@@ -289,7 +264,7 @@
 
 	g_return_if_fail(PURPLE_IS_THEME(theme));
 
-	priv = PURPLE_THEME_GET_PRIVATE(theme);
+	priv = purple_theme_get_instance_private(theme);
 
 	g_free(priv->description);
 	priv->description = theme_clean_text(description);
@@ -304,7 +279,7 @@
 
 	g_return_val_if_fail(PURPLE_IS_THEME(theme), NULL);
 
-	priv = PURPLE_THEME_GET_PRIVATE(theme);
+	priv = purple_theme_get_instance_private(theme);
 	return priv->author;
 }
 
@@ -315,7 +290,7 @@
 
 	g_return_if_fail(PURPLE_IS_THEME(theme));
 
-	priv = PURPLE_THEME_GET_PRIVATE(theme);
+	priv = purple_theme_get_instance_private(theme);
 
 	g_free(priv->author);
 	priv->author = theme_clean_text(author);
@@ -330,7 +305,7 @@
 
 	g_return_val_if_fail(PURPLE_IS_THEME(theme), NULL);
 
-	priv = PURPLE_THEME_GET_PRIVATE(theme);
+	priv = purple_theme_get_instance_private(theme);
 	return priv->type;
 }
 
@@ -342,7 +317,7 @@
 
 	g_return_if_fail(PURPLE_IS_THEME(theme));
 
-	priv = PURPLE_THEME_GET_PRIVATE(theme);
+	priv = purple_theme_get_instance_private(theme);
 
 	g_free(priv->type);
 	priv->type = g_strdup(type);
@@ -357,7 +332,7 @@
 
 	g_return_val_if_fail(PURPLE_IS_THEME(theme), NULL);
 
-	priv = PURPLE_THEME_GET_PRIVATE(theme);
+	priv = purple_theme_get_instance_private(theme);
 	return priv->dir;
 }
 
@@ -368,7 +343,7 @@
 
 	g_return_if_fail(PURPLE_IS_THEME(theme));
 
-	priv = PURPLE_THEME_GET_PRIVATE(theme);
+	priv = purple_theme_get_instance_private(theme);
 
 	g_free(priv->dir);
 	priv->dir = g_strdup(dir);
@@ -383,7 +358,7 @@
 
 	g_return_val_if_fail(PURPLE_IS_THEME(theme), NULL);
 
-	priv = PURPLE_THEME_GET_PRIVATE(theme);
+	priv = purple_theme_get_instance_private(theme);
 
 	return priv->img;
 }
@@ -406,7 +381,7 @@
 
 	g_return_if_fail(PURPLE_IS_THEME(theme));
 
-	priv = PURPLE_THEME_GET_PRIVATE(theme);
+	priv = purple_theme_get_instance_private(theme);
 
 	g_free(priv->img);
 	priv->img = g_strdup(img);
--- a/libpurple/trie.c	Tue Dec 04 03:27:04 2018 +0000
+++ b/libpurple/trie.c	Thu Nov 01 15:45:13 2018 -0500
@@ -27,9 +27,6 @@
 #include "debug.h"
 #include "memorypool.h"
 
-#define PURPLE_TRIE_GET_PRIVATE(obj) \
-	(G_TYPE_INSTANCE_GET_PRIVATE((obj), PURPLE_TYPE_TRIE, PurpleTriePrivate))
-
 /* A single internal (that don't have any children) consists
  * of 256 + 4 pointers. That's 1040 bytes on 32-bit machine or 2080 bytes
  * on 64-bit.
@@ -106,9 +103,9 @@
 	PROP_LAST
 };
 
-static GObjectClass *parent_class = NULL;
 static GParamSpec *properties[PROP_LAST];
 
+G_DEFINE_TYPE_WITH_PRIVATE(PurpleTrie, purple_trie, G_TYPE_OBJECT);
 
 /*******************************************************************************
  * Records list
@@ -198,7 +195,7 @@
 static void
 purple_trie_states_cleanup(PurpleTrie *trie)
 {
-	PurpleTriePrivate *priv = PURPLE_TRIE_GET_PRIVATE(trie);
+	PurpleTriePrivate *priv = purple_trie_get_instance_private(trie);
 
 	g_return_if_fail(priv != NULL);
 
@@ -212,7 +209,7 @@
 static PurpleTrieState *
 purple_trie_state_new(PurpleTrie *trie, PurpleTrieState *parent, guchar character)
 {
-	PurpleTriePrivate *priv = PURPLE_TRIE_GET_PRIVATE(trie);
+	PurpleTriePrivate *priv = purple_trie_get_instance_private(trie);
 	PurpleTrieState *state;
 
 	g_return_val_if_fail(priv != NULL, NULL);
@@ -247,7 +244,7 @@
 static gboolean
 purple_trie_states_build(PurpleTrie *trie)
 {
-	PurpleTriePrivate *priv = PURPLE_TRIE_GET_PRIVATE(trie);
+	PurpleTriePrivate *priv = purple_trie_get_instance_private(trie);
 	PurpleTrieState *root;
 	PurpleMemoryPool *reclist_mpool;
 	PurpleTrieRecordList *reclist, *it;
@@ -436,7 +433,7 @@
 purple_trie_replace(PurpleTrie *trie, const gchar *src,
 	PurpleTrieReplaceCb replace_cb, gpointer user_data)
 {
-	PurpleTriePrivate *priv = PURPLE_TRIE_GET_PRIVATE(trie);
+	PurpleTriePrivate *priv = purple_trie_get_instance_private(trie);
 	PurpleTrieMachine machine;
 	GString *out;
 	gsize i;
@@ -495,7 +492,8 @@
 	machines = g_new(PurpleTrieMachine, tries_count);
 	for (i = 0; i < tries_count; i++, tries = tries->next) {
 		PurpleTrie *trie = tries->data;
-		PurpleTriePrivate *priv = PURPLE_TRIE_GET_PRIVATE(trie);
+		PurpleTriePrivate *priv =
+				purple_trie_get_instance_private(trie);
 
 		if (priv == NULL) {
 			g_warn_if_reached();
@@ -549,7 +547,7 @@
 purple_trie_find(PurpleTrie *trie, const gchar *src,
 	PurpleTrieFindCb find_cb, gpointer user_data)
 {
-	PurpleTriePrivate *priv = PURPLE_TRIE_GET_PRIVATE(trie);
+	PurpleTriePrivate *priv = purple_trie_get_instance_private(trie);
 	PurpleTrieMachine machine;
 	gulong found_count = 0;
 	gsize i;
@@ -603,7 +601,8 @@
 	machines = g_new(PurpleTrieMachine, tries_count);
 	for (i = 0; i < tries_count; i++, tries = tries->next) {
 		PurpleTrie *trie = tries->data;
-		PurpleTriePrivate *priv = PURPLE_TRIE_GET_PRIVATE(trie);
+		PurpleTriePrivate *priv =
+				purple_trie_get_instance_private(trie);
 
 		if (priv == NULL) {
 			g_warn_if_reached();
@@ -659,7 +658,7 @@
 gboolean
 purple_trie_add(PurpleTrie *trie, const gchar *word, gpointer data)
 {
-	PurpleTriePrivate *priv = PURPLE_TRIE_GET_PRIVATE(trie);
+	PurpleTriePrivate *priv = purple_trie_get_instance_private(trie);
 	PurpleTrieRecord *rec;
 
 	g_return_val_if_fail(priv != NULL, FALSE);
@@ -694,7 +693,7 @@
 void
 purple_trie_remove(PurpleTrie *trie, const gchar *word)
 {
-	PurpleTriePrivate *priv = PURPLE_TRIE_GET_PRIVATE(trie);
+	PurpleTriePrivate *priv = purple_trie_get_instance_private(trie);
 	PurpleTrieRecordList *it;
 
 	g_return_if_fail(priv != NULL);
@@ -720,7 +719,7 @@
 guint
 purple_trie_get_size(PurpleTrie *trie)
 {
-	PurpleTriePrivate *priv = PURPLE_TRIE_GET_PRIVATE(trie);
+	PurpleTriePrivate *priv = purple_trie_get_instance_private(trie);
 
 	g_return_val_if_fail(priv != NULL, 0);
 
@@ -735,7 +734,7 @@
 gboolean
 purple_trie_get_reset_on_match(PurpleTrie *trie)
 {
-	PurpleTriePrivate *priv = PURPLE_TRIE_GET_PRIVATE(trie);
+	PurpleTriePrivate *priv = purple_trie_get_instance_private(trie);
 
 	g_return_val_if_fail(priv, FALSE);
 
@@ -745,7 +744,7 @@
 void
 purple_trie_set_reset_on_match(PurpleTrie *trie, gboolean reset)
 {
-	PurpleTriePrivate *priv = PURPLE_TRIE_GET_PRIVATE(trie);
+	PurpleTriePrivate *priv = purple_trie_get_instance_private(trie);
 
 	g_return_if_fail(priv);
 
@@ -764,10 +763,9 @@
 }
 
 static void
-purple_trie_init(GTypeInstance *instance, gpointer klass)
+purple_trie_init(PurpleTrie *trie)
 {
-	PurpleTrie *trie = PURPLE_TRIE(instance);
-	PurpleTriePrivate *priv = PURPLE_TRIE_GET_PRIVATE(trie);
+	PurpleTriePrivate *priv = purple_trie_get_instance_private(trie);
 
 	priv->records_obj_mempool = purple_memory_pool_new();
 	priv->records_str_mempool = purple_memory_pool_new();
@@ -781,14 +779,15 @@
 static void
 purple_trie_finalize(GObject *obj)
 {
-	PurpleTriePrivate *priv = PURPLE_TRIE_GET_PRIVATE(obj);
+	PurpleTriePrivate *priv =
+			purple_trie_get_instance_private(PURPLE_TRIE(obj));
 
 	g_hash_table_destroy(priv->records_map);
 	g_object_unref(priv->records_obj_mempool);
 	g_object_unref(priv->records_str_mempool);
 	g_object_unref(priv->states_mempool);
 
-	G_OBJECT_CLASS(parent_class)->finalize(obj);
+	G_OBJECT_CLASS(purple_trie_parent_class)->finalize(obj);
 }
 
 static void
@@ -796,7 +795,7 @@
 	GParamSpec *pspec)
 {
 	PurpleTrie *trie = PURPLE_TRIE(obj);
-	PurpleTriePrivate *priv = PURPLE_TRIE_GET_PRIVATE(trie);
+	PurpleTriePrivate *priv = purple_trie_get_instance_private(trie);
 
 	switch (param_id) {
 		case PROP_RESET_ON_MATCH:
@@ -812,7 +811,7 @@
 	const GValue *value, GParamSpec *pspec)
 {
 	PurpleTrie *trie = PURPLE_TRIE(obj);
-	PurpleTriePrivate *priv = PURPLE_TRIE_GET_PRIVATE(trie);
+	PurpleTriePrivate *priv = purple_trie_get_instance_private(trie);
 
 	switch (param_id) {
 		case PROP_RESET_ON_MATCH:
@@ -828,10 +827,6 @@
 {
 	GObjectClass *obj_class = G_OBJECT_CLASS(klass);
 
-	parent_class = g_type_class_peek_parent(klass);
-
-	g_type_class_add_private(klass, sizeof(PurpleTriePrivate));
-
 	obj_class->finalize = purple_trie_finalize;
 	obj_class->get_property = purple_trie_get_property;
 	obj_class->set_property = purple_trie_set_property;
@@ -847,23 +842,3 @@
 
 	g_object_class_install_properties(obj_class, PROP_LAST, properties);
 }
-
-GType
-purple_trie_get_type(void)
-{
-	static GType type = 0;
-
-	if (G_UNLIKELY(type == 0)) {
-		static const GTypeInfo info = {
-			.class_size = sizeof(PurpleTrieClass),
-			.class_init = (GClassInitFunc)purple_trie_class_init,
-			.instance_size = sizeof(PurpleTrie),
-			.instance_init = purple_trie_init,
-		};
-
-		type = g_type_register_static(G_TYPE_OBJECT,
-			"PurpleTrie", &info, 0);
-	}
-
-	return type;
-}

mercurial