Merged in default (pull request #451)

Fri, 14 Dec 2018 08:25:23 +0000

author
Gary Kramlich <grim@reaperworld.com>
date
Fri, 14 Dec 2018 08:25:23 +0000
changeset 39381
339b307b3e0b
parent 39379
f63983e956f1 (current diff)
parent 39380
3088866c22f4 (diff)
child 39382
6d4d3c48f113
child 39383
0f9d49617abc
child 39385
8b00a188296b
child 39388
3d9ba0d0c688
child 39394
837a999f0ee3

Merged in default (pull request #451)

libpurple: Port almost self-contained code from g_type_class_add_private()

Approved-by: Gary Kramlich
Approved-by: Eion Robb

--- a/libpurple/circularbuffer.c	Fri Dec 14 08:06:02 2018 +0000
+++ b/libpurple/circularbuffer.c	Fri Dec 14 08:25:23 2018 +0000
@@ -23,9 +23,6 @@
 
 #define DEFAULT_BUF_SIZE 256
 
-#define PURPLE_CIRCULAR_BUFFER_GET_PRIVATE(obj) \
-	(G_TYPE_INSTANCE_GET_PRIVATE((obj), PURPLE_TYPE_CIRCULAR_BUFFER, PurpleCircularBufferPrivate))
-
 /******************************************************************************
  * Structs
  *****************************************************************************/
@@ -67,9 +64,11 @@
 /******************************************************************************
  * Globals
  *****************************************************************************/
-static GObjectClass *parent_class = NULL;
 static GParamSpec *properties[PROP_LAST];
 
+G_DEFINE_TYPE_WITH_PRIVATE(PurpleCircularBuffer, purple_circular_buffer,
+		G_TYPE_OBJECT);
+
 /******************************************************************************
  * Circular Buffer Implementation
  *****************************************************************************/
@@ -80,7 +79,7 @@
 	gsize start_buflen;
 	GObject *obj;
 
-	priv = PURPLE_CIRCULAR_BUFFER_GET_PRIVATE(buffer);
+	priv = purple_circular_buffer_get_instance_private(buffer);
 
 	start_buflen = priv->buflen;
 
@@ -134,7 +133,7 @@
 	gsize len_stored;
 	GObject *obj;
 
-	priv = PURPLE_CIRCULAR_BUFFER_GET_PRIVATE(buffer);
+	priv = purple_circular_buffer_get_instance_private(buffer);
 
 	/* Grow the buffer, if necessary */
 	if((priv->buflen - priv->bufused) < len)
@@ -169,11 +168,11 @@
 }
 
 static gsize
-purple_circular_buffer_real_max_read_size(const PurpleCircularBuffer *buffer) {
+purple_circular_buffer_real_max_read_size(PurpleCircularBuffer *buffer) {
 	PurpleCircularBufferPrivate *priv = NULL;
 	gsize max_read;
 
-	priv = PURPLE_CIRCULAR_BUFFER_GET_PRIVATE(buffer);
+	priv = purple_circular_buffer_get_instance_private(buffer);
 
 	if(priv->bufused == 0)
 		max_read = 0;
@@ -194,7 +193,7 @@
 
 	g_return_val_if_fail(purple_circular_buffer_get_max_read(buffer) >= len, FALSE);
 
-	priv = PURPLE_CIRCULAR_BUFFER_GET_PRIVATE(buffer);
+	priv = purple_circular_buffer_get_instance_private(buffer);
 
 	priv->output += len;
 	priv->bufused -= len;
@@ -220,7 +219,7 @@
                                      gsize grow_size)
 {
 	PurpleCircularBufferPrivate *priv =
-			PURPLE_CIRCULAR_BUFFER_GET_PRIVATE(buffer);
+			purple_circular_buffer_get_instance_private(buffer);
 
 	priv->growsize = (grow_size != 0) ? grow_size : DEFAULT_BUF_SIZE;
 
@@ -228,12 +227,12 @@
 }
 
 static const gchar *
-purple_circular_buffer_get_input(const PurpleCircularBuffer *buffer) {
+purple_circular_buffer_get_input(PurpleCircularBuffer *buffer) {
 	PurpleCircularBufferPrivate *priv = NULL;
 
 	g_return_val_if_fail(PURPLE_IS_CIRCULAR_BUFFER(buffer), NULL);
 
-	priv = PURPLE_CIRCULAR_BUFFER_GET_PRIVATE(buffer);
+	priv = purple_circular_buffer_get_instance_private(buffer);
 
 	return priv->input;
 }
@@ -242,13 +241,19 @@
  * Object Stuff
  *****************************************************************************/
 static void
+purple_circular_buffer_init(PurpleCircularBuffer *buffer)
+{
+}
+
+static void
 purple_circular_buffer_finalize(GObject *obj) {
 	PurpleCircularBufferPrivate *priv =
-			PURPLE_CIRCULAR_BUFFER_GET_PRIVATE(obj);
+			purple_circular_buffer_get_instance_private(
+					PURPLE_CIRCULAR_BUFFER(obj));
 
 	g_free(priv->buffer);
 
-	G_OBJECT_CLASS(parent_class)->finalize(obj);
+	G_OBJECT_CLASS(purple_circular_buffer_parent_class)->finalize(obj);
 }
 
 static void
@@ -302,10 +307,6 @@
 	GObjectClass *obj_class = G_OBJECT_CLASS(klass);
 	PurpleCircularBufferClass *buffer_class = PURPLE_CIRCULAR_BUFFER_CLASS(klass);
 
-	parent_class = g_type_class_peek_parent(klass);
-
-	g_type_class_add_private(klass, sizeof(PurpleCircularBufferPrivate));
-
 	obj_class->finalize = purple_circular_buffer_finalize;
 	obj_class->get_property = purple_circular_buffer_get_property;
 	obj_class->set_property = purple_circular_buffer_set_property;
@@ -344,25 +345,6 @@
 /******************************************************************************
  * API
  *****************************************************************************/
-GType
-purple_circular_buffer_get_type(void) {
-	static GType type = 0;
-
-	if(G_UNLIKELY(type == 0)) {
-		static const GTypeInfo info = {
-			.class_size = sizeof(PurpleCircularBufferClass),
-			.class_init = (GClassInitFunc)purple_circular_buffer_class_init,
-			.instance_size = sizeof(PurpleCircularBuffer),
-		};
-
-		type = g_type_register_static(G_TYPE_OBJECT,
-		                              "PurpleCircularBuffer",
-		                              &info, 0);
-	}
-
-	return type;
-}
-
 PurpleCircularBuffer *
 purple_circular_buffer_new(gsize growsize) {
 	return g_object_new(PURPLE_TYPE_CIRCULAR_BUFFER,
@@ -396,7 +378,7 @@
 }
 
 gsize
-purple_circular_buffer_get_max_read(const PurpleCircularBuffer *buffer) {
+purple_circular_buffer_get_max_read(PurpleCircularBuffer *buffer) {
 	PurpleCircularBufferClass *klass = NULL;
 
 	g_return_val_if_fail(PURPLE_IS_CIRCULAR_BUFFER(buffer), 0);
@@ -422,35 +404,35 @@
 }
 
 gsize
-purple_circular_buffer_get_grow_size(const PurpleCircularBuffer *buffer) {
+purple_circular_buffer_get_grow_size(PurpleCircularBuffer *buffer) {
 
 	PurpleCircularBufferPrivate *priv = NULL;
 
 	g_return_val_if_fail(PURPLE_IS_CIRCULAR_BUFFER(buffer), 0);
 
-	priv = PURPLE_CIRCULAR_BUFFER_GET_PRIVATE(buffer);
+	priv = purple_circular_buffer_get_instance_private(buffer);
 
 	return priv->growsize;
 }
 
 gsize
-purple_circular_buffer_get_used(const PurpleCircularBuffer *buffer) {
+purple_circular_buffer_get_used(PurpleCircularBuffer *buffer) {
 	PurpleCircularBufferPrivate *priv = NULL;
 
 	g_return_val_if_fail(PURPLE_IS_CIRCULAR_BUFFER(buffer), 0);
 
-	priv = PURPLE_CIRCULAR_BUFFER_GET_PRIVATE(buffer);
+	priv = purple_circular_buffer_get_instance_private(buffer);
 
 	return priv->bufused;
 }
 
 const gchar *
-purple_circular_buffer_get_output(const PurpleCircularBuffer *buffer) {
+purple_circular_buffer_get_output(PurpleCircularBuffer *buffer) {
 	PurpleCircularBufferPrivate *priv = NULL;
 
 	g_return_val_if_fail(PURPLE_IS_CIRCULAR_BUFFER(buffer), NULL);
 
-	priv = PURPLE_CIRCULAR_BUFFER_GET_PRIVATE(buffer);
+	priv = purple_circular_buffer_get_instance_private(buffer);
 
 	return priv->output;
 }
@@ -462,7 +444,7 @@
 
 	g_return_if_fail(PURPLE_IS_CIRCULAR_BUFFER(buffer));
 
-	priv = PURPLE_CIRCULAR_BUFFER_GET_PRIVATE(buffer);
+	priv = purple_circular_buffer_get_instance_private(buffer);
 
 	priv->input = priv->buffer;
 	priv->output = priv->buffer;
--- a/libpurple/circularbuffer.h	Fri Dec 14 08:06:02 2018 +0000
+++ b/libpurple/circularbuffer.h	Fri Dec 14 08:25:23 2018 +0000
@@ -50,7 +50,7 @@
 
 	void (*grow)(PurpleCircularBuffer *buffer, gsize len);
 	void (*append)(PurpleCircularBuffer *buffer, gconstpointer src, gsize len);
-	gsize (*max_read_size)(const PurpleCircularBuffer *buffer);
+	gsize (*max_read_size)(PurpleCircularBuffer *buffer);
 	gboolean (*mark_read)(PurpleCircularBuffer *buffer, gsize len);
 
 	void (*purple_reserved1)(void);
@@ -100,7 +100,7 @@
  *
  * Returns: the number of bytes that can be read from the PurpleCircularBuffer
  */
-gsize purple_circular_buffer_get_max_read(const PurpleCircularBuffer *buffer);
+gsize purple_circular_buffer_get_max_read(PurpleCircularBuffer *buffer);
 
 /**
  * purple_circular_buffer_mark_read:
@@ -133,7 +133,7 @@
  *
  * Returns: The grow size of the buffer.
  */
-gsize purple_circular_buffer_get_grow_size(const PurpleCircularBuffer *buffer);
+gsize purple_circular_buffer_get_grow_size(PurpleCircularBuffer *buffer);
 
 /**
  * purple_circular_buffer_get_used:
@@ -143,7 +143,7 @@
  *
  * Returns: The number of bytes that contain unread data.
  */
-gsize purple_circular_buffer_get_used(const PurpleCircularBuffer *buffer);
+gsize purple_circular_buffer_get_used(PurpleCircularBuffer *buffer);
 
 /**
  * purple_circular_buffer_get_output:
@@ -156,7 +156,7 @@
  *
  * Returns: The output pointer for the buffer.
  */
-const gchar *purple_circular_buffer_get_output(const PurpleCircularBuffer *buffer);
+const gchar *purple_circular_buffer_get_output(PurpleCircularBuffer *buffer);
 
 /**
  * purple_circular_buffer_reset:
--- a/libpurple/conversation.c	Fri Dec 14 08:06:02 2018 +0000
+++ b/libpurple/conversation.c	Fri Dec 14 08:25:23 2018 +0000
@@ -35,9 +35,6 @@
 #include "smiley-list.h"
 #include "util.h"
 
-#define PURPLE_CONVERSATION_GET_PRIVATE(obj) \
-	(G_TYPE_INSTANCE_GET_PRIVATE((obj), PURPLE_TYPE_CONVERSATION, PurpleConversationPrivate))
-
 typedef struct _PurpleConversationPrivate  PurpleConversationPrivate;
 
 /* General private data for a conversation */
@@ -77,15 +74,18 @@
 	PROP_LAST
 };
 
-static GObjectClass *parent_class;
 static GParamSpec *properties[PROP_LAST];
 
+G_DEFINE_ABSTRACT_TYPE_WITH_PRIVATE(PurpleConversation, purple_conversation,
+		G_TYPE_OBJECT);
+
 static void
 common_send(PurpleConversation *conv, const char *message, PurpleMessageFlags msgflags)
 {
 	PurpleAccount *account;
 	PurpleConnection *gc;
-	PurpleConversationPrivate *priv = PURPLE_CONVERSATION_GET_PRIVATE(conv);
+	PurpleConversationPrivate *priv =
+			purple_conversation_get_instance_private(conv);
 	PurpleMessage *msg;
 	char *displayed = NULL;
 	const char *sent;
@@ -195,7 +195,8 @@
 static void
 open_log(PurpleConversation *conv)
 {
-	PurpleConversationPrivate *priv = PURPLE_CONVERSATION_GET_PRIVATE(conv);
+	PurpleConversationPrivate *priv =
+			purple_conversation_get_instance_private(conv);
 	GDateTime *dt;
 
 	g_return_if_fail(priv != NULL);
@@ -212,7 +213,8 @@
 static void
 add_message_to_history(PurpleConversation *conv, PurpleMessage *msg)
 {
-	PurpleConversationPrivate *priv = PURPLE_CONVERSATION_GET_PRIVATE(conv);
+	PurpleConversationPrivate *priv =
+			purple_conversation_get_instance_private(conv);
 
 	g_return_if_fail(priv != NULL);
 	g_return_if_fail(msg != NULL);
@@ -238,7 +240,8 @@
 void
 purple_conversation_set_features(PurpleConversation *conv, PurpleConnectionFlags features)
 {
-	PurpleConversationPrivate *priv = PURPLE_CONVERSATION_GET_PRIVATE(conv);
+	PurpleConversationPrivate *priv =
+			purple_conversation_get_instance_private(conv);
 
 	g_return_if_fail(priv != NULL);
 
@@ -252,7 +255,8 @@
 PurpleConnectionFlags
 purple_conversation_get_features(PurpleConversation *conv)
 {
-	PurpleConversationPrivate *priv = PURPLE_CONVERSATION_GET_PRIVATE(conv);
+	PurpleConversationPrivate *priv =
+			purple_conversation_get_instance_private(conv);
 
 	g_return_val_if_fail(priv != NULL, 0);
 
@@ -290,7 +294,8 @@
 purple_conversation_set_ui_ops(PurpleConversation *conv,
 							 PurpleConversationUiOps *ops)
 {
-	PurpleConversationPrivate *priv = PURPLE_CONVERSATION_GET_PRIVATE(conv);
+	PurpleConversationPrivate *priv =
+			purple_conversation_get_instance_private(conv);
 
 	g_return_if_fail(priv != NULL);
 
@@ -304,9 +309,10 @@
 }
 
 PurpleConversationUiOps *
-purple_conversation_get_ui_ops(const PurpleConversation *conv)
+purple_conversation_get_ui_ops(PurpleConversation *conv)
 {
-	PurpleConversationPrivate *priv = PURPLE_CONVERSATION_GET_PRIVATE(conv);
+	PurpleConversationPrivate *priv =
+			purple_conversation_get_instance_private(conv);
 
 	g_return_val_if_fail(priv != NULL, NULL);
 
@@ -316,7 +322,8 @@
 void
 purple_conversation_set_account(PurpleConversation *conv, PurpleAccount *account)
 {
-	PurpleConversationPrivate *priv = PURPLE_CONVERSATION_GET_PRIVATE(conv);
+	PurpleConversationPrivate *priv =
+			purple_conversation_get_instance_private(conv);
 
 	g_return_if_fail(priv != NULL);
 
@@ -332,9 +339,10 @@
 }
 
 PurpleAccount *
-purple_conversation_get_account(const PurpleConversation *conv)
+purple_conversation_get_account(PurpleConversation *conv)
 {
-	PurpleConversationPrivate *priv = PURPLE_CONVERSATION_GET_PRIVATE(conv);
+	PurpleConversationPrivate *priv =
+			purple_conversation_get_instance_private(conv);
 
 	g_return_val_if_fail(priv != NULL, NULL);
 
@@ -342,7 +350,7 @@
 }
 
 PurpleConnection *
-purple_conversation_get_connection(const PurpleConversation *conv)
+purple_conversation_get_connection(PurpleConversation *conv)
 {
 	PurpleAccount *account;
 
@@ -359,7 +367,8 @@
 void
 purple_conversation_set_title(PurpleConversation *conv, const char *title)
 {
-	PurpleConversationPrivate *priv = PURPLE_CONVERSATION_GET_PRIVATE(conv);
+	PurpleConversationPrivate *priv =
+			purple_conversation_get_instance_private(conv);
 
 	g_return_if_fail(priv  != NULL);
 	g_return_if_fail(title != NULL);
@@ -374,9 +383,10 @@
 }
 
 const char *
-purple_conversation_get_title(const PurpleConversation *conv)
+purple_conversation_get_title(PurpleConversation *conv)
 {
-	PurpleConversationPrivate *priv = PURPLE_CONVERSATION_GET_PRIVATE(conv);
+	PurpleConversationPrivate *priv =
+			purple_conversation_get_instance_private(conv);
 
 	g_return_val_if_fail(priv != NULL, NULL);
 
@@ -413,7 +423,8 @@
 void
 purple_conversation_set_name(PurpleConversation *conv, const char *name)
 {
-	PurpleConversationPrivate *priv = PURPLE_CONVERSATION_GET_PRIVATE(conv);
+	PurpleConversationPrivate *priv =
+			purple_conversation_get_instance_private(conv);
 
 	g_return_if_fail(priv != NULL);
 
@@ -429,9 +440,10 @@
 }
 
 const char *
-purple_conversation_get_name(const PurpleConversation *conv)
+purple_conversation_get_name(PurpleConversation *conv)
 {
-	PurpleConversationPrivate *priv = PURPLE_CONVERSATION_GET_PRIVATE(conv);
+	PurpleConversationPrivate *priv =
+			purple_conversation_get_instance_private(conv);
 
 	g_return_val_if_fail(priv != NULL, NULL);
 
@@ -442,7 +454,8 @@
 purple_conversation_set_e2ee_state(PurpleConversation *conv,
 	PurpleE2eeState *state)
 {
-	PurpleConversationPrivate *priv = PURPLE_CONVERSATION_GET_PRIVATE(conv);
+	PurpleConversationPrivate *priv =
+			purple_conversation_get_instance_private(conv);
 
 	g_return_if_fail(priv != NULL);
 
@@ -469,7 +482,8 @@
 PurpleE2eeState *
 purple_conversation_get_e2ee_state(PurpleConversation *conv)
 {
-	PurpleConversationPrivate *priv = PURPLE_CONVERSATION_GET_PRIVATE(conv);
+	PurpleConversationPrivate *priv =
+			purple_conversation_get_instance_private(conv);
 	PurpleE2eeProvider *provider;
 
 	g_return_val_if_fail(priv != NULL, NULL);
@@ -493,7 +507,8 @@
 void
 purple_conversation_set_logging(PurpleConversation *conv, gboolean log)
 {
-	PurpleConversationPrivate *priv = PURPLE_CONVERSATION_GET_PRIVATE(conv);
+	PurpleConversationPrivate *priv =
+			purple_conversation_get_instance_private(conv);
 
 	g_return_if_fail(priv != NULL);
 
@@ -510,9 +525,10 @@
 }
 
 gboolean
-purple_conversation_is_logging(const PurpleConversation *conv)
+purple_conversation_is_logging(PurpleConversation *conv)
 {
-	PurpleConversationPrivate *priv = PURPLE_CONVERSATION_GET_PRIVATE(conv);
+	PurpleConversationPrivate *priv =
+			purple_conversation_get_instance_private(conv);
 
 	g_return_val_if_fail(priv != NULL, FALSE);
 
@@ -522,7 +538,8 @@
 void
 purple_conversation_close_logs(PurpleConversation *conv)
 {
-	PurpleConversationPrivate *priv = PURPLE_CONVERSATION_GET_PRIVATE(conv);
+	PurpleConversationPrivate *priv =
+			purple_conversation_get_instance_private(conv);
 
 	g_return_if_fail(priv != NULL);
 
@@ -540,7 +557,8 @@
 	PurpleConversationUiOps *ops;
 	PurpleBuddy *b;
 	int plugin_return;
-	PurpleConversationPrivate *priv = PURPLE_CONVERSATION_GET_PRIVATE(conv);
+	PurpleConversationPrivate *priv =
+			purple_conversation_get_instance_private(conv);
 	/* int logging_font_options = 0; */
 
 	g_return_if_fail(priv != NULL);
@@ -743,7 +761,8 @@
 {
 	char *text;
 	gpointer *data;
-	PurpleConversationPrivate *priv = PURPLE_CONVERSATION_GET_PRIVATE(conv);
+	PurpleConversationPrivate *priv =
+			purple_conversation_get_instance_private(conv);
 
 	g_return_if_fail(priv != NULL);
 	g_return_if_fail(message != NULL);
@@ -781,7 +800,8 @@
 void purple_conversation_clear_message_history(PurpleConversation *conv)
 {
 	GList *list;
-	PurpleConversationPrivate *priv = PURPLE_CONVERSATION_GET_PRIVATE(conv);
+	PurpleConversationPrivate *priv =
+			purple_conversation_get_instance_private(conv);
 
 	g_return_if_fail(priv != NULL);
 
@@ -795,7 +815,8 @@
 
 GList *purple_conversation_get_message_history(PurpleConversation *conv)
 {
-	PurpleConversationPrivate *priv = PURPLE_CONVERSATION_GET_PRIVATE(conv);
+	PurpleConversationPrivate *priv =
+			purple_conversation_get_instance_private(conv);
 
 	g_return_val_if_fail(priv != NULL, NULL);
 
@@ -849,7 +870,7 @@
 	g_return_if_fail(PURPLE_IS_CONVERSATION(conv));
 	g_return_if_fail(smiley);
 
-	priv = PURPLE_CONVERSATION_GET_PRIVATE(conv);
+	priv = purple_conversation_get_instance_private(conv);
 
 	if (priv->remote_smileys == NULL) {
 		priv->remote_smileys = purple_smiley_list_new();
@@ -878,7 +899,7 @@
 	g_return_val_if_fail(PURPLE_IS_CONVERSATION(conv), NULL);
 	g_return_val_if_fail(shortcut, NULL);
 
-	priv = PURPLE_CONVERSATION_GET_PRIVATE(conv);
+	priv = purple_conversation_get_instance_private(conv);
 
 	if (priv->remote_smileys == NULL)
 		return NULL;
@@ -889,7 +910,8 @@
 PurpleSmileyList *
 purple_conversation_get_remote_smileys(PurpleConversation *conv)
 {
-	PurpleConversationPrivate *priv = PURPLE_CONVERSATION_GET_PRIVATE(conv);
+	PurpleConversationPrivate *priv =
+			purple_conversation_get_instance_private(conv);
 
 	g_return_val_if_fail(priv != NULL, NULL);
 
@@ -907,7 +929,8 @@
 		GParamSpec *pspec)
 {
 	PurpleConversation *conv = PURPLE_CONVERSATION(obj);
-	PurpleConversationPrivate *priv = PURPLE_CONVERSATION_GET_PRIVATE(conv);
+	PurpleConversationPrivate *priv =
+			purple_conversation_get_instance_private(conv);
 
 	switch (param_id) {
 		case PROP_ACCOUNT:
@@ -962,6 +985,11 @@
 	}
 }
 
+static void
+purple_conversation_init(PurpleConversation *conv)
+{
+}
+
 /* Called when done constructing */
 static void
 purple_conversation_constructed(GObject *object)
@@ -971,7 +999,7 @@
 	PurpleConnection *gc;
 	PurpleConversationUiOps *ops;
 
-	parent_class->constructed(object);
+	G_OBJECT_CLASS(purple_conversation_parent_class)->constructed(object);
 
 	g_object_get(object, "account", &account, NULL);
 	gc = purple_account_get_connection(account);
@@ -1011,7 +1039,8 @@
 purple_conversation_finalize(GObject *object)
 {
 	PurpleConversation *conv = PURPLE_CONVERSATION(object);
-	PurpleConversationPrivate *priv = PURPLE_CONVERSATION_GET_PRIVATE(conv);
+	PurpleConversationPrivate *priv =
+			purple_conversation_get_instance_private(conv);
 	PurpleConversationUiOps *ops  = purple_conversation_get_ui_ops(conv);
 
 	purple_request_close_with_handle(conv);
@@ -1037,7 +1066,7 @@
 	priv->name = NULL;
 	priv->title = NULL;
 
-	parent_class->finalize(object);
+	G_OBJECT_CLASS(purple_conversation_parent_class)->finalize(object);
 }
 
 /* Class initializer function */
@@ -1046,8 +1075,6 @@
 {
 	GObjectClass *obj_class = G_OBJECT_CLASS(klass);
 
-	parent_class = g_type_class_peek_parent(klass);
-
 	obj_class->dispose = purple_conversation_dispose;
 	obj_class->finalize = purple_conversation_finalize;
 	obj_class->constructed = purple_conversation_constructed;
@@ -1056,8 +1083,6 @@
 	obj_class->get_property = purple_conversation_get_property;
 	obj_class->set_property = purple_conversation_set_property;
 
-	g_type_class_add_private(klass, sizeof(PurpleConversationPrivate));
-
 	properties[PROP_ACCOUNT] = g_param_spec_object("account", "Account",
 				"The account for the conversation.", PURPLE_TYPE_ACCOUNT,
 				G_PARAM_READWRITE | G_PARAM_CONSTRUCT | G_PARAM_STATIC_STRINGS);
@@ -1082,30 +1107,3 @@
 
 	g_object_class_install_properties(obj_class, PROP_LAST, properties);
 }
-
-GType
-purple_conversation_get_type(void)
-{
-	static GType type = 0;
-
-	if(type == 0) {
-		static const GTypeInfo info = {
-			sizeof(PurpleConversationClass),
-			NULL,
-			NULL,
-			(GClassInitFunc)purple_conversation_class_init,
-			NULL,
-			NULL,
-			sizeof(PurpleConversation),
-			0,
-			NULL,
-			NULL,
-		};
-
-		type = g_type_register_static(G_TYPE_OBJECT,
-				"PurpleConversation",
-				&info, G_TYPE_FLAG_ABSTRACT);
-	}
-
-	return type;
-}
--- a/libpurple/conversation.h	Fri Dec 14 08:06:02 2018 +0000
+++ b/libpurple/conversation.h	Fri Dec 14 08:25:23 2018 +0000
@@ -333,7 +333,7 @@
  *
  * Returns: The operations structure.
  */
-PurpleConversationUiOps *purple_conversation_get_ui_ops(const PurpleConversation *conv);
+PurpleConversationUiOps *purple_conversation_get_ui_ops(PurpleConversation *conv);
 
 /**
  * purple_conversation_set_account:
@@ -359,7 +359,7 @@
  *
  * Returns: (transfer none): The conversation's purple_account.
  */
-PurpleAccount *purple_conversation_get_account(const PurpleConversation *conv);
+PurpleAccount *purple_conversation_get_account(PurpleConversation *conv);
 
 /**
  * purple_conversation_get_connection:
@@ -369,7 +369,7 @@
  *
  * Returns: (transfer none): The conversation's purple_connection.
  */
-PurpleConnection *purple_conversation_get_connection(const PurpleConversation *conv);
+PurpleConnection *purple_conversation_get_connection(PurpleConversation *conv);
 
 /**
  * purple_conversation_set_title:
@@ -388,7 +388,7 @@
  *
  * Returns: The title.
  */
-const char *purple_conversation_get_title(const PurpleConversation *conv);
+const char *purple_conversation_get_title(PurpleConversation *conv);
 
 /**
  * purple_conversation_autoset_title:
@@ -419,7 +419,7 @@
  * Returns: The conversation's name. If the conversation is an IM with a
  *          PurpleBuddy, then it's the name of the PurpleBuddy.
  */
-const char *purple_conversation_get_name(const PurpleConversation *conv);
+const char *purple_conversation_get_name(PurpleConversation *conv);
 
 /**
  * purple_conversation_set_e2ee_state:
@@ -460,7 +460,7 @@
  *
  * Returns: %TRUE if logging is enabled, or %FALSE otherwise.
  */
-gboolean purple_conversation_is_logging(const PurpleConversation *conv);
+gboolean purple_conversation_is_logging(PurpleConversation *conv);
 
 /**
  * purple_conversation_close_logs:
--- a/libpurple/conversationtypes.c	Fri Dec 14 08:06:02 2018 +0000
+++ b/libpurple/conversationtypes.c	Fri Dec 14 08:25:23 2018 +0000
@@ -27,19 +27,10 @@
 
 #define SEND_TYPED_TIMEOUT_SECONDS 5
 
-#define PURPLE_CHAT_CONVERSATION_GET_PRIVATE(obj) \
-	(G_TYPE_INSTANCE_GET_PRIVATE((obj), PURPLE_TYPE_CHAT_CONVERSATION, PurpleChatConversationPrivate))
-
 typedef struct _PurpleChatConversationPrivate     PurpleChatConversationPrivate;
 
-#define PURPLE_IM_CONVERSATION_GET_PRIVATE(obj) \
-	(G_TYPE_INSTANCE_GET_PRIVATE((obj), PURPLE_TYPE_IM_CONVERSATION, PurpleIMConversationPrivate))
-
 typedef struct _PurpleIMConversationPrivate       PurpleIMConversationPrivate;
 
-#define PURPLE_CHAT_USER_GET_PRIVATE(obj) \
-	(G_TYPE_INSTANCE_GET_PRIVATE((obj), PURPLE_TYPE_CHAT_USER, PurpleChatUserPrivate))
-
 typedef struct _PurpleChatUserPrivate  PurpleChatUserPrivate;
 
 /*
@@ -118,13 +109,17 @@
 	CU_PROP_LAST
 };
 
-static PurpleConversationClass *parent_class;
-static GObjectClass            *cb_parent_class;
-
 static GParamSpec *chat_properties[CHAT_PROP_LAST];
 static GParamSpec *im_properties[IM_PROP_LAST];
 static GParamSpec *cu_properties[CU_PROP_LAST];
 
+G_DEFINE_TYPE_WITH_PRIVATE(PurpleChatConversation, purple_chat_conversation,
+		PURPLE_TYPE_CONVERSATION);
+G_DEFINE_TYPE_WITH_PRIVATE(PurpleIMConversation, purple_im_conversation,
+		PURPLE_TYPE_CONVERSATION);
+G_DEFINE_TYPE_WITH_PRIVATE(PurpleChatUser, purple_chat_user,
+		G_TYPE_OBJECT);
+
 static int purple_chat_user_compare(PurpleChatUser *a,
 		PurpleChatUser *b);
 
@@ -171,7 +166,8 @@
 void
 purple_im_conversation_set_icon(PurpleIMConversation *im, PurpleBuddyIcon *icon)
 {
-	PurpleIMConversationPrivate *priv = PURPLE_IM_CONVERSATION_GET_PRIVATE(im);
+	PurpleIMConversationPrivate *priv =
+			purple_im_conversation_get_instance_private(im);
 
 	g_return_if_fail(priv != NULL);
 
@@ -189,9 +185,10 @@
 }
 
 PurpleBuddyIcon *
-purple_im_conversation_get_icon(const PurpleIMConversation *im)
+purple_im_conversation_get_icon(PurpleIMConversation *im)
 {
-	PurpleIMConversationPrivate *priv = PURPLE_IM_CONVERSATION_GET_PRIVATE(im);
+	PurpleIMConversationPrivate *priv =
+			purple_im_conversation_get_instance_private(im);
 
 	g_return_val_if_fail(priv != NULL, NULL);
 
@@ -203,7 +200,8 @@
 {
 	PurpleAccount *account;
 	const char *name;
-	PurpleIMConversationPrivate *priv = PURPLE_IM_CONVERSATION_GET_PRIVATE(im);
+	PurpleIMConversationPrivate *priv =
+			purple_im_conversation_get_instance_private(im);
 
 	g_return_if_fail(priv != NULL);
 
@@ -238,9 +236,10 @@
 }
 
 PurpleIMTypingState
-purple_im_conversation_get_typing_state(const PurpleIMConversation *im)
+purple_im_conversation_get_typing_state(PurpleIMConversation *im)
 {
-	PurpleIMConversationPrivate *priv = PURPLE_IM_CONVERSATION_GET_PRIVATE(im);
+	PurpleIMConversationPrivate *priv =
+			purple_im_conversation_get_instance_private(im);
 
 	g_return_val_if_fail(priv != NULL, 0);
 
@@ -250,7 +249,8 @@
 void
 purple_im_conversation_start_typing_timeout(PurpleIMConversation *im, int timeout)
 {
-	PurpleIMConversationPrivate *priv = PURPLE_IM_CONVERSATION_GET_PRIVATE(im);
+	PurpleIMConversationPrivate *priv =
+			purple_im_conversation_get_instance_private(im);
 
 	g_return_if_fail(priv != NULL);
 
@@ -263,7 +263,8 @@
 void
 purple_im_conversation_stop_typing_timeout(PurpleIMConversation *im)
 {
-	PurpleIMConversationPrivate *priv = PURPLE_IM_CONVERSATION_GET_PRIVATE(im);
+	PurpleIMConversationPrivate *priv =
+			purple_im_conversation_get_instance_private(im);
 
 	g_return_if_fail(priv != NULL);
 
@@ -275,9 +276,10 @@
 }
 
 guint
-purple_im_conversation_get_typing_timeout(const PurpleIMConversation *im)
+purple_im_conversation_get_typing_timeout(PurpleIMConversation *im)
 {
-	PurpleIMConversationPrivate *priv = PURPLE_IM_CONVERSATION_GET_PRIVATE(im);
+	PurpleIMConversationPrivate *priv =
+			purple_im_conversation_get_instance_private(im);
 
 	g_return_val_if_fail(priv != NULL, 0);
 
@@ -287,7 +289,8 @@
 void
 purple_im_conversation_set_type_again(PurpleIMConversation *im, unsigned int val)
 {
-	PurpleIMConversationPrivate *priv = PURPLE_IM_CONVERSATION_GET_PRIVATE(im);
+	PurpleIMConversationPrivate *priv =
+			purple_im_conversation_get_instance_private(im);
 
 	g_return_if_fail(priv != NULL);
 
@@ -298,9 +301,10 @@
 }
 
 time_t
-purple_im_conversation_get_type_again(const PurpleIMConversation *im)
+purple_im_conversation_get_type_again(PurpleIMConversation *im)
 {
-	PurpleIMConversationPrivate *priv = PURPLE_IM_CONVERSATION_GET_PRIVATE(im);
+	PurpleIMConversationPrivate *priv =
+			purple_im_conversation_get_instance_private(im);
 
 	g_return_val_if_fail(priv != NULL, 0);
 
@@ -310,7 +314,8 @@
 void
 purple_im_conversation_start_send_typed_timeout(PurpleIMConversation *im)
 {
-	PurpleIMConversationPrivate *priv = PURPLE_IM_CONVERSATION_GET_PRIVATE(im);
+	PurpleIMConversationPrivate *priv =
+			purple_im_conversation_get_instance_private(im);
 
 	g_return_if_fail(priv != NULL);
 
@@ -321,7 +326,8 @@
 void
 purple_im_conversation_stop_send_typed_timeout(PurpleIMConversation *im)
 {
-	PurpleIMConversationPrivate *priv = PURPLE_IM_CONVERSATION_GET_PRIVATE(im);
+	PurpleIMConversationPrivate *priv =
+			purple_im_conversation_get_instance_private(im);
 
 	g_return_if_fail(priv != NULL);
 
@@ -333,9 +339,10 @@
 }
 
 guint
-purple_im_conversation_get_send_typed_timeout(const PurpleIMConversation *im)
+purple_im_conversation_get_send_typed_timeout(PurpleIMConversation *im)
 {
-	PurpleIMConversationPrivate *priv = PURPLE_IM_CONVERSATION_GET_PRIVATE(im);
+	PurpleIMConversationPrivate *priv =
+			purple_im_conversation_get_instance_private(im);
 
 	g_return_val_if_fail(priv != NULL, 0);
 
@@ -413,7 +420,7 @@
 }
 
 /* GObject initialization function */
-static void purple_im_conversation_init(GTypeInstance *instance, gpointer klass)
+static void purple_im_conversation_init(PurpleIMConversation *im)
 {
 }
 
@@ -426,7 +433,8 @@
 	PurpleBuddyIcon *icon;
 	gchar *name;
 
-	G_OBJECT_CLASS(parent_class)->constructed(object);
+	G_OBJECT_CLASS(purple_im_conversation_parent_class)->
+			constructed(object);
 
 	g_object_get(object,
 			"account", &account,
@@ -451,14 +459,16 @@
 static void
 purple_im_conversation_dispose(GObject *object)
 {
-	PurpleIMConversationPrivate *priv = PURPLE_IM_CONVERSATION_GET_PRIVATE(object);
+	PurpleIMConversationPrivate *priv =
+			purple_im_conversation_get_instance_private(
+					PURPLE_IM_CONVERSATION(object));
 
 	if (priv->icon) {
 		purple_buddy_icon_unref(priv->icon);
 		priv->icon = NULL;
 	}
 
-	G_OBJECT_CLASS(parent_class)->dispose(object);
+	G_OBJECT_CLASS(purple_im_conversation_parent_class)->dispose(object);
 }
 
 /* GObject finalize function */
@@ -484,7 +494,7 @@
 	purple_im_conversation_stop_typing_timeout(im);
 	purple_im_conversation_stop_send_typed_timeout(im);
 
-	G_OBJECT_CLASS(parent_class)->finalize(object);
+	G_OBJECT_CLASS(purple_im_conversation_parent_class)->finalize(object);
 }
 
 /* Class initializer function */
@@ -493,8 +503,6 @@
 	GObjectClass *obj_class = G_OBJECT_CLASS(klass);
 	PurpleConversationClass *conv_class = PURPLE_CONVERSATION_CLASS(klass);
 
-	parent_class = g_type_class_peek_parent(klass);
-
 	obj_class->dispose = purple_im_conversation_dispose;
 	obj_class->finalize = purple_im_conversation_finalize;
 	obj_class->constructed = purple_im_conversation_constructed;
@@ -505,8 +513,6 @@
 
 	conv_class->write_message = im_conversation_write_message;
 
-	g_type_class_add_private(klass, sizeof(PurpleIMConversationPrivate));
-
 	im_properties[IM_PROP_TYPING_STATE] = g_param_spec_enum("typing-state",
 				"Typing state",
 				"Status of the user's typing of a message.",
@@ -523,33 +529,6 @@
 	g_object_class_install_properties(obj_class, IM_PROP_LAST, im_properties);
 }
 
-GType
-purple_im_conversation_get_type(void)
-{
-	static GType type = 0;
-
-	if(type == 0) {
-		static const GTypeInfo info = {
-			sizeof(PurpleIMConversationClass),
-			NULL,
-			NULL,
-			(GClassInitFunc)purple_im_conversation_class_init,
-			NULL,
-			NULL,
-			sizeof(PurpleIMConversation),
-			0,
-			(GInstanceInitFunc)purple_im_conversation_init,
-			NULL,
-		};
-
-		type = g_type_register_static(PURPLE_TYPE_CONVERSATION,
-				"PurpleIMConversation",
-				&info, 0);
-	}
-
-	return type;
-}
-
 PurpleIMConversation *
 purple_im_conversation_new(PurpleAccount *account, const char *name)
 {
@@ -598,9 +577,10 @@
 }
 
 GList *
-purple_chat_conversation_get_users(const PurpleChatConversation *chat)
+purple_chat_conversation_get_users(PurpleChatConversation *chat)
 {
-	PurpleChatConversationPrivate *priv = PURPLE_CHAT_CONVERSATION_GET_PRIVATE(chat);
+	PurpleChatConversationPrivate *priv =
+			purple_chat_conversation_get_instance_private(chat);
 
 	g_return_val_if_fail(priv != NULL, NULL);
 
@@ -608,9 +588,10 @@
 }
 
 guint
-purple_chat_conversation_get_users_count(const PurpleChatConversation *chat)
+purple_chat_conversation_get_users_count(PurpleChatConversation *chat)
 {
-	PurpleChatConversationPrivate *priv = PURPLE_CHAT_CONVERSATION_GET_PRIVATE(chat);
+	PurpleChatConversationPrivate *priv =
+			purple_chat_conversation_get_instance_private(chat);
 
 	g_return_val_if_fail(priv != NULL, 0);
 
@@ -620,7 +601,8 @@
 void
 purple_chat_conversation_ignore(PurpleChatConversation *chat, const char *name)
 {
-	PurpleChatConversationPrivate *priv = PURPLE_CHAT_CONVERSATION_GET_PRIVATE(chat);
+	PurpleChatConversationPrivate *priv =
+			purple_chat_conversation_get_instance_private(chat);
 
 	g_return_if_fail(priv != NULL);
 	g_return_if_fail(name != NULL);
@@ -637,7 +619,8 @@
 purple_chat_conversation_unignore(PurpleChatConversation *chat, const char *name)
 {
 	GList *item;
-	PurpleChatConversationPrivate *priv = PURPLE_CHAT_CONVERSATION_GET_PRIVATE(chat);
+	PurpleChatConversationPrivate *priv =
+			purple_chat_conversation_get_instance_private(chat);
 
 	g_return_if_fail(priv != NULL);
 	g_return_if_fail(name != NULL);
@@ -659,7 +642,8 @@
 GList *
 purple_chat_conversation_set_ignored(PurpleChatConversation *chat, GList *ignored)
 {
-	PurpleChatConversationPrivate *priv = PURPLE_CHAT_CONVERSATION_GET_PRIVATE(chat);
+	PurpleChatConversationPrivate *priv =
+			purple_chat_conversation_get_instance_private(chat);
 
 	g_return_val_if_fail(priv != NULL, NULL);
 
@@ -668,9 +652,10 @@
 }
 
 GList *
-purple_chat_conversation_get_ignored(const PurpleChatConversation *chat)
+purple_chat_conversation_get_ignored(PurpleChatConversation *chat)
 {
-	PurpleChatConversationPrivate *priv = PURPLE_CHAT_CONVERSATION_GET_PRIVATE(chat);
+	PurpleChatConversationPrivate *priv =
+			purple_chat_conversation_get_instance_private(chat);
 
 	g_return_val_if_fail(priv != NULL, NULL);
 
@@ -678,7 +663,7 @@
 }
 
 const char *
-purple_chat_conversation_get_ignored_user(const PurpleChatConversation *chat, const char *user)
+purple_chat_conversation_get_ignored_user(PurpleChatConversation *chat, const char *user)
 {
 	GList *ignored;
 
@@ -708,7 +693,7 @@
 }
 
 gboolean
-purple_chat_conversation_is_ignored_user(const PurpleChatConversation *chat, const char *user)
+purple_chat_conversation_is_ignored_user(PurpleChatConversation *chat, const char *user)
 {
 	g_return_val_if_fail(PURPLE_IS_CHAT_CONVERSATION(chat), FALSE);
 	g_return_val_if_fail(user != NULL, FALSE);
@@ -719,7 +704,8 @@
 void
 purple_chat_conversation_set_topic(PurpleChatConversation *chat, const char *who, const char *topic)
 {
-	PurpleChatConversationPrivate *priv = PURPLE_CHAT_CONVERSATION_GET_PRIVATE(chat);
+	PurpleChatConversationPrivate *priv =
+			purple_chat_conversation_get_instance_private(chat);
 	GObject *obj;
 
 	g_return_if_fail(priv != NULL);
@@ -744,9 +730,10 @@
 }
 
 const char *
-purple_chat_conversation_get_topic(const PurpleChatConversation *chat)
+purple_chat_conversation_get_topic(PurpleChatConversation *chat)
 {
-	PurpleChatConversationPrivate *priv = PURPLE_CHAT_CONVERSATION_GET_PRIVATE(chat);
+	PurpleChatConversationPrivate *priv =
+			purple_chat_conversation_get_instance_private(chat);
 
 	g_return_val_if_fail(priv != NULL, NULL);
 
@@ -754,9 +741,10 @@
 }
 
 const char *
-purple_chat_conversation_get_topic_who(const PurpleChatConversation *chat)
+purple_chat_conversation_get_topic_who(PurpleChatConversation *chat)
 {
-	PurpleChatConversationPrivate *priv = PURPLE_CHAT_CONVERSATION_GET_PRIVATE(chat);
+	PurpleChatConversationPrivate *priv =
+			purple_chat_conversation_get_instance_private(chat);
 
 	g_return_val_if_fail(priv != NULL, NULL);
 
@@ -766,7 +754,8 @@
 void
 purple_chat_conversation_set_id(PurpleChatConversation *chat, int id)
 {
-	PurpleChatConversationPrivate *priv = PURPLE_CHAT_CONVERSATION_GET_PRIVATE(chat);
+	PurpleChatConversationPrivate *priv =
+			purple_chat_conversation_get_instance_private(chat);
 
 	g_return_if_fail(priv != NULL);
 
@@ -776,9 +765,10 @@
 }
 
 int
-purple_chat_conversation_get_id(const PurpleChatConversation *chat)
+purple_chat_conversation_get_id(PurpleChatConversation *chat)
 {
-	PurpleChatConversationPrivate *priv = PURPLE_CHAT_CONVERSATION_GET_PRIVATE(chat);
+	PurpleChatConversationPrivate *priv =
+			purple_chat_conversation_get_instance_private(chat);
 
 	g_return_val_if_fail(priv != NULL, -1);
 
@@ -788,7 +778,9 @@
 static void
 chat_conversation_write_message(PurpleConversation *conv, PurpleMessage *msg)
 {
-	PurpleChatConversationPrivate *priv = PURPLE_CHAT_CONVERSATION_GET_PRIVATE(conv);
+	PurpleChatConversationPrivate *priv =
+			purple_chat_conversation_get_instance_private(
+					PURPLE_CHAT_CONVERSATION(conv));
 	PurpleMessageFlags flags;
 
 	g_return_if_fail(priv != NULL);
@@ -842,7 +834,7 @@
 	GList *ul, *fl;
 	GList *cbuddies = NULL;
 
-	priv = PURPLE_CHAT_CONVERSATION_GET_PRIVATE(chat);
+	priv = purple_chat_conversation_get_instance_private(chat);
 
 	g_return_if_fail(priv  != NULL);
 	g_return_if_fail(users != NULL);
@@ -946,7 +938,7 @@
 	char tmp[BUF_LONG];
 	gboolean is_me = FALSE;
 
-	priv = PURPLE_CHAT_CONVERSATION_GET_PRIVATE(chat);
+	priv = purple_chat_conversation_get_instance_private(chat);
 
 	g_return_if_fail(priv != NULL);
 	g_return_if_fail(old_user != NULL);
@@ -1066,7 +1058,7 @@
 	GList *l;
 	gboolean quiet;
 
-	priv = PURPLE_CHAT_CONVERSATION_GET_PRIVATE(chat);
+	priv = purple_chat_conversation_get_instance_private(chat);
 
 	g_return_if_fail(priv  != NULL);
 	g_return_if_fail(users != NULL);
@@ -1137,7 +1129,8 @@
 {
 	PurpleConversationUiOps *ops;
 	GHashTableIter it;
-	PurpleChatConversationPrivate *priv = PURPLE_CHAT_CONVERSATION_GET_PRIVATE(chat);
+	PurpleChatConversationPrivate *priv =
+			purple_chat_conversation_get_instance_private(chat);
 	gchar *name;
 
 	g_return_if_fail(priv != NULL);
@@ -1167,7 +1160,8 @@
 }
 
 void purple_chat_conversation_set_nick(PurpleChatConversation *chat, const char *nick) {
-	PurpleChatConversationPrivate *priv = PURPLE_CHAT_CONVERSATION_GET_PRIVATE(chat);
+	PurpleChatConversationPrivate *priv =
+			purple_chat_conversation_get_instance_private(chat);
 
 	g_return_if_fail(priv != NULL);
 
@@ -1179,7 +1173,8 @@
 }
 
 const char *purple_chat_conversation_get_nick(PurpleChatConversation *chat) {
-	PurpleChatConversationPrivate *priv = PURPLE_CHAT_CONVERSATION_GET_PRIVATE(chat);
+	PurpleChatConversationPrivate *priv =
+			purple_chat_conversation_get_instance_private(chat);
 
 	g_return_val_if_fail(priv != NULL, NULL);
 
@@ -1194,7 +1189,8 @@
 	const char *user, *message;
 
 	conv = data;
-	priv = PURPLE_CHAT_CONVERSATION_GET_PRIVATE(conv);
+	priv = purple_chat_conversation_get_instance_private(
+			PURPLE_CHAT_CONVERSATION(conv));
 	user = purple_request_fields_get_string(fields, "screenname");
 	message = purple_request_fields_get_string(fields, "message");
 
@@ -1256,7 +1252,8 @@
 void
 purple_chat_conversation_leave(PurpleChatConversation *chat)
 {
-	PurpleChatConversationPrivate *priv = PURPLE_CHAT_CONVERSATION_GET_PRIVATE(chat);
+	PurpleChatConversationPrivate *priv =
+			purple_chat_conversation_get_instance_private(chat);
 
 	g_return_if_fail(priv != NULL);
 
@@ -1271,7 +1268,8 @@
 gboolean
 purple_chat_conversation_has_left(PurpleChatConversation *chat)
 {
-	PurpleChatConversationPrivate *priv = PURPLE_CHAT_CONVERSATION_GET_PRIVATE(chat);
+	PurpleChatConversationPrivate *priv =
+			purple_chat_conversation_get_instance_private(chat);
 
 	g_return_val_if_fail(priv != NULL, TRUE);
 
@@ -1285,7 +1283,8 @@
 	PurpleAccount *account;
 	PurpleConnection *gc;
 	PurpleConversation *conv = PURPLE_CONVERSATION(chat);
-	PurpleChatConversationPrivate *priv = PURPLE_CHAT_CONVERSATION_GET_PRIVATE(chat);
+	PurpleChatConversationPrivate *priv =
+			purple_chat_conversation_get_instance_private(chat);
 
 	account = purple_conversation_get_account(conv);
 
@@ -1314,7 +1313,8 @@
 PurpleChatUser *
 purple_chat_conversation_find_user(PurpleChatConversation *chat, const char *name)
 {
-	PurpleChatConversationPrivate *priv = PURPLE_CHAT_CONVERSATION_GET_PRIVATE(chat);
+	PurpleChatConversationPrivate *priv =
+			purple_chat_conversation_get_instance_private(chat);
 
 	g_return_val_if_fail(priv != NULL, NULL);
 	g_return_val_if_fail(name != NULL, NULL);
@@ -1383,9 +1383,10 @@
 }
 
 /* GObject initialization function */
-static void purple_chat_conversation_init(GTypeInstance *instance, gpointer klass)
+static void purple_chat_conversation_init(PurpleChatConversation *chat)
 {
-	PurpleChatConversationPrivate *priv = PURPLE_CHAT_CONVERSATION_GET_PRIVATE(instance);
+	PurpleChatConversationPrivate *priv =
+			purple_chat_conversation_get_instance_private(chat);
 
 	priv->users = g_hash_table_new_full(_purple_conversation_user_hash,
 		_purple_conversation_user_equal, g_free, g_object_unref);
@@ -1399,7 +1400,8 @@
 	PurpleAccount *account;
 	const char *disp;
 
-	G_OBJECT_CLASS(parent_class)->constructed(object);
+	G_OBJECT_CLASS(purple_chat_conversation_parent_class)->
+			constructed(object);
 
 	g_object_get(object, "account", &account, NULL);
 
@@ -1420,11 +1422,12 @@
 purple_chat_conversation_dispose(GObject *object)
 {
 	PurpleChatConversationPrivate *priv =
-			PURPLE_CHAT_CONVERSATION_GET_PRIVATE(object);
+			purple_chat_conversation_get_instance_private
+					(PURPLE_CHAT_CONVERSATION(object));
 
 	g_hash_table_remove_all(priv->users);
 
-	G_OBJECT_CLASS(parent_class)->dispose(object);
+	G_OBJECT_CLASS(purple_chat_conversation_parent_class)->dispose(object);
 }
 
 /* GObject finalize function */
@@ -1433,7 +1436,8 @@
 {
 	PurpleChatConversation *chat = PURPLE_CHAT_CONVERSATION(object);
 	PurpleConnection *gc = purple_conversation_get_connection(PURPLE_CONVERSATION(chat));
-	PurpleChatConversationPrivate *priv = PURPLE_CHAT_CONVERSATION_GET_PRIVATE(chat);
+	PurpleChatConversationPrivate *priv =
+			purple_chat_conversation_get_instance_private(chat);
 
 	if (gc != NULL)
 	{
@@ -1471,7 +1475,7 @@
 	priv->topic = NULL;
 	priv->nick = NULL;
 
-	G_OBJECT_CLASS(parent_class)->finalize(object);
+	G_OBJECT_CLASS(purple_chat_conversation_parent_class)->finalize(object);
 }
 
 /* Class initializer function */
@@ -1480,8 +1484,6 @@
 	GObjectClass *obj_class = G_OBJECT_CLASS(klass);
 	PurpleConversationClass *conv_class = PURPLE_CONVERSATION_CLASS(klass);
 
-	parent_class = g_type_class_peek_parent(klass);
-
 	obj_class->dispose = purple_chat_conversation_dispose;
 	obj_class->finalize = purple_chat_conversation_finalize;
 	obj_class->constructed = purple_chat_conversation_constructed;
@@ -1492,8 +1494,6 @@
 
 	conv_class->write_message = chat_conversation_write_message;
 
-	g_type_class_add_private(klass, sizeof(PurpleChatConversationPrivate));
-
 	chat_properties[CHAT_PROP_TOPIC_WHO] = g_param_spec_string("topic-who",
 				"Who set topic",
 				"Who set the chat topic.", NULL,
@@ -1523,33 +1523,6 @@
 				chat_properties);
 }
 
-GType
-purple_chat_conversation_get_type(void)
-{
-	static GType type = 0;
-
-	if(type == 0) {
-		static const GTypeInfo info = {
-			sizeof(PurpleChatConversationClass),
-			NULL,
-			NULL,
-			(GClassInitFunc)purple_chat_conversation_class_init,
-			NULL,
-			NULL,
-			sizeof(PurpleChatConversation),
-			0,
-			(GInstanceInitFunc)purple_chat_conversation_init,
-			NULL,
-		};
-
-		type = g_type_register_static(PURPLE_TYPE_CONVERSATION,
-				"PurpleChatConversation",
-				&info, 0);
-	}
-
-	return type;
-}
-
 PurpleChatConversation *
 purple_chat_conversation_new(PurpleAccount *account, const char *name)
 {
@@ -1604,8 +1577,8 @@
 	char *user1 = NULL, *user2 = NULL;
 	gint ret = 0;
 
-	priva = PURPLE_CHAT_USER_GET_PRIVATE(a);
-	privb = PURPLE_CHAT_USER_GET_PRIVATE(b);
+	priva = purple_chat_user_get_instance_private(a);
+	privb = purple_chat_user_get_instance_private(b);
 
 	if (priva) {
 		f1 = priva->flags;
@@ -1639,10 +1612,10 @@
 }
 
 const char *
-purple_chat_user_get_alias(const PurpleChatUser *cb)
+purple_chat_user_get_alias(PurpleChatUser *cb)
 {
 	PurpleChatUserPrivate *priv;
-	priv = PURPLE_CHAT_USER_GET_PRIVATE(cb);
+	priv = purple_chat_user_get_instance_private(cb);
 
 	g_return_val_if_fail(priv != NULL, NULL);
 
@@ -1650,10 +1623,10 @@
 }
 
 const char *
-purple_chat_user_get_name(const PurpleChatUser *cb)
+purple_chat_user_get_name(PurpleChatUser *cb)
 {
 	PurpleChatUserPrivate *priv;
-	priv = PURPLE_CHAT_USER_GET_PRIVATE(cb);
+	priv = purple_chat_user_get_instance_private(cb);
 
 	g_return_val_if_fail(priv != NULL, NULL);
 
@@ -1667,7 +1640,7 @@
 	PurpleConversationUiOps *ops;
 	PurpleChatUserFlags oldflags;
 	PurpleChatUserPrivate *priv;
-	priv = PURPLE_CHAT_USER_GET_PRIVATE(cb);
+	priv = purple_chat_user_get_instance_private(cb);
 
 	g_return_if_fail(priv != NULL);
 
@@ -1689,10 +1662,10 @@
 }
 
 PurpleChatUserFlags
-purple_chat_user_get_flags(const PurpleChatUser *cb)
+purple_chat_user_get_flags(PurpleChatUser *cb)
 {
 	PurpleChatUserPrivate *priv;
-	priv = PURPLE_CHAT_USER_GET_PRIVATE(cb);
+	priv = purple_chat_user_get_instance_private(cb);
 
 	g_return_val_if_fail(priv != NULL, PURPLE_CHAT_USER_NONE);
 
@@ -1708,7 +1681,7 @@
 }
 
 gpointer
-purple_chat_user_get_ui_data(const PurpleChatUser *cb)
+purple_chat_user_get_ui_data(PurpleChatUser *cb)
 {
 	g_return_val_if_fail(PURPLE_IS_CHAT_USER(cb), NULL);
 
@@ -1720,7 +1693,7 @@
 		PurpleChatConversation *chat)
 {
 	PurpleChatUserPrivate *priv;
-	priv = PURPLE_CHAT_USER_GET_PRIVATE(cb);
+	priv = purple_chat_user_get_instance_private(cb);
 
 	g_return_if_fail(priv != NULL);
 
@@ -1730,10 +1703,10 @@
 }
 
 PurpleChatConversation *
-purple_chat_user_get_chat(const PurpleChatUser *cb)
+purple_chat_user_get_chat(PurpleChatUser *cb)
 {
 	PurpleChatUserPrivate *priv;
-	priv = PURPLE_CHAT_USER_GET_PRIVATE(cb);
+	priv = purple_chat_user_get_instance_private(cb);
 
 	g_return_val_if_fail(priv != NULL, NULL);
 
@@ -1741,10 +1714,10 @@
 }
 
 gboolean
-purple_chat_user_is_buddy(const PurpleChatUser *cb)
+purple_chat_user_is_buddy(PurpleChatUser *cb)
 {
 	PurpleChatUserPrivate *priv;
-	priv = PURPLE_CHAT_USER_GET_PRIVATE(cb);
+	priv = purple_chat_user_get_instance_private(cb);
 
 	g_return_val_if_fail(priv != NULL, FALSE);
 
@@ -1761,7 +1734,8 @@
 		GParamSpec *pspec)
 {
 	PurpleChatUser *cb = PURPLE_CHAT_USER(obj);
-	PurpleChatUserPrivate *priv = PURPLE_CHAT_USER_GET_PRIVATE(cb);
+	PurpleChatUserPrivate *priv =
+			purple_chat_user_get_instance_private(cb);
 
 	switch (param_id) {
 		case CU_PROP_CHAT:
@@ -1812,7 +1786,7 @@
 
 /* GObject initialization function */
 static void
-purple_chat_user_init(GTypeInstance *instance, gpointer klass)
+purple_chat_user_init(PurpleChatUser *user)
 {
 }
 
@@ -1820,10 +1794,11 @@
 static void
 purple_chat_user_constructed(GObject *object)
 {
-	PurpleChatUserPrivate *priv = PURPLE_CHAT_USER_GET_PRIVATE(object);
+	PurpleChatUserPrivate *priv = purple_chat_user_get_instance_private(
+			PURPLE_CHAT_USER(object));
 	PurpleAccount *account;
 
-	cb_parent_class->constructed(object);
+	G_OBJECT_CLASS(purple_chat_user_parent_class)->constructed(object);
 
 	account = purple_conversation_get_account(PURPLE_CONVERSATION(priv->chat));
 
@@ -1836,7 +1811,8 @@
 purple_chat_user_finalize(GObject *object)
 {
 	PurpleChatUser *cb = PURPLE_CHAT_USER(object);
-	PurpleChatUserPrivate *priv = PURPLE_CHAT_USER_GET_PRIVATE(cb);
+	PurpleChatUserPrivate *priv =
+			purple_chat_user_get_instance_private(cb);
 
 	purple_signal_emit(purple_conversations_get_handle(),
 			"deleting-chat-user", cb);
@@ -1845,7 +1821,7 @@
 	g_free(priv->alias_key);
 	g_free(priv->name);
 
-	cb_parent_class->finalize(object);
+	G_OBJECT_CLASS(purple_chat_user_parent_class)->finalize(object);
 }
 
 /* Class initializer function */
@@ -1853,8 +1829,6 @@
 {
 	GObjectClass *obj_class = G_OBJECT_CLASS(klass);
 
-	cb_parent_class = g_type_class_peek_parent(klass);
-
 	obj_class->constructed = purple_chat_user_constructed;
 	obj_class->finalize = purple_chat_user_finalize;
 
@@ -1862,8 +1836,6 @@
 	obj_class->get_property = purple_chat_user_get_property;
 	obj_class->set_property = purple_chat_user_set_property;
 
-	g_type_class_add_private(klass, sizeof(PurpleChatUserPrivate));
-
 	cu_properties[CU_PROP_CHAT] = g_param_spec_object("chat", "Chat",
 				"The chat the buddy belongs to.", PURPLE_TYPE_CHAT_CONVERSATION,
 				G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY |
@@ -1885,33 +1857,6 @@
 	g_object_class_install_properties(obj_class, CU_PROP_LAST, cu_properties);
 }
 
-GType
-purple_chat_user_get_type(void)
-{
-	static GType type = 0;
-
-	if(type == 0) {
-		static const GTypeInfo info = {
-			sizeof(PurpleChatUserClass),
-			NULL,
-			NULL,
-			(GClassInitFunc)purple_chat_user_class_init,
-			NULL,
-			NULL,
-			sizeof(PurpleChatUser),
-			0,
-			(GInstanceInitFunc)purple_chat_user_init,
-			NULL,
-		};
-
-		type = g_type_register_static(G_TYPE_OBJECT,
-				"PurpleChatUser",
-				&info, 0);
-	}
-
-	return type;
-}
-
 PurpleChatUser *
 purple_chat_user_new(PurpleChatConversation *chat, const char *name,
 		const char *alias, PurpleChatUserFlags flags)
--- a/libpurple/conversationtypes.h	Fri Dec 14 08:06:02 2018 +0000
+++ b/libpurple/conversationtypes.h	Fri Dec 14 08:25:23 2018 +0000
@@ -241,7 +241,7 @@
  *
  * Returns: The buddy icon.
  */
-PurpleBuddyIcon *purple_im_conversation_get_icon(const PurpleIMConversation *im);
+PurpleBuddyIcon *purple_im_conversation_get_icon(PurpleIMConversation *im);
 
 /**
  * purple_im_conversation_set_typing_state:
@@ -260,7 +260,7 @@
  *
  * Returns: The IM's typing state.
  */
-PurpleIMTypingState purple_im_conversation_get_typing_state(const PurpleIMConversation *im);
+PurpleIMTypingState purple_im_conversation_get_typing_state(PurpleIMConversation *im);
 
 /**
  * purple_im_conversation_start_typing_timeout:
@@ -288,7 +288,7 @@
  *
  * Returns: The timeout.
  */
-guint purple_im_conversation_get_typing_timeout(const PurpleIMConversation *im);
+guint purple_im_conversation_get_typing_timeout(PurpleIMConversation *im);
 
 /**
  * purple_im_conversation_set_type_again:
@@ -313,7 +313,7 @@
  * Returns: The time in seconds since the epoch.  Or 0 if no additional
  *         PURPLE_IM_TYPING message should be sent.
  */
-time_t purple_im_conversation_get_type_again(const PurpleIMConversation *im);
+time_t purple_im_conversation_get_type_again(PurpleIMConversation *im);
 
 /**
  * purple_im_conversation_start_send_typed_timeout:
@@ -339,7 +339,7 @@
  *
  * Returns: The type again timeout interval.
  */
-guint purple_im_conversation_get_send_typed_timeout(const PurpleIMConversation *im);
+guint purple_im_conversation_get_send_typed_timeout(PurpleIMConversation *im);
 
 /**
  * purple_im_conversation_update_typing:
@@ -384,7 +384,7 @@
  *          The list of users. Use g_list_free() when done
  *          using the list.
  */
-GList *purple_chat_conversation_get_users(const PurpleChatConversation *chat);
+GList *purple_chat_conversation_get_users(PurpleChatConversation *chat);
 
 /**
  * purple_chat_conversation_get_users_count:
@@ -395,7 +395,7 @@
  * Returns: The count of users in the chat room.
  */
 guint
-purple_chat_conversation_get_users_count(const PurpleChatConversation *chat);
+purple_chat_conversation_get_users_count(PurpleChatConversation *chat);
 
 /**
  * purple_chat_conversation_ignore:
@@ -437,7 +437,7 @@
  * Returns: (element-type char*) (transfer none):
  *          The list of ignored users.
  */
-GList *purple_chat_conversation_get_ignored(const PurpleChatConversation *chat);
+GList *purple_chat_conversation_get_ignored(PurpleChatConversation *chat);
 
 /**
  * purple_chat_conversation_get_ignored_user:
@@ -454,7 +454,7 @@
  * Returns: The ignored user if found, complete with prefixes, or %NULL
  *         if not found.
  */
-const char *purple_chat_conversation_get_ignored_user(const PurpleChatConversation *chat,
+const char *purple_chat_conversation_get_ignored_user(PurpleChatConversation *chat,
 											const char *user);
 
 /**
@@ -466,7 +466,7 @@
  *
  * Returns: %TRUE if the user is in the ignore list; %FALSE otherwise.
  */
-gboolean purple_chat_conversation_is_ignored_user(const PurpleChatConversation *chat,
+gboolean purple_chat_conversation_is_ignored_user(PurpleChatConversation *chat,
 										const char *user);
 
 /**
@@ -488,7 +488,7 @@
  *
  * Returns: The chat's topic.
  */
-const char *purple_chat_conversation_get_topic(const PurpleChatConversation *chat);
+const char *purple_chat_conversation_get_topic(PurpleChatConversation *chat);
 
 /**
  * purple_chat_conversation_get_topic_who:
@@ -498,7 +498,7 @@
  *
  * Returns: Who set the topic.
  */
-const char *purple_chat_conversation_get_topic_who(const PurpleChatConversation *chat);
+const char *purple_chat_conversation_get_topic_who(PurpleChatConversation *chat);
 
 /**
  * purple_chat_conversation_set_id:
@@ -517,7 +517,7 @@
  *
  * Returns: The ID.
  */
-int purple_chat_conversation_get_id(const PurpleChatConversation *chat);
+int purple_chat_conversation_get_id(PurpleChatConversation *chat);
 
 /**
  * purple_chat_conversation_add_user:
@@ -714,7 +714,7 @@
  * Returns: (transfer none):
  *          The chat conversation that the buddy belongs to.
  */
-PurpleChatConversation *purple_chat_user_get_chat(const PurpleChatUser *cb);
+PurpleChatConversation *purple_chat_user_get_chat(PurpleChatUser *cb);
 
 /**
  * purple_chat_user_new:
@@ -750,7 +750,7 @@
  *         convenience field provided to the UIs--it is not
  *         used by the libpurple core.
  */
-gpointer purple_chat_user_get_ui_data(const PurpleChatUser *cb);
+gpointer purple_chat_user_get_ui_data(PurpleChatUser *cb);
 
 /**
  * purple_chat_user_get_alias:
@@ -760,7 +760,7 @@
  *
  * Returns: The alias of the chat user.
  */
-const char *purple_chat_user_get_alias(const PurpleChatUser *cb);
+const char *purple_chat_user_get_alias(PurpleChatUser *cb);
 
 /**
  * purple_chat_user_get_name:
@@ -770,7 +770,7 @@
  *
  * Returns: The name of the chat user.
  */
-const char *purple_chat_user_get_name(const PurpleChatUser *cb);
+const char *purple_chat_user_get_name(PurpleChatUser *cb);
 
 /**
  * purple_chat_user_set_flags:
@@ -789,7 +789,7 @@
  *
  * Returns: The flags of the chat user.
  */
-PurpleChatUserFlags purple_chat_user_get_flags(const PurpleChatUser *cb);
+PurpleChatUserFlags purple_chat_user_get_flags(PurpleChatUser *cb);
 
 /**
  * purple_chat_user_is_buddy:
@@ -799,7 +799,7 @@
  *
  * Returns: TRUE if the chat user is on the buddy list.
  */
-gboolean purple_chat_user_is_buddy(const PurpleChatUser *cb);
+gboolean purple_chat_user_is_buddy(PurpleChatUser *cb);
 
 G_END_DECLS
 
--- a/libpurple/plugins.c	Fri Dec 14 08:06:02 2018 +0000
+++ b/libpurple/plugins.c	Fri Dec 14 08:25:23 2018 +0000
@@ -26,9 +26,6 @@
 #include "enums.h"
 #include "plugins.h"
 
-#define PURPLE_PLUGIN_INFO_GET_PRIVATE(obj) \
-	(G_TYPE_INSTANCE_GET_PRIVATE((obj), PURPLE_TYPE_PLUGIN_INFO, PurplePluginInfoPrivate))
-
 typedef struct _PurplePluginInfoPrivate  PurplePluginInfoPrivate;
 
 /**************************************************************************
@@ -69,7 +66,13 @@
 	PROP_LAST
 };
 
-static GObjectClass *parent_class;
+G_DEFINE_TYPE_WITH_PRIVATE(PurplePluginInfo, purple_plugin_info,
+#ifdef PURPLE_PLUGINS
+		GPLUGIN_TYPE_PLUGIN_INFO
+#else
+		G_TYPE_OBJECT
+#endif
+		);
 
 /**************************************************************************
  * Globals
@@ -96,7 +99,7 @@
 	if (!info)
 		return TRUE; /* a GPlugin internal plugin */
 
-	priv = PURPLE_PLUGIN_INFO_GET_PRIVATE(info);
+	priv = purple_plugin_info_get_instance_private(info);
 
 	if (priv->error) {
 		purple_debug_error("plugins", "Failed to load plugin %s: %s",
@@ -159,7 +162,7 @@
 	if (!info)
 		return; /* a GPlugin internal plugin */
 
-	priv = PURPLE_PLUGIN_INFO_GET_PRIVATE(info);
+	priv = purple_plugin_info_get_instance_private(info);
 
 	/* cancel any pending dialogs the plugin has */
 	purple_request_close_with_handle(plugin);
@@ -365,7 +368,7 @@
  **************************************************************************/
 /* GObject initialization function */
 static void
-purple_plugin_info_init(GTypeInstance *instance, gpointer klass)
+purple_plugin_info_init(PurplePluginInfo *info)
 {
 }
 
@@ -375,7 +378,8 @@
 		GParamSpec *pspec)
 {
 	PurplePluginInfo *info = PURPLE_PLUGIN_INFO(obj);
-	PurplePluginInfoPrivate *priv = PURPLE_PLUGIN_INFO_GET_PRIVATE(info);
+	PurplePluginInfoPrivate *priv =
+			purple_plugin_info_get_instance_private(info);
 
 	switch (param_id) {
 		case PROP_UI_REQUIREMENT:
@@ -440,11 +444,12 @@
 purple_plugin_info_constructed(GObject *object)
 {
 	PurplePluginInfo *info = PURPLE_PLUGIN_INFO(object);
-	PurplePluginInfoPrivate *priv = PURPLE_PLUGIN_INFO_GET_PRIVATE(info);
+	PurplePluginInfoPrivate *priv =
+			purple_plugin_info_get_instance_private(info);
 	const char *id = purple_plugin_info_get_id(info);
 	guint32 version;
 
-	parent_class->constructed(object);
+	G_OBJECT_CLASS(purple_plugin_info_parent_class)->constructed(object);
 
 	if (id == NULL || *id == '\0')
 		priv->error = g_strdup(_("This plugin has not defined an ID."));
@@ -476,12 +481,14 @@
 static void
 purple_plugin_info_finalize(GObject *object)
 {
-	PurplePluginInfoPrivate *priv = PURPLE_PLUGIN_INFO_GET_PRIVATE(object);
+	PurplePluginInfoPrivate *priv =
+			purple_plugin_info_get_instance_private(
+					PURPLE_PLUGIN_INFO(object));
 
 	g_free(priv->ui_requirement);
 	g_free(priv->error);
 
-	parent_class->finalize(object);
+	G_OBJECT_CLASS(purple_plugin_info_parent_class)->finalize(object);
 }
 
 /* Class initializer function */
@@ -489,10 +496,6 @@
 {
 	GObjectClass *obj_class = G_OBJECT_CLASS(klass);
 
-	parent_class = g_type_class_peek_parent(klass);
-
-	g_type_class_add_private(klass, sizeof(PurplePluginInfoPrivate));
-
 	obj_class->constructed = purple_plugin_info_constructed;
 	obj_class->finalize    = purple_plugin_info_finalize;
 
@@ -546,31 +549,6 @@
 /**************************************************************************
  * PluginInfo API
  **************************************************************************/
-GType
-purple_plugin_info_get_type(void)
-{
-	static GType type = 0;
-
-	if (G_UNLIKELY(type == 0)) {
-		static const GTypeInfo info = {
-			.class_size = sizeof(PurplePluginInfoClass),
-			.class_init = (GClassInitFunc)purple_plugin_info_class_init,
-			.instance_size = sizeof(PurplePluginInfo),
-			.instance_init = (GInstanceInitFunc)purple_plugin_info_init,
-		};
-
-		type = g_type_register_static(
-#ifdef PURPLE_PLUGINS
-		                              GPLUGIN_TYPE_PLUGIN_INFO,
-#else
-		                              G_TYPE_OBJECT,
-#endif
-		                              "PurplePluginInfo", &info, 0);
-	}
-
-	return type;
-}
-
 PurplePluginInfo *
 purple_plugin_info_new(const char *first_property, ...)
 {
@@ -772,9 +750,10 @@
 }
 
 PurplePluginActionsCb
-purple_plugin_info_get_actions_cb(const PurplePluginInfo *info)
+purple_plugin_info_get_actions_cb(PurplePluginInfo *info)
 {
-	PurplePluginInfoPrivate *priv = PURPLE_PLUGIN_INFO_GET_PRIVATE(info);
+	PurplePluginInfoPrivate *priv =
+			purple_plugin_info_get_instance_private(info);
 
 	g_return_val_if_fail(priv != NULL, NULL);
 
@@ -782,9 +761,10 @@
 }
 
 PurplePluginExtraCb
-purple_plugin_info_get_extra_cb(const PurplePluginInfo *info)
+purple_plugin_info_get_extra_cb(PurplePluginInfo *info)
 {
-	PurplePluginInfoPrivate *priv = PURPLE_PLUGIN_INFO_GET_PRIVATE(info);
+	PurplePluginInfoPrivate *priv =
+			purple_plugin_info_get_instance_private(info);
 
 	g_return_val_if_fail(priv != NULL, NULL);
 
@@ -792,9 +772,10 @@
 }
 
 PurplePluginPrefFrameCb
-purple_plugin_info_get_pref_frame_cb(const PurplePluginInfo *info)
+purple_plugin_info_get_pref_frame_cb(PurplePluginInfo *info)
 {
-	PurplePluginInfoPrivate *priv = PURPLE_PLUGIN_INFO_GET_PRIVATE(info);
+	PurplePluginInfoPrivate *priv =
+			purple_plugin_info_get_instance_private(info);
 
 	g_return_val_if_fail(priv != NULL, NULL);
 
@@ -802,9 +783,10 @@
 }
 
 PurplePluginPrefRequestCb
-purple_plugin_info_get_pref_request_cb(const PurplePluginInfo *info)
+purple_plugin_info_get_pref_request_cb(PurplePluginInfo *info)
 {
-	PurplePluginInfoPrivate *priv = PURPLE_PLUGIN_INFO_GET_PRIVATE(info);
+	PurplePluginInfoPrivate *priv =
+			purple_plugin_info_get_instance_private(info);
 
 	g_return_val_if_fail(priv != NULL, NULL);
 
@@ -812,9 +794,10 @@
 }
 
 PurplePluginInfoFlags
-purple_plugin_info_get_flags(const PurplePluginInfo *info)
+purple_plugin_info_get_flags(PurplePluginInfo *info)
 {
-	PurplePluginInfoPrivate *priv = PURPLE_PLUGIN_INFO_GET_PRIVATE(info);
+	PurplePluginInfoPrivate *priv =
+			purple_plugin_info_get_instance_private(info);
 
 	g_return_val_if_fail(priv != NULL, 0);
 
@@ -822,9 +805,10 @@
 }
 
 const gchar *
-purple_plugin_info_get_error(const PurplePluginInfo *info)
+purple_plugin_info_get_error(PurplePluginInfo *info)
 {
-	PurplePluginInfoPrivate *priv = PURPLE_PLUGIN_INFO_GET_PRIVATE(info);
+	PurplePluginInfoPrivate *priv =
+			purple_plugin_info_get_instance_private(info);
 
 	g_return_val_if_fail(priv != NULL, NULL);
 
@@ -964,7 +948,7 @@
 			continue;
 
 		info = purple_plugin_get_info(plugin);
-		priv = PURPLE_PLUGIN_INFO_GET_PRIVATE(info);
+		priv = purple_plugin_info_get_instance_private(info);
 
 		if (!priv->unloaded && purple_plugin_info_get_flags(info) &
 				PURPLE_PLUGIN_INFO_FLAGS_AUTO_LOAD) {
--- a/libpurple/plugins.h	Fri Dec 14 08:06:02 2018 +0000
+++ b/libpurple/plugins.h	Fri Dec 14 08:25:23 2018 +0000
@@ -833,7 +833,7 @@
  *          instances corresponding to the actions a plugin can perform.
  */
 PurplePluginActionsCb
-purple_plugin_info_get_actions_cb(const PurplePluginInfo *info);
+purple_plugin_info_get_actions_cb(PurplePluginInfo *info);
 
 /**
  * purple_plugin_info_get_extra_cb:
@@ -845,7 +845,7 @@
  * Returns: The callback that returns extra information about a plugin.
  */
 PurplePluginExtraCb
-purple_plugin_info_get_extra_cb(const PurplePluginInfo *info);
+purple_plugin_info_get_extra_cb(PurplePluginInfo *info);
 
 /**
  * purple_plugin_info_get_pref_frame_cb:
@@ -857,7 +857,7 @@
  * Returns: The callback that returns the preferences frame.
  */
 PurplePluginPrefFrameCb
-purple_plugin_info_get_pref_frame_cb(const PurplePluginInfo *info);
+purple_plugin_info_get_pref_frame_cb(PurplePluginInfo *info);
 
 /**
  * purple_plugin_info_get_pref_request_cb:
@@ -869,7 +869,7 @@
  * Returns: The callback that returns the preferences request handle.
  */
 PurplePluginPrefRequestCb
-purple_plugin_info_get_pref_request_cb(const PurplePluginInfo *info);
+purple_plugin_info_get_pref_request_cb(PurplePluginInfo *info);
 
 /**
  * purple_plugin_info_get_flags:
@@ -880,7 +880,7 @@
  * Returns: The flags of the plugin.
  */
 PurplePluginInfoFlags
-purple_plugin_info_get_flags(const PurplePluginInfo *info);
+purple_plugin_info_get_flags(PurplePluginInfo *info);
 
 /**
  * purple_plugin_info_get_error:
@@ -891,7 +891,7 @@
  *
  * Returns: The plugin info error, or %NULL.
  */
-const gchar *purple_plugin_info_get_error(const PurplePluginInfo *info);
+const gchar *purple_plugin_info_get_error(PurplePluginInfo *info);
 
 /**
  * purple_plugin_info_set_ui_data:
--- a/libpurple/whiteboard.c	Fri Dec 14 08:06:02 2018 +0000
+++ b/libpurple/whiteboard.c	Fri Dec 14 08:25:23 2018 +0000
@@ -26,9 +26,6 @@
 #include "whiteboard.h"
 #include "protocol.h"
 
-#define PURPLE_WHITEBOARD_GET_PRIVATE(obj) \
-	(G_TYPE_INSTANCE_GET_PRIVATE((obj), PURPLE_TYPE_WHITEBOARD, PurpleWhiteboardPrivate))
-
 typedef struct _PurpleWhiteboardPrivate  PurpleWhiteboardPrivate;
 
 /* Private data for a whiteboard */
@@ -62,9 +59,10 @@
 /******************************************************************************
  * Globals
  *****************************************************************************/
-static GObjectClass *parent_class;
 static GParamSpec *properties[PROP_LAST];
 
+G_DEFINE_TYPE_WITH_PRIVATE(PurpleWhiteboard, purple_whiteboard, G_TYPE_OBJECT);
+
 static PurpleWhiteboardUiOps *whiteboard_ui_ops = NULL;
 /* static PurpleWhiteboardOps *whiteboard_protocol_ops = NULL; */
 
@@ -109,25 +107,28 @@
 
 void purple_whiteboard_set_protocol_ops(PurpleWhiteboard *wb, PurpleWhiteboardOps *ops)
 {
-	PurpleWhiteboardPrivate *priv = PURPLE_WHITEBOARD_GET_PRIVATE(wb);
+	PurpleWhiteboardPrivate *priv =
+			purple_whiteboard_get_instance_private(wb);
 
 	g_return_if_fail(priv != NULL);
 
 	priv->protocol_ops = ops;
 }
 
-PurpleAccount *purple_whiteboard_get_account(const PurpleWhiteboard *wb)
+PurpleAccount *purple_whiteboard_get_account(PurpleWhiteboard *wb)
 {
-	PurpleWhiteboardPrivate *priv = PURPLE_WHITEBOARD_GET_PRIVATE(wb);
+	PurpleWhiteboardPrivate *priv =
+			purple_whiteboard_get_instance_private(wb);
 
 	g_return_val_if_fail(priv != NULL, NULL);
 
 	return priv->account;
 }
 
-const char *purple_whiteboard_get_who(const PurpleWhiteboard *wb)
+const char *purple_whiteboard_get_who(PurpleWhiteboard *wb)
 {
-	PurpleWhiteboardPrivate *priv = PURPLE_WHITEBOARD_GET_PRIVATE(wb);
+	PurpleWhiteboardPrivate *priv =
+			purple_whiteboard_get_instance_private(wb);
 
 	g_return_val_if_fail(priv != NULL, NULL);
 
@@ -136,7 +137,8 @@
 
 void purple_whiteboard_set_state(PurpleWhiteboard *wb, int state)
 {
-	PurpleWhiteboardPrivate *priv = PURPLE_WHITEBOARD_GET_PRIVATE(wb);
+	PurpleWhiteboardPrivate *priv =
+			purple_whiteboard_get_instance_private(wb);
 
 	g_return_if_fail(priv != NULL);
 
@@ -145,9 +147,10 @@
 	g_object_notify_by_pspec(G_OBJECT(wb), properties[PROP_STATE]);
 }
 
-int purple_whiteboard_get_state(const PurpleWhiteboard *wb)
+int purple_whiteboard_get_state(PurpleWhiteboard *wb)
 {
-	PurpleWhiteboardPrivate *priv = PURPLE_WHITEBOARD_GET_PRIVATE(wb);
+	PurpleWhiteboardPrivate *priv =
+			purple_whiteboard_get_instance_private(wb);
 
 	g_return_val_if_fail(priv != NULL, -1);
 
@@ -177,7 +180,7 @@
 	while(l != NULL)
 	{
 		wb = l->data;
-		priv = PURPLE_WHITEBOARD_GET_PRIVATE(wb);
+		priv = purple_whiteboard_get_instance_private(wb);
 
 		if(priv->account == account && purple_strequal(priv->who, who))
 			return wb;
@@ -193,9 +196,10 @@
 	g_list_free(draw_list);
 }
 
-gboolean purple_whiteboard_get_dimensions(const PurpleWhiteboard *wb, int *width, int *height)
+gboolean purple_whiteboard_get_dimensions(PurpleWhiteboard *wb, int *width, int *height)
 {
-	PurpleWhiteboardPrivate *priv = PURPLE_WHITEBOARD_GET_PRIVATE(wb);
+	PurpleWhiteboardPrivate *priv =
+			purple_whiteboard_get_instance_private(wb);
 	PurpleWhiteboardOps *protocol_ops;
 
 	g_return_val_if_fail(priv != NULL, FALSE);
@@ -219,7 +223,8 @@
 
 void purple_whiteboard_send_draw_list(PurpleWhiteboard *wb, GList *list)
 {
-	PurpleWhiteboardPrivate *priv = PURPLE_WHITEBOARD_GET_PRIVATE(wb);
+	PurpleWhiteboardPrivate *priv =
+			purple_whiteboard_get_instance_private(wb);
 	PurpleWhiteboardOps *protocol_ops;
 
 	g_return_if_fail(priv != NULL);
@@ -250,7 +255,8 @@
 
 void purple_whiteboard_send_clear(PurpleWhiteboard *wb)
 {
-	PurpleWhiteboardPrivate *priv = PURPLE_WHITEBOARD_GET_PRIVATE(wb);
+	PurpleWhiteboardPrivate *priv =
+			purple_whiteboard_get_instance_private(wb);
 	PurpleWhiteboardOps *protocol_ops;
 
 	g_return_if_fail(priv != NULL);
@@ -263,7 +269,8 @@
 
 void purple_whiteboard_send_brush(PurpleWhiteboard *wb, int size, int color)
 {
-	PurpleWhiteboardPrivate *priv = PURPLE_WHITEBOARD_GET_PRIVATE(wb);
+	PurpleWhiteboardPrivate *priv =
+			purple_whiteboard_get_instance_private(wb);
 	PurpleWhiteboardOps *protocol_ops;
 
 	g_return_if_fail(priv != NULL);
@@ -274,9 +281,10 @@
 		protocol_ops->set_brush(wb, size, color);
 }
 
-gboolean purple_whiteboard_get_brush(const PurpleWhiteboard *wb, int *size, int *color)
+gboolean purple_whiteboard_get_brush(PurpleWhiteboard *wb, int *size, int *color)
 {
-	PurpleWhiteboardPrivate *priv = PURPLE_WHITEBOARD_GET_PRIVATE(wb);
+	PurpleWhiteboardPrivate *priv =
+			purple_whiteboard_get_instance_private(wb);
 	PurpleWhiteboardOps *protocol_ops;
 
 	g_return_val_if_fail(priv != NULL, FALSE);
@@ -297,9 +305,10 @@
 		whiteboard_ui_ops->set_brush(wb, size, color);
 }
 
-GList *purple_whiteboard_get_draw_list(const PurpleWhiteboard *wb)
+GList *purple_whiteboard_get_draw_list(PurpleWhiteboard *wb)
 {
-	PurpleWhiteboardPrivate *priv = PURPLE_WHITEBOARD_GET_PRIVATE(wb);
+	PurpleWhiteboardPrivate *priv =
+			purple_whiteboard_get_instance_private(wb);
 
 	g_return_val_if_fail(priv != NULL, NULL);
 
@@ -308,7 +317,8 @@
 
 void purple_whiteboard_set_draw_list(PurpleWhiteboard *wb, GList* draw_list)
 {
-	PurpleWhiteboardPrivate *priv = PURPLE_WHITEBOARD_GET_PRIVATE(wb);
+	PurpleWhiteboardPrivate *priv =
+			purple_whiteboard_get_instance_private(wb);
 
 	g_return_if_fail(priv != NULL);
 
@@ -319,16 +329,18 @@
 
 void purple_whiteboard_set_protocol_data(PurpleWhiteboard *wb, gpointer proto_data)
 {
-	PurpleWhiteboardPrivate *priv = PURPLE_WHITEBOARD_GET_PRIVATE(wb);
+	PurpleWhiteboardPrivate *priv =
+			purple_whiteboard_get_instance_private(wb);
 
 	g_return_if_fail(priv != NULL);
 
 	priv->proto_data = proto_data;
 }
 
-gpointer purple_whiteboard_get_protocol_data(const PurpleWhiteboard *wb)
+gpointer purple_whiteboard_get_protocol_data(PurpleWhiteboard *wb)
 {
-	PurpleWhiteboardPrivate *priv = PURPLE_WHITEBOARD_GET_PRIVATE(wb);
+	PurpleWhiteboardPrivate *priv =
+			purple_whiteboard_get_instance_private(wb);
 
 	g_return_val_if_fail(priv != NULL, NULL);
 
@@ -342,7 +354,7 @@
 	wb->ui_data = ui_data;
 }
 
-gpointer purple_whiteboard_get_ui_data(const PurpleWhiteboard *wb)
+gpointer purple_whiteboard_get_ui_data(PurpleWhiteboard *wb)
 {
 	g_return_val_if_fail(PURPLE_IS_WHITEBOARD(wb), NULL);
 
@@ -358,7 +370,8 @@
 		GParamSpec *pspec)
 {
 	PurpleWhiteboard *wb = PURPLE_WHITEBOARD(obj);
-	PurpleWhiteboardPrivate *priv = PURPLE_WHITEBOARD_GET_PRIVATE(wb);
+	PurpleWhiteboardPrivate *priv =
+			purple_whiteboard_get_instance_private(wb);
 
 	switch (param_id) {
 		case PROP_STATE:
@@ -405,15 +418,21 @@
 	}
 }
 
+static void
+purple_whiteboard_init(PurpleWhiteboard *wb)
+{
+}
+
 /* Called when done constructing */
 static void
 purple_whiteboard_constructed(GObject *object)
 {
 	PurpleWhiteboard *wb = PURPLE_WHITEBOARD(object);
-	PurpleWhiteboardPrivate *priv = PURPLE_WHITEBOARD_GET_PRIVATE(wb);
+	PurpleWhiteboardPrivate *priv =
+			purple_whiteboard_get_instance_private(wb);
 	PurpleProtocol *protocol;
 
-	parent_class->constructed(object);
+	G_OBJECT_CLASS(purple_whiteboard_parent_class)->constructed(object);
 
 	protocol = purple_connection_get_protocol(
 				purple_account_get_connection(priv->account));
@@ -432,7 +451,8 @@
 purple_whiteboard_finalize(GObject *object)
 {
 	PurpleWhiteboard *wb = PURPLE_WHITEBOARD(object);
-	PurpleWhiteboardPrivate *priv = PURPLE_WHITEBOARD_GET_PRIVATE(wb);
+	PurpleWhiteboardPrivate *priv =
+			purple_whiteboard_get_instance_private(wb);
 
 	if(wb->ui_data)
 	{
@@ -449,7 +469,7 @@
 
 	g_free(priv->who);
 
-	parent_class->finalize(object);
+	G_OBJECT_CLASS(purple_whiteboard_parent_class)->finalize(object);
 }
 
 /* Class initializer function */
@@ -458,8 +478,6 @@
 {
 	GObjectClass *obj_class = G_OBJECT_CLASS(klass);
 
-	parent_class = g_type_class_peek_parent(klass);
-
 	obj_class->finalize = purple_whiteboard_finalize;
 	obj_class->constructed = purple_whiteboard_constructed;
 
@@ -467,8 +485,6 @@
 	obj_class->get_property = purple_whiteboard_get_property;
 	obj_class->set_property = purple_whiteboard_set_property;
 
-	g_type_class_add_private(klass, sizeof(PurpleWhiteboardPrivate));
-
 	properties[PROP_STATE] = g_param_spec_int("state", "State",
 				"State of the whiteboard.",
 				G_MININT, G_MAXINT, 0,
@@ -491,32 +507,6 @@
 	g_object_class_install_properties(obj_class, PROP_LAST, properties);
 }
 
-GType
-purple_whiteboard_get_type(void)
-{
-	static GType type = 0;
-
-	if(type == 0) {
-		static const GTypeInfo info = {
-			sizeof(PurpleWhiteboardClass),
-			NULL,
-			NULL,
-			(GClassInitFunc)purple_whiteboard_class_init,
-			NULL,
-			NULL,
-			sizeof(PurpleWhiteboard),
-			0,
-			NULL,
-			NULL,
-		};
-
-		type = g_type_register_static(G_TYPE_OBJECT, "PurpleWhiteboard",
-				&info, 0);
-	}
-
-	return type;
-}
-
 PurpleWhiteboard *purple_whiteboard_new(PurpleAccount *account, const char *who, int state)
 {
 	PurpleWhiteboard *wb;
--- a/libpurple/whiteboard.h	Fri Dec 14 08:06:02 2018 +0000
+++ b/libpurple/whiteboard.h	Fri Dec 14 08:25:23 2018 +0000
@@ -195,7 +195,7 @@
  *
  * Returns: The whiteboard's account.
  */
-PurpleAccount *purple_whiteboard_get_account(const PurpleWhiteboard *wb);
+PurpleAccount *purple_whiteboard_get_account(PurpleWhiteboard *wb);
 
 /**
  * purple_whiteboard_get_who:
@@ -205,7 +205,7 @@
  *
  * Returns: Who you're drawing with.
  */
-const char *purple_whiteboard_get_who(const PurpleWhiteboard *wb);
+const char *purple_whiteboard_get_who(PurpleWhiteboard *wb);
 
 /**
  * purple_whiteboard_set_state:
@@ -224,7 +224,7 @@
  *
  * Returns: The state of the whiteboard.
  */
-int purple_whiteboard_get_state(const PurpleWhiteboard *wb);
+int purple_whiteboard_get_state(PurpleWhiteboard *wb);
 
 /**
  * purple_whiteboard_start:
@@ -263,7 +263,7 @@
  *
  * Returns: TRUE if the values of width and height were set.
  */
-gboolean purple_whiteboard_get_dimensions(const PurpleWhiteboard *wb, int *width, int *height);
+gboolean purple_whiteboard_get_dimensions(PurpleWhiteboard *wb, int *width, int *height);
 
 /**
  * purple_whiteboard_set_dimensions:
@@ -346,7 +346,7 @@
  *
  * Returns:	TRUE if the size and color were set.
  */
-gboolean purple_whiteboard_get_brush(const PurpleWhiteboard *wb, int *size, int *color);
+gboolean purple_whiteboard_get_brush(PurpleWhiteboard *wb, int *size, int *color);
 
 /**
  * purple_whiteboard_set_brush:
@@ -366,7 +366,7 @@
  *
  * Returns: The drawing list
  */
-GList *purple_whiteboard_get_draw_list(const PurpleWhiteboard *wb);
+GList *purple_whiteboard_get_draw_list(PurpleWhiteboard *wb);
 
 /**
  * purple_whiteboard_set_draw_list:
@@ -394,7 +394,7 @@
  *
  * Returns: The protocol data for the whiteboard.
  */
-gpointer purple_whiteboard_get_protocol_data(const PurpleWhiteboard *wb);
+gpointer purple_whiteboard_get_protocol_data(PurpleWhiteboard *wb);
 
 /**
  * purple_whiteboard_set_ui_data:
@@ -415,7 +415,7 @@
  *         convenience field provided to the UIs--it is not
  *         used by the libpurple core.
  */
-gpointer purple_whiteboard_get_ui_data(const PurpleWhiteboard *wb);
+gpointer purple_whiteboard_get_ui_data(PurpleWhiteboard *wb);
 
 G_END_DECLS
 
--- a/libpurple/xfer.c	Fri Dec 14 08:06:02 2018 +0000
+++ b/libpurple/xfer.c	Fri Dec 14 08:25:23 2018 +0000
@@ -36,9 +36,6 @@
 #define FT_INITIAL_BUFFER_SIZE 4096
 #define FT_MAX_BUFFER_SIZE     65535
 
-#define PURPLE_XFER_GET_PRIVATE(obj) \
-	(G_TYPE_INSTANCE_GET_PRIVATE((obj), PURPLE_TYPE_XFER, PurpleXferPrivate))
-
 typedef struct _PurpleXferPrivate  PurpleXferPrivate;
 
 static PurpleXferUiOps *xfer_ui_ops = NULL;
@@ -140,9 +137,10 @@
 	PROP_LAST
 };
 
-static GObjectClass *parent_class;
 static GParamSpec *properties[PROP_LAST];
 
+G_DEFINE_TYPE_WITH_PRIVATE(PurpleXfer, purple_xfer, G_TYPE_OBJECT);
+
 static int purple_xfer_choose_file(PurpleXfer *xfer);
 
 static const gchar *
@@ -172,7 +170,7 @@
 void
 purple_xfer_set_status(PurpleXfer *xfer, PurpleXferStatus status)
 {
-	PurpleXferPrivate *priv = PURPLE_XFER_GET_PRIVATE(xfer);
+	PurpleXferPrivate *priv = purple_xfer_get_instance_private(xfer);
 
 	g_return_if_fail(priv != NULL);
 
@@ -236,7 +234,7 @@
 	char *escaped;
 	gconstpointer thumbnail_data;
 	gsize size;
-	PurpleXferPrivate *priv = PURPLE_XFER_GET_PRIVATE(xfer);
+	PurpleXferPrivate *priv = purple_xfer_get_instance_private(xfer);
 
 	g_return_if_fail(priv != NULL);
 	g_return_if_fail(message != NULL);
@@ -298,7 +296,7 @@
 	gchar *msg = NULL, *utf8;
 	PurpleXferType xfer_type = purple_xfer_get_xfer_type(xfer);
 	PurpleAccount *account = purple_xfer_get_account(xfer);
-	PurpleXferPrivate *priv = PURPLE_XFER_GET_PRIVATE(xfer);
+	PurpleXferPrivate *priv = purple_xfer_get_instance_private(xfer);
 
 	utf8 = g_filename_to_utf8(filename, -1, NULL, NULL, NULL);
 	switch(xfer_type) {
@@ -458,7 +456,7 @@
 static void
 purple_xfer_ask_recv(PurpleXfer *xfer)
 {
-	PurpleXferPrivate *priv = PURPLE_XFER_GET_PRIVATE(xfer);
+	PurpleXferPrivate *priv = purple_xfer_get_instance_private(xfer);
 	char *buf, *size_buf;
 	goffset size;
 	gconstpointer thumb;
@@ -525,7 +523,7 @@
 static void
 purple_xfer_ask_accept(PurpleXfer *xfer)
 {
-	PurpleXferPrivate *priv = PURPLE_XFER_GET_PRIVATE(xfer);
+	PurpleXferPrivate *priv = purple_xfer_get_instance_private(xfer);
 	char *buf, *buf2 = NULL;
 	PurpleBuddy *buddy = purple_blist_find_buddy(priv->account, priv->who);
 
@@ -548,7 +546,7 @@
 void
 purple_xfer_request(PurpleXfer *xfer)
 {
-	PurpleXferPrivate *priv = PURPLE_XFER_GET_PRIVATE(xfer);
+	PurpleXferPrivate *priv = purple_xfer_get_instance_private(xfer);
 
 	g_return_if_fail(priv != NULL);
 	g_return_if_fail(priv->ops.init != NULL);
@@ -592,7 +590,7 @@
 void
 purple_xfer_request_accepted(PurpleXfer *xfer, const char *filename)
 {
-	PurpleXferPrivate *priv = PURPLE_XFER_GET_PRIVATE(xfer);
+	PurpleXferPrivate *priv = purple_xfer_get_instance_private(xfer);
 	PurpleXferType type;
 	GStatBuf st;
 	char *msg, *utf8, *base;
@@ -683,7 +681,7 @@
 void
 purple_xfer_request_denied(PurpleXfer *xfer)
 {
-	PurpleXferPrivate *priv = PURPLE_XFER_GET_PRIVATE(xfer);
+	PurpleXferPrivate *priv = purple_xfer_get_instance_private(xfer);
 
 	g_return_if_fail(priv != NULL);
 
@@ -697,7 +695,7 @@
 
 int purple_xfer_get_fd(PurpleXfer *xfer)
 {
-	PurpleXferPrivate *priv = PURPLE_XFER_GET_PRIVATE(xfer);
+	PurpleXferPrivate *priv = purple_xfer_get_instance_private(xfer);
 
 	g_return_val_if_fail(priv != NULL, 0);
 
@@ -706,7 +704,7 @@
 
 int purple_xfer_get_watcher(PurpleXfer *xfer)
 {
-	PurpleXferPrivate *priv = PURPLE_XFER_GET_PRIVATE(xfer);
+	PurpleXferPrivate *priv = purple_xfer_get_instance_private(xfer);
 
 	g_return_val_if_fail(priv != NULL, 0);
 
@@ -714,9 +712,9 @@
 }
 
 PurpleXferType
-purple_xfer_get_xfer_type(const PurpleXfer *xfer)
+purple_xfer_get_xfer_type(PurpleXfer *xfer)
 {
-	PurpleXferPrivate *priv = PURPLE_XFER_GET_PRIVATE(xfer);
+	PurpleXferPrivate *priv = purple_xfer_get_instance_private(xfer);
 
 	g_return_val_if_fail(priv != NULL, PURPLE_XFER_TYPE_UNKNOWN);
 
@@ -724,9 +722,9 @@
 }
 
 PurpleAccount *
-purple_xfer_get_account(const PurpleXfer *xfer)
+purple_xfer_get_account(PurpleXfer *xfer)
 {
-	PurpleXferPrivate *priv = PURPLE_XFER_GET_PRIVATE(xfer);
+	PurpleXferPrivate *priv = purple_xfer_get_instance_private(xfer);
 
 	g_return_val_if_fail(priv != NULL, NULL);
 
@@ -736,7 +734,7 @@
 void
 purple_xfer_set_remote_user(PurpleXfer *xfer, const char *who)
 {
-	PurpleXferPrivate *priv = PURPLE_XFER_GET_PRIVATE(xfer);
+	PurpleXferPrivate *priv = purple_xfer_get_instance_private(xfer);
 
 	g_return_if_fail(priv != NULL);
 
@@ -747,9 +745,9 @@
 }
 
 const char *
-purple_xfer_get_remote_user(const PurpleXfer *xfer)
+purple_xfer_get_remote_user(PurpleXfer *xfer)
 {
-	PurpleXferPrivate *priv = PURPLE_XFER_GET_PRIVATE(xfer);
+	PurpleXferPrivate *priv = purple_xfer_get_instance_private(xfer);
 
 	g_return_val_if_fail(priv != NULL, NULL);
 
@@ -757,9 +755,9 @@
 }
 
 PurpleXferStatus
-purple_xfer_get_status(const PurpleXfer *xfer)
+purple_xfer_get_status(PurpleXfer *xfer)
 {
-	PurpleXferPrivate *priv = PURPLE_XFER_GET_PRIVATE(xfer);
+	PurpleXferPrivate *priv = purple_xfer_get_instance_private(xfer);
 
 	g_return_val_if_fail(priv != NULL, PURPLE_XFER_STATUS_UNKNOWN);
 
@@ -767,7 +765,7 @@
 }
 
 gboolean
-purple_xfer_is_cancelled(const PurpleXfer *xfer)
+purple_xfer_is_cancelled(PurpleXfer *xfer)
 {
 	g_return_val_if_fail(PURPLE_IS_XFER(xfer), TRUE);
 
@@ -779,7 +777,7 @@
 }
 
 gboolean
-purple_xfer_is_completed(const PurpleXfer *xfer)
+purple_xfer_is_completed(PurpleXfer *xfer)
 {
 	g_return_val_if_fail(PURPLE_IS_XFER(xfer), TRUE);
 
@@ -787,9 +785,9 @@
 }
 
 const char *
-purple_xfer_get_filename(const PurpleXfer *xfer)
+purple_xfer_get_filename(PurpleXfer *xfer)
 {
-	PurpleXferPrivate *priv = PURPLE_XFER_GET_PRIVATE(xfer);
+	PurpleXferPrivate *priv = purple_xfer_get_instance_private(xfer);
 
 	g_return_val_if_fail(priv != NULL, NULL);
 
@@ -797,9 +795,9 @@
 }
 
 const char *
-purple_xfer_get_local_filename(const PurpleXfer *xfer)
+purple_xfer_get_local_filename(PurpleXfer *xfer)
 {
-	PurpleXferPrivate *priv = PURPLE_XFER_GET_PRIVATE(xfer);
+	PurpleXferPrivate *priv = purple_xfer_get_instance_private(xfer);
 
 	g_return_val_if_fail(priv != NULL, NULL);
 
@@ -807,9 +805,9 @@
 }
 
 goffset
-purple_xfer_get_bytes_sent(const PurpleXfer *xfer)
+purple_xfer_get_bytes_sent(PurpleXfer *xfer)
 {
-	PurpleXferPrivate *priv = PURPLE_XFER_GET_PRIVATE(xfer);
+	PurpleXferPrivate *priv = purple_xfer_get_instance_private(xfer);
 
 	g_return_val_if_fail(priv != NULL, 0);
 
@@ -817,9 +815,9 @@
 }
 
 goffset
-purple_xfer_get_bytes_remaining(const PurpleXfer *xfer)
+purple_xfer_get_bytes_remaining(PurpleXfer *xfer)
 {
-	PurpleXferPrivate *priv = PURPLE_XFER_GET_PRIVATE(xfer);
+	PurpleXferPrivate *priv = purple_xfer_get_instance_private(xfer);
 
 	g_return_val_if_fail(priv != NULL, 0);
 
@@ -827,9 +825,9 @@
 }
 
 goffset
-purple_xfer_get_size(const PurpleXfer *xfer)
+purple_xfer_get_size(PurpleXfer *xfer)
 {
-	PurpleXferPrivate *priv = PURPLE_XFER_GET_PRIVATE(xfer);
+	PurpleXferPrivate *priv = purple_xfer_get_instance_private(xfer);
 
 	g_return_val_if_fail(priv != NULL, 0);
 
@@ -837,7 +835,7 @@
 }
 
 double
-purple_xfer_get_progress(const PurpleXfer *xfer)
+purple_xfer_get_progress(PurpleXfer *xfer)
 {
 	g_return_val_if_fail(PURPLE_IS_XFER(xfer), 0.0);
 
@@ -849,9 +847,9 @@
 }
 
 guint16
-purple_xfer_get_local_port(const PurpleXfer *xfer)
+purple_xfer_get_local_port(PurpleXfer *xfer)
 {
-	PurpleXferPrivate *priv = PURPLE_XFER_GET_PRIVATE(xfer);
+	PurpleXferPrivate *priv = purple_xfer_get_instance_private(xfer);
 
 	g_return_val_if_fail(priv != NULL, -1);
 
@@ -859,9 +857,9 @@
 }
 
 const char *
-purple_xfer_get_remote_ip(const PurpleXfer *xfer)
+purple_xfer_get_remote_ip(PurpleXfer *xfer)
 {
-	PurpleXferPrivate *priv = PURPLE_XFER_GET_PRIVATE(xfer);
+	PurpleXferPrivate *priv = purple_xfer_get_instance_private(xfer);
 
 	g_return_val_if_fail(priv != NULL, NULL);
 
@@ -869,9 +867,9 @@
 }
 
 guint16
-purple_xfer_get_remote_port(const PurpleXfer *xfer)
+purple_xfer_get_remote_port(PurpleXfer *xfer)
 {
-	PurpleXferPrivate *priv = PURPLE_XFER_GET_PRIVATE(xfer);
+	PurpleXferPrivate *priv = purple_xfer_get_instance_private(xfer);
 
 	g_return_val_if_fail(priv != NULL, -1);
 
@@ -879,9 +877,9 @@
 }
 
 time_t
-purple_xfer_get_start_time(const PurpleXfer *xfer)
+purple_xfer_get_start_time(PurpleXfer *xfer)
 {
-	PurpleXferPrivate *priv = PURPLE_XFER_GET_PRIVATE(xfer);
+	PurpleXferPrivate *priv = purple_xfer_get_instance_private(xfer);
 
 	g_return_val_if_fail(priv != NULL, 0);
 
@@ -889,9 +887,9 @@
 }
 
 time_t
-purple_xfer_get_end_time(const PurpleXfer *xfer)
+purple_xfer_get_end_time(PurpleXfer *xfer)
 {
-	PurpleXferPrivate *priv = PURPLE_XFER_GET_PRIVATE(xfer);
+	PurpleXferPrivate *priv = purple_xfer_get_instance_private(xfer);
 
 	g_return_val_if_fail(priv != NULL, 0);
 
@@ -900,7 +898,7 @@
 
 void purple_xfer_set_fd(PurpleXfer *xfer, int fd)
 {
-	PurpleXferPrivate *priv = PURPLE_XFER_GET_PRIVATE(xfer);
+	PurpleXferPrivate *priv = purple_xfer_get_instance_private(xfer);
 
 	g_return_if_fail(priv != NULL);
 
@@ -911,7 +909,7 @@
 
 void purple_xfer_set_watcher(PurpleXfer *xfer, int watcher)
 {
-	PurpleXferPrivate *priv = PURPLE_XFER_GET_PRIVATE(xfer);
+	PurpleXferPrivate *priv = purple_xfer_get_instance_private(xfer);
 
 	g_return_if_fail(priv != NULL);
 
@@ -923,7 +921,7 @@
 void
 purple_xfer_set_completed(PurpleXfer *xfer, gboolean completed)
 {
-	PurpleXferPrivate *priv = PURPLE_XFER_GET_PRIVATE(xfer);
+	PurpleXferPrivate *priv = purple_xfer_get_instance_private(xfer);
 	PurpleXferUiOps *ui_ops;
 
 	g_return_if_fail(priv != NULL);
@@ -972,7 +970,7 @@
 void
 purple_xfer_set_message(PurpleXfer *xfer, const char *message)
 {
-	PurpleXferPrivate *priv = PURPLE_XFER_GET_PRIVATE(xfer);
+	PurpleXferPrivate *priv = purple_xfer_get_instance_private(xfer);
 
 	g_return_if_fail(priv != NULL);
 
@@ -985,9 +983,9 @@
 }
 
 const char *
-purple_xfer_get_message(const PurpleXfer *xfer)
+purple_xfer_get_message(PurpleXfer *xfer)
 {
-	PurpleXferPrivate *priv = PURPLE_XFER_GET_PRIVATE(xfer);
+	PurpleXferPrivate *priv = purple_xfer_get_instance_private(xfer);
 
 	g_return_val_if_fail(priv != NULL, NULL);
 
@@ -997,7 +995,7 @@
 void
 purple_xfer_set_filename(PurpleXfer *xfer, const char *filename)
 {
-	PurpleXferPrivate *priv = PURPLE_XFER_GET_PRIVATE(xfer);
+	PurpleXferPrivate *priv = purple_xfer_get_instance_private(xfer);
 
 	g_return_if_fail(priv != NULL);
 
@@ -1012,7 +1010,7 @@
 void
 purple_xfer_set_local_filename(PurpleXfer *xfer, const char *filename)
 {
-	PurpleXferPrivate *priv = PURPLE_XFER_GET_PRIVATE(xfer);
+	PurpleXferPrivate *priv = purple_xfer_get_instance_private(xfer);
 
 	g_return_if_fail(priv != NULL);
 
@@ -1027,7 +1025,7 @@
 void
 purple_xfer_set_size(PurpleXfer *xfer, goffset size)
 {
-	PurpleXferPrivate *priv = PURPLE_XFER_GET_PRIVATE(xfer);
+	PurpleXferPrivate *priv = purple_xfer_get_instance_private(xfer);
 
 	g_return_if_fail(priv != NULL);
 
@@ -1039,7 +1037,7 @@
 void
 purple_xfer_set_local_port(PurpleXfer *xfer, guint16 local_port)
 {
-	PurpleXferPrivate *priv = PURPLE_XFER_GET_PRIVATE(xfer);
+	PurpleXferPrivate *priv = purple_xfer_get_instance_private(xfer);
 
 	g_return_if_fail(priv != NULL);
 
@@ -1051,7 +1049,7 @@
 void
 purple_xfer_set_bytes_sent(PurpleXfer *xfer, goffset bytes_sent)
 {
-	PurpleXferPrivate *priv = PURPLE_XFER_GET_PRIVATE(xfer);
+	PurpleXferPrivate *priv = purple_xfer_get_instance_private(xfer);
 
 	g_return_if_fail(priv != NULL);
 
@@ -1061,9 +1059,9 @@
 }
 
 PurpleXferUiOps *
-purple_xfer_get_ui_ops(const PurpleXfer *xfer)
+purple_xfer_get_ui_ops(PurpleXfer *xfer)
 {
-	PurpleXferPrivate *priv = PURPLE_XFER_GET_PRIVATE(xfer);
+	PurpleXferPrivate *priv = purple_xfer_get_instance_private(xfer);
 
 	g_return_val_if_fail(priv != NULL, NULL);
 
@@ -1073,7 +1071,7 @@
 void
 purple_xfer_set_init_fnc(PurpleXfer *xfer, void (*fnc)(PurpleXfer *))
 {
-	PurpleXferPrivate *priv = PURPLE_XFER_GET_PRIVATE(xfer);
+	PurpleXferPrivate *priv = purple_xfer_get_instance_private(xfer);
 
 	g_return_if_fail(priv != NULL);
 
@@ -1082,7 +1080,7 @@
 
 void purple_xfer_set_request_denied_fnc(PurpleXfer *xfer, void (*fnc)(PurpleXfer *))
 {
-	PurpleXferPrivate *priv = PURPLE_XFER_GET_PRIVATE(xfer);
+	PurpleXferPrivate *priv = purple_xfer_get_instance_private(xfer);
 
 	g_return_if_fail(priv != NULL);
 
@@ -1092,7 +1090,7 @@
 void
 purple_xfer_set_read_fnc(PurpleXfer *xfer, gssize (*fnc)(guchar **, size_t, PurpleXfer *))
 {
-	PurpleXferPrivate *priv = PURPLE_XFER_GET_PRIVATE(xfer);
+	PurpleXferPrivate *priv = purple_xfer_get_instance_private(xfer);
 
 	g_return_if_fail(priv != NULL);
 
@@ -1103,7 +1101,7 @@
 purple_xfer_set_write_fnc(PurpleXfer *xfer,
 						gssize (*fnc)(const guchar *, size_t, PurpleXfer *))
 {
-	PurpleXferPrivate *priv = PURPLE_XFER_GET_PRIVATE(xfer);
+	PurpleXferPrivate *priv = purple_xfer_get_instance_private(xfer);
 
 	g_return_if_fail(priv != NULL);
 
@@ -1114,7 +1112,7 @@
 purple_xfer_set_ack_fnc(PurpleXfer *xfer,
 			  void (*fnc)(PurpleXfer *, const guchar *, size_t))
 {
-	PurpleXferPrivate *priv = PURPLE_XFER_GET_PRIVATE(xfer);
+	PurpleXferPrivate *priv = purple_xfer_get_instance_private(xfer);
 
 	g_return_if_fail(priv != NULL);
 
@@ -1124,7 +1122,7 @@
 void
 purple_xfer_set_start_fnc(PurpleXfer *xfer, void (*fnc)(PurpleXfer *))
 {
-	PurpleXferPrivate *priv = PURPLE_XFER_GET_PRIVATE(xfer);
+	PurpleXferPrivate *priv = purple_xfer_get_instance_private(xfer);
 
 	g_return_if_fail(priv != NULL);
 
@@ -1134,7 +1132,7 @@
 void
 purple_xfer_set_end_fnc(PurpleXfer *xfer, void (*fnc)(PurpleXfer *))
 {
-	PurpleXferPrivate *priv = PURPLE_XFER_GET_PRIVATE(xfer);
+	PurpleXferPrivate *priv = purple_xfer_get_instance_private(xfer);
 
 	g_return_if_fail(priv != NULL);
 
@@ -1144,7 +1142,7 @@
 void
 purple_xfer_set_cancel_send_fnc(PurpleXfer *xfer, void (*fnc)(PurpleXfer *))
 {
-	PurpleXferPrivate *priv = PURPLE_XFER_GET_PRIVATE(xfer);
+	PurpleXferPrivate *priv = purple_xfer_get_instance_private(xfer);
 
 	g_return_if_fail(priv != NULL);
 
@@ -1154,7 +1152,7 @@
 void
 purple_xfer_set_cancel_recv_fnc(PurpleXfer *xfer, void (*fnc)(PurpleXfer *))
 {
-	PurpleXferPrivate *priv = PURPLE_XFER_GET_PRIVATE(xfer);
+	PurpleXferPrivate *priv = purple_xfer_get_instance_private(xfer);
 
 	g_return_if_fail(priv != NULL);
 
@@ -1164,7 +1162,7 @@
 static void
 purple_xfer_increase_buffer_size(PurpleXfer *xfer)
 {
-	PurpleXferPrivate *priv = PURPLE_XFER_GET_PRIVATE(xfer);
+	PurpleXferPrivate *priv = purple_xfer_get_instance_private(xfer);
 
 	priv->current_buffer_size = MIN(priv->current_buffer_size * 1.5,
 			FT_MAX_BUFFER_SIZE);
@@ -1173,7 +1171,7 @@
 gssize
 purple_xfer_read(PurpleXfer *xfer, guchar **buffer)
 {
-	PurpleXferPrivate *priv = PURPLE_XFER_GET_PRIVATE(xfer);
+	PurpleXferPrivate *priv = purple_xfer_get_instance_private(xfer);
 	gssize s, r;
 
 	g_return_val_if_fail(priv   != NULL, 0);
@@ -1213,7 +1211,7 @@
 static gssize
 do_write(PurpleXfer *xfer, const guchar *buffer, gsize size)
 {
-	PurpleXferPrivate *priv = PURPLE_XFER_GET_PRIVATE(xfer);
+	PurpleXferPrivate *priv = purple_xfer_get_instance_private(xfer);
 	gssize r;
 
 	g_return_val_if_fail(priv   != NULL, 0);
@@ -1234,7 +1232,7 @@
 gssize
 purple_xfer_write(PurpleXfer *xfer, const guchar *buffer, gsize size)
 {
-	PurpleXferPrivate *priv = PURPLE_XFER_GET_PRIVATE(xfer);
+	PurpleXferPrivate *priv = purple_xfer_get_instance_private(xfer);
 	gssize s;
 
 	g_return_val_if_fail(priv != NULL, 0);
@@ -1247,7 +1245,7 @@
 gboolean
 purple_xfer_write_file(PurpleXfer *xfer, const guchar *buffer, gsize size)
 {
-	PurpleXferPrivate *priv = PURPLE_XFER_GET_PRIVATE(xfer);
+	PurpleXferPrivate *priv = purple_xfer_get_instance_private(xfer);
 	PurpleXferUiOps *ui_ops;
 	gsize wc;
 	gboolean fs_known;
@@ -1293,7 +1291,7 @@
 gssize
 purple_xfer_read_file(PurpleXfer *xfer, guchar *buffer, gsize size)
 {
-	PurpleXferPrivate *priv = PURPLE_XFER_GET_PRIVATE(xfer);
+	PurpleXferPrivate *priv = purple_xfer_get_instance_private(xfer);
 	PurpleXferUiOps *ui_ops;
 	gssize got_len;
 
@@ -1347,7 +1345,7 @@
 static void
 do_transfer(PurpleXfer *xfer)
 {
-	PurpleXferPrivate *priv = PURPLE_XFER_GET_PRIVATE(xfer);
+	PurpleXferPrivate *priv = purple_xfer_get_instance_private(xfer);
 	PurpleXferUiOps *ui_ops;
 	guchar *buffer = NULL;
 	gssize r = 0;
@@ -1481,7 +1479,7 @@
 transfer_cb(gpointer data, gint source, PurpleInputCondition condition)
 {
 	PurpleXfer *xfer = data;
-	PurpleXferPrivate *priv = PURPLE_XFER_GET_PRIVATE(xfer);
+	PurpleXferPrivate *priv = purple_xfer_get_instance_private(xfer);
 
 	if (priv->dest_fp == NULL) {
 		/* The UI is moderating its side manually */
@@ -1504,7 +1502,7 @@
 static void
 begin_transfer(PurpleXfer *xfer, PurpleInputCondition cond)
 {
-	PurpleXferPrivate *priv = PURPLE_XFER_GET_PRIVATE(xfer);
+	PurpleXferPrivate *priv = purple_xfer_get_instance_private(xfer);
 	PurpleXferType type = purple_xfer_get_xfer_type(xfer);
 	PurpleXferUiOps *ui_ops = purple_xfer_get_ui_ops(xfer);
 
@@ -1560,7 +1558,7 @@
 void
 purple_xfer_ui_ready(PurpleXfer *xfer)
 {
-	PurpleXferPrivate *priv = PURPLE_XFER_GET_PRIVATE(xfer);
+	PurpleXferPrivate *priv = purple_xfer_get_instance_private(xfer);
 	PurpleInputCondition cond;
 	PurpleXferType type;
 
@@ -1593,7 +1591,7 @@
 void
 purple_xfer_protocol_ready(PurpleXfer *xfer)
 {
-	PurpleXferPrivate *priv = PURPLE_XFER_GET_PRIVATE(xfer);
+	PurpleXferPrivate *priv = purple_xfer_get_instance_private(xfer);
 
 	g_return_if_fail(priv != NULL);
 
@@ -1615,7 +1613,7 @@
 void
 purple_xfer_start(PurpleXfer *xfer, int fd, const char *ip, guint16 port)
 {
-	PurpleXferPrivate *priv = PURPLE_XFER_GET_PRIVATE(xfer);
+	PurpleXferPrivate *priv = purple_xfer_get_instance_private(xfer);
 	PurpleInputCondition cond;
 	PurpleXferType type;
 	GObject *obj;
@@ -1662,7 +1660,7 @@
 void
 purple_xfer_end(PurpleXfer *xfer)
 {
-	PurpleXferPrivate *priv = PURPLE_XFER_GET_PRIVATE(xfer);
+	PurpleXferPrivate *priv = purple_xfer_get_instance_private(xfer);
 
 	g_return_if_fail(priv != NULL);
 
@@ -1718,7 +1716,7 @@
 void
 purple_xfer_cancel_local(PurpleXfer *xfer)
 {
-	PurpleXferPrivate *priv = PURPLE_XFER_GET_PRIVATE(xfer);
+	PurpleXferPrivate *priv = purple_xfer_get_instance_private(xfer);
 	PurpleXferUiOps *ui_ops;
 	char *msg = NULL;
 
@@ -1790,7 +1788,7 @@
 void
 purple_xfer_cancel_remote(PurpleXfer *xfer)
 {
-	PurpleXferPrivate *priv = PURPLE_XFER_GET_PRIVATE(xfer);
+	PurpleXferPrivate *priv = purple_xfer_get_instance_private(xfer);
 	PurpleXferUiOps *ui_ops;
 	gchar *msg;
 	PurpleAccount *account;
@@ -1892,9 +1890,9 @@
 }
 
 gconstpointer
-purple_xfer_get_thumbnail(const PurpleXfer *xfer, gsize *len)
+purple_xfer_get_thumbnail(PurpleXfer *xfer, gsize *len)
 {
-	PurpleXferPrivate *priv = PURPLE_XFER_GET_PRIVATE(xfer);
+	PurpleXferPrivate *priv = purple_xfer_get_instance_private(xfer);
 
 	g_return_val_if_fail(priv != NULL, NULL);
 
@@ -1905,9 +1903,9 @@
 }
 
 const gchar *
-purple_xfer_get_thumbnail_mimetype(const PurpleXfer *xfer)
+purple_xfer_get_thumbnail_mimetype(PurpleXfer *xfer)
 {
-	PurpleXferPrivate *priv = PURPLE_XFER_GET_PRIVATE(xfer);
+	PurpleXferPrivate *priv = purple_xfer_get_instance_private(xfer);
 
 	g_return_val_if_fail(priv != NULL, NULL);
 
@@ -1918,7 +1916,7 @@
 purple_xfer_set_thumbnail(PurpleXfer *xfer, gconstpointer thumbnail,
 	gsize size, const gchar *mimetype)
 {
-	PurpleXferPrivate *priv = PURPLE_XFER_GET_PRIVATE(xfer);
+	PurpleXferPrivate *priv = purple_xfer_get_instance_private(xfer);
 	gpointer old_thumbnail_data;
 	gchar *old_mimetype;
 
@@ -1946,7 +1944,7 @@
 void
 purple_xfer_prepare_thumbnail(PurpleXfer *xfer, const gchar *formats)
 {
-	PurpleXferPrivate *priv = PURPLE_XFER_GET_PRIVATE(xfer);
+	PurpleXferPrivate *priv = purple_xfer_get_instance_private(xfer);
 
 	g_return_if_fail(priv != NULL);
 
@@ -1958,7 +1956,7 @@
 void
 purple_xfer_set_protocol_data(PurpleXfer *xfer, gpointer proto_data)
 {
-	PurpleXferPrivate *priv = PURPLE_XFER_GET_PRIVATE(xfer);
+	PurpleXferPrivate *priv = purple_xfer_get_instance_private(xfer);
 
 	g_return_if_fail(priv != NULL);
 
@@ -1966,9 +1964,9 @@
 }
 
 gpointer
-purple_xfer_get_protocol_data(const PurpleXfer *xfer)
+purple_xfer_get_protocol_data(PurpleXfer *xfer)
 {
-	PurpleXferPrivate *priv = PURPLE_XFER_GET_PRIVATE(xfer);
+	PurpleXferPrivate *priv = purple_xfer_get_instance_private(xfer);
 
 	g_return_val_if_fail(priv != NULL, NULL);
 
@@ -1982,7 +1980,7 @@
 	xfer->ui_data = ui_data;
 }
 
-gpointer purple_xfer_get_ui_data(const PurpleXfer *xfer)
+gpointer purple_xfer_get_ui_data(PurpleXfer *xfer)
 {
 	g_return_val_if_fail(PURPLE_IS_XFER(xfer), NULL);
 
@@ -1998,7 +1996,7 @@
 		GParamSpec *pspec)
 {
 	PurpleXfer *xfer = PURPLE_XFER(obj);
-	PurpleXferPrivate *priv = PURPLE_XFER_GET_PRIVATE(xfer);
+	PurpleXferPrivate *priv = purple_xfer_get_instance_private(xfer);
 
 	switch (param_id) {
 		case PROP_TYPE:
@@ -2119,10 +2117,9 @@
 
 /* GObject initialization function */
 static void
-purple_xfer_init(GTypeInstance *instance, gpointer klass)
+purple_xfer_init(PurpleXfer *xfer)
 {
-	PurpleXfer *xfer = PURPLE_XFER(instance);
-	PurpleXferPrivate *priv = PURPLE_XFER_GET_PRIVATE(xfer);
+	PurpleXferPrivate *priv = purple_xfer_get_instance_private(xfer);
 
 	priv->ui_ops = purple_xfers_get_ui_ops();
 	priv->current_buffer_size = FT_INITIAL_BUFFER_SIZE;
@@ -2135,10 +2132,10 @@
 purple_xfer_constructed(GObject *object)
 {
 	PurpleXfer *xfer = PURPLE_XFER(object);
-	PurpleXferPrivate *priv = PURPLE_XFER_GET_PRIVATE(xfer);
+	PurpleXferPrivate *priv = purple_xfer_get_instance_private(xfer);
 	PurpleXferUiOps *ui_ops;
 
-	parent_class->constructed(object);
+	G_OBJECT_CLASS(purple_xfer_parent_class)->constructed(object);
 
 	ui_ops = purple_xfers_get_ui_ops();
 
@@ -2160,7 +2157,7 @@
 purple_xfer_finalize(GObject *object)
 {
 	PurpleXfer *xfer = PURPLE_XFER(object);
-	PurpleXferPrivate *priv = PURPLE_XFER_GET_PRIVATE(xfer);
+	PurpleXferPrivate *priv = purple_xfer_get_instance_private(xfer);
 	PurpleXferUiOps *ui_ops;
 
 	/* Close the file browser, if it's open */
@@ -2187,7 +2184,7 @@
 	g_free(priv->thumbnail_data);
 	g_free(priv->thumbnail_mimetype);
 
-	parent_class->finalize(object);
+	G_OBJECT_CLASS(purple_xfer_parent_class)->finalize(object);
 }
 
 /* Class initializer function */
@@ -2196,8 +2193,6 @@
 {
 	GObjectClass *obj_class = G_OBJECT_CLASS(klass);
 
-	parent_class = g_type_class_peek_parent(klass);
-
 	obj_class->finalize = purple_xfer_finalize;
 	obj_class->constructed = purple_xfer_constructed;
 
@@ -2205,8 +2200,6 @@
 	obj_class->get_property = purple_xfer_get_property;
 	obj_class->set_property = purple_xfer_set_property;
 
-	g_type_class_add_private(klass, sizeof(PurpleXferPrivate));
-
 	properties[PROP_TYPE] = g_param_spec_enum("type", "Transfer type",
 				"The type of file transfer.", PURPLE_TYPE_XFER_TYPE,
 				PURPLE_XFER_TYPE_UNKNOWN,
@@ -2318,32 +2311,6 @@
 	g_object_class_install_properties(obj_class, PROP_LAST, properties);
 }
 
-GType
-purple_xfer_get_type(void)
-{
-	static GType type = 0;
-
-	if(type == 0) {
-		static const GTypeInfo info = {
-			sizeof(PurpleXferClass),
-			NULL,
-			NULL,
-			(GClassInitFunc)purple_xfer_class_init,
-			NULL,
-			NULL,
-			sizeof(PurpleXfer),
-			0,
-			(GInstanceInitFunc)purple_xfer_init,
-			NULL,
-		};
-
-		type = g_type_register_static(G_TYPE_OBJECT, "PurpleXfer",
-				&info, 0);
-	}
-
-	return type;
-}
-
 PurpleXfer *
 purple_xfer_new(PurpleAccount *account, PurpleXferType type, const char *who)
 {
--- a/libpurple/xfer.h	Fri Dec 14 08:06:02 2018 +0000
+++ b/libpurple/xfer.h	Fri Dec 14 08:25:23 2018 +0000
@@ -295,7 +295,7 @@
  *
  * Returns: The type of the file transfer.
  */
-PurpleXferType purple_xfer_get_xfer_type(const PurpleXfer *xfer);
+PurpleXferType purple_xfer_get_xfer_type(PurpleXfer *xfer);
 
 /**
  * purple_xfer_get_account:
@@ -305,7 +305,7 @@
  *
  * Returns: The account.
  */
-PurpleAccount *purple_xfer_get_account(const PurpleXfer *xfer);
+PurpleAccount *purple_xfer_get_account(PurpleXfer *xfer);
 
 /**
  * purple_xfer_set_remote_user:
@@ -324,7 +324,7 @@
  *
  * Returns: The name of the remote user.
  */
-const char *purple_xfer_get_remote_user(const PurpleXfer *xfer);
+const char *purple_xfer_get_remote_user(PurpleXfer *xfer);
 
 /**
  * purple_xfer_get_status:
@@ -334,7 +334,7 @@
  *
  * Returns: The status.
  */
-PurpleXferStatus purple_xfer_get_status(const PurpleXfer *xfer);
+PurpleXferStatus purple_xfer_get_status(PurpleXfer *xfer);
 
 /**
  * purple_xfer_is_cancelled:
@@ -344,7 +344,7 @@
  *
  * Returns: Whether or not the transfer was cancelled.
  */
-gboolean purple_xfer_is_cancelled(const PurpleXfer *xfer);
+gboolean purple_xfer_is_cancelled(PurpleXfer *xfer);
 
 /**
  * purple_xfer_is_completed:
@@ -354,7 +354,7 @@
  *
  * Returns: The completed state.
  */
-gboolean purple_xfer_is_completed(const PurpleXfer *xfer);
+gboolean purple_xfer_is_completed(PurpleXfer *xfer);
 
 /**
  * purple_xfer_get_filename:
@@ -364,7 +364,7 @@
  *
  * Returns: The filename.
  */
-const char *purple_xfer_get_filename(const PurpleXfer *xfer);
+const char *purple_xfer_get_filename(PurpleXfer *xfer);
 
 /**
  * purple_xfer_get_local_filename:
@@ -374,7 +374,7 @@
  *
  * Returns: The destination filename.
  */
-const char *purple_xfer_get_local_filename(const PurpleXfer *xfer);
+const char *purple_xfer_get_local_filename(PurpleXfer *xfer);
 
 /**
  * purple_xfer_get_bytes_sent:
@@ -384,7 +384,7 @@
  *
  * Returns: The number of bytes sent.
  */
-goffset purple_xfer_get_bytes_sent(const PurpleXfer *xfer);
+goffset purple_xfer_get_bytes_sent(PurpleXfer *xfer);
 
 /**
  * purple_xfer_get_bytes_remaining:
@@ -394,7 +394,7 @@
  *
  * Returns: The number of bytes remaining.
  */
-goffset purple_xfer_get_bytes_remaining(const PurpleXfer *xfer);
+goffset purple_xfer_get_bytes_remaining(PurpleXfer *xfer);
 
 /**
  * purple_xfer_get_size:
@@ -404,7 +404,7 @@
  *
  * Returns: The total size of the file.
  */
-goffset purple_xfer_get_size(const PurpleXfer *xfer);
+goffset purple_xfer_get_size(PurpleXfer *xfer);
 
 /**
  * purple_xfer_get_progress:
@@ -416,7 +416,7 @@
  *
  * Returns: The percentage complete.
  */
-double purple_xfer_get_progress(const PurpleXfer *xfer);
+double purple_xfer_get_progress(PurpleXfer *xfer);
 
 /**
  * purple_xfer_get_local_port:
@@ -426,7 +426,7 @@
  *
  * Returns: The port number on this end.
  */
-guint16 purple_xfer_get_local_port(const PurpleXfer *xfer);
+guint16 purple_xfer_get_local_port(PurpleXfer *xfer);
 
 /**
  * purple_xfer_get_remote_ip:
@@ -436,7 +436,7 @@
  *
  * Returns: The IP address on the other end.
  */
-const char *purple_xfer_get_remote_ip(const PurpleXfer *xfer);
+const char *purple_xfer_get_remote_ip(PurpleXfer *xfer);
 
 /**
  * purple_xfer_get_remote_port:
@@ -446,7 +446,7 @@
  *
  * Returns: The port number on the other end.
  */
-guint16 purple_xfer_get_remote_port(const PurpleXfer *xfer);
+guint16 purple_xfer_get_remote_port(PurpleXfer *xfer);
 
 /**
  * purple_xfer_get_start_time:
@@ -456,7 +456,7 @@
  *
  * Returns: The time when the transfer started.
  */
-time_t purple_xfer_get_start_time(const PurpleXfer *xfer);
+time_t purple_xfer_get_start_time(PurpleXfer *xfer);
 
 /**
  * purple_xfer_get_end_time:
@@ -466,7 +466,7 @@
  *
  * Returns: The time when the transfer ended.
  */
-time_t purple_xfer_get_end_time(const PurpleXfer *xfer);
+time_t purple_xfer_get_end_time(PurpleXfer *xfer);
 
 /**
  * purple_xfer_set_fd:
@@ -521,7 +521,7 @@
  *
  * Returns: The message.
  */
-const char *purple_xfer_get_message(const PurpleXfer *xfer);
+const char *purple_xfer_get_message(PurpleXfer *xfer);
 
 /**
  * purple_xfer_set_filename:
@@ -583,7 +583,7 @@
  *
  * Returns: The UI operations structure.
  */
-PurpleXferUiOps *purple_xfer_get_ui_ops(const PurpleXfer *xfer);
+PurpleXferUiOps *purple_xfer_get_ui_ops(PurpleXfer *xfer);
 
 /**
  * purple_xfer_set_read_fnc:
@@ -839,7 +839,7 @@
  *
  * Returns: The thumbnail data, or NULL if there is no thumbnail
  */
-gconstpointer purple_xfer_get_thumbnail(const PurpleXfer *xfer, gsize *len);
+gconstpointer purple_xfer_get_thumbnail(PurpleXfer *xfer, gsize *len);
 
 /**
  * purple_xfer_get_thumbnail_mimetype:
@@ -849,7 +849,7 @@
  *
  * Returns: The mimetype of the thumbnail, or %NULL if not thumbnail is set
  */
-const gchar *purple_xfer_get_thumbnail_mimetype(const PurpleXfer *xfer);
+const gchar *purple_xfer_get_thumbnail_mimetype(PurpleXfer *xfer);
 
 
 /**
@@ -892,7 +892,7 @@
  *
  * Returns: The protocol data for the file transfer.
  */
-gpointer purple_xfer_get_protocol_data(const PurpleXfer *xfer);
+gpointer purple_xfer_get_protocol_data(PurpleXfer *xfer);
 
 /**
  * purple_xfer_set_ui_data:
@@ -913,7 +913,7 @@
  *         convenience field provided to the UIs--it is not
  *         used by the libpurple core.
  */
-gpointer purple_xfer_get_ui_data(const PurpleXfer *xfer);
+gpointer purple_xfer_get_ui_data(PurpleXfer *xfer);
 
 /**************************************************************************/
 /* File Transfer Subsystem API                                            */

mercurial