Merged in default (pull request #410)

Fri, 02 Nov 2018 01:24:29 +0000

author
Gary Kramlich <grim@reaperworld.com>
date
Fri, 02 Nov 2018 01:24:29 +0000
changeset 39261
183db900957f
parent 39258
55130d4511be (current diff)
parent 39260
502c3e702818 (diff)
child 39263
ad2bcb22e4a9

Merged in default (pull request #410)

Port purple media code away from deprecated g_type_class_add_private()

Approved-by: Elliott Sales de Andrade
Approved-by: Gary Kramlich
Approved-by: Eion Robb

--- a/libpurple/media.c	Fri Nov 02 01:08:17 2018 +0000
+++ b/libpurple/media.c	Fri Nov 02 01:24:29 2018 +0000
@@ -82,8 +82,6 @@
 };
 
 #ifdef USE_VV
-#define PURPLE_MEDIA_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE((obj), PURPLE_TYPE_MEDIA, PurpleMediaPrivate))
-
 static void purple_media_class_init (PurpleMediaClass *klass);
 static void purple_media_init (PurpleMedia *media);
 static void purple_media_dispose (GObject *object);
@@ -105,9 +103,6 @@
 static void purple_media_codecs_changed_cb(PurpleMediaBackend *backend,
 		const gchar *sess_id, PurpleMedia *media);
 
-static GObjectClass *parent_class = NULL;
-
-
 
 enum {
 	S_ERROR,
@@ -131,42 +126,21 @@
 	PROP_INITIATOR,
 	PROP_PROTOCOL_DATA,
 };
-#endif
 
-
+G_DEFINE_TYPE_WITH_PRIVATE(PurpleMedia, purple_media, G_TYPE_OBJECT);
+#else
 GType
 purple_media_get_type()
 {
-#ifdef USE_VV
-	static GType type = 0;
-
-	if (type == 0) {
-		static const GTypeInfo info = {
-			sizeof(PurpleMediaClass),
-			NULL,
-			NULL,
-			(GClassInitFunc) purple_media_class_init,
-			NULL,
-			NULL,
-			sizeof(PurpleMedia),
-			0,
-			(GInstanceInitFunc) purple_media_init,
-			NULL
-		};
-		type = g_type_register_static(G_TYPE_OBJECT, "PurpleMedia", &info, 0);
-	}
-	return type;
-#else
 	return G_TYPE_NONE;
-#endif
 }
+#endif /* USE_VV */
 
 #ifdef USE_VV
 static void
 purple_media_class_init (PurpleMediaClass *klass)
 {
 	GObjectClass *gobject_class = (GObjectClass*)klass;
-	parent_class = g_type_class_peek_parent(klass);
 
 	gobject_class->dispose = purple_media_dispose;
 	gobject_class->finalize = purple_media_finalize;
@@ -252,14 +226,13 @@
 					 G_SIGNAL_RUN_LAST, 0, NULL, NULL, NULL,
 					 G_TYPE_NONE, 4, G_TYPE_POINTER, G_TYPE_POINTER,
 					 PURPLE_TYPE_MEDIA_CANDIDATE, PURPLE_TYPE_MEDIA_CANDIDATE);
-	g_type_class_add_private(klass, sizeof(PurpleMediaPrivate));
 }
 
 
 static void
 purple_media_init (PurpleMedia *media)
 {
-	media->priv = PURPLE_MEDIA_GET_PRIVATE(media);
+	media->priv = purple_media_get_instance_private(media);
 	memset(media->priv, 0, sizeof(*media->priv));
 }
 
@@ -299,7 +272,8 @@
 static void
 purple_media_dispose(GObject *media)
 {
-	PurpleMediaPrivate *priv = PURPLE_MEDIA_GET_PRIVATE(media);
+	PurpleMediaPrivate *priv =
+			purple_media_get_instance_private(PURPLE_MEDIA(media));
 
 	purple_debug_info("media","purple_media_dispose\n");
 
@@ -315,13 +289,14 @@
 		priv->manager = NULL;
 	}
 
-	G_OBJECT_CLASS(parent_class)->dispose(media);
+	G_OBJECT_CLASS(purple_media_parent_class)->dispose(media);
 }
 
 static void
 purple_media_finalize(GObject *media)
 {
-	PurpleMediaPrivate *priv = PURPLE_MEDIA_GET_PRIVATE(media);
+	PurpleMediaPrivate *priv =
+			purple_media_get_instance_private(PURPLE_MEDIA(media));
 	purple_debug_info("media","purple_media_finalize\n");
 
 	for (; priv->streams; priv->streams = g_list_delete_link(priv->streams, priv->streams))
@@ -339,7 +314,7 @@
 		g_hash_table_destroy(priv->sessions);
 	}
 
-	G_OBJECT_CLASS(parent_class)->finalize(media);
+	G_OBJECT_CLASS(purple_media_parent_class)->finalize(media);
 }
 
 static void
--- a/libpurple/media/backend-fs2.c	Fri Nov 02 01:08:17 2018 +0000
+++ b/libpurple/media/backend-fs2.c	Fri Nov 02 01:24:29 2018 +0000
@@ -48,10 +48,6 @@
 /** @copydoc _PurpleMediaBackendFs2Stream */
 typedef struct _PurpleMediaBackendFs2Stream PurpleMediaBackendFs2Stream;
 
-#define PURPLE_MEDIA_BACKEND_FS2_GET_PRIVATE(obj) \
-		(G_TYPE_INSTANCE_GET_PRIVATE((obj), \
-		PURPLE_TYPE_MEDIA_BACKEND_FS2, PurpleMediaBackendFs2Private))
-
 static void purple_media_backend_iface_init(PurpleMediaBackendIface *iface);
 
 static gboolean
@@ -118,10 +114,6 @@
 	GObject parent;
 };
 
-G_DEFINE_TYPE_WITH_CODE(PurpleMediaBackendFs2, purple_media_backend_fs2,
-		G_TYPE_OBJECT, G_IMPLEMENT_INTERFACE(
-		PURPLE_TYPE_MEDIA_BACKEND, purple_media_backend_iface_init));
-
 struct _PurpleMediaBackendFs2Stream
 {
 	PurpleMediaBackendFs2Session *session;
@@ -181,6 +173,12 @@
 	PROP_MEDIA,
 };
 
+G_DEFINE_TYPE_WITH_CODE(PurpleMediaBackendFs2, purple_media_backend_fs2,
+		G_TYPE_OBJECT,
+		G_ADD_PRIVATE(PurpleMediaBackendFs2)
+		G_IMPLEMENT_INTERFACE(PURPLE_TYPE_MEDIA_BACKEND,
+				purple_media_backend_iface_init));
+
 static void
 purple_media_backend_fs2_init(PurpleMediaBackendFs2 *self)
 {
@@ -300,7 +298,8 @@
 purple_media_backend_fs2_dispose(GObject *obj)
 {
 	PurpleMediaBackendFs2Private *priv =
-			PURPLE_MEDIA_BACKEND_FS2_GET_PRIVATE(obj);
+			purple_media_backend_fs2_get_instance_private(
+					PURPLE_MEDIA_BACKEND_FS2(obj));
 	GList *iter = NULL;
 
 	purple_debug_info("backend-fs2", "purple_media_backend_fs2_dispose\n");
@@ -397,7 +396,8 @@
 purple_media_backend_fs2_finalize(GObject *obj)
 {
 	PurpleMediaBackendFs2Private *priv =
-			PURPLE_MEDIA_BACKEND_FS2_GET_PRIVATE(obj);
+			purple_media_backend_fs2_get_instance_private(
+					PURPLE_MEDIA_BACKEND_FS2(obj));
 
 	purple_debug_info("backend-fs2", "purple_media_backend_fs2_finalize\n");
 
@@ -432,7 +432,8 @@
 	PurpleMediaBackendFs2Private *priv;
 	g_return_if_fail(PURPLE_IS_MEDIA_BACKEND_FS2(object));
 
-	priv = PURPLE_MEDIA_BACKEND_FS2_GET_PRIVATE(object);
+	priv = purple_media_backend_fs2_get_instance_private(
+			PURPLE_MEDIA_BACKEND_FS2(object));
 
 	switch (prop_id) {
 		case PROP_CONFERENCE_TYPE:
@@ -469,7 +470,8 @@
 	PurpleMediaBackendFs2Private *priv;
 	g_return_if_fail(PURPLE_IS_MEDIA_BACKEND_FS2(object));
 
-	priv = PURPLE_MEDIA_BACKEND_FS2_GET_PRIVATE(object);
+	priv = purple_media_backend_fs2_get_instance_private(
+			PURPLE_MEDIA_BACKEND_FS2(object));
 
 	switch (prop_id) {
 		case PROP_CONFERENCE_TYPE:
@@ -501,8 +503,6 @@
 			"conference-type");
 	g_object_class_override_property(gobject_class, PROP_MEDIA, "media");
 
-	g_type_class_add_private(klass, sizeof(PurpleMediaBackendFs2Private));
-
 	/* VA-API elements aren't well supported in Farstream. Ignore them. */
 	features = gst_registry_get_feature_list_by_plugin(gst_registry_get(),
 			"vaapi");
@@ -798,7 +798,7 @@
 
 	g_return_val_if_fail(PURPLE_IS_MEDIA_BACKEND_FS2(self), NULL);
 
-	priv = PURPLE_MEDIA_BACKEND_FS2_GET_PRIVATE(self);
+	priv = purple_media_backend_fs2_get_instance_private(self);
 
 	if (priv->sessions != NULL)
 		session = g_hash_table_lookup(priv->sessions, sess_id);
@@ -814,7 +814,7 @@
 
 	g_return_val_if_fail(PURPLE_IS_MEDIA_BACKEND_FS2(self), NULL);
 
-	priv = PURPLE_MEDIA_BACKEND_FS2_GET_PRIVATE(self);
+	priv = purple_media_backend_fs2_get_instance_private(self);
 
 	if (priv->participants != NULL)
 		participant = g_hash_table_lookup(priv->participants, name);
@@ -831,7 +831,7 @@
 
 	g_return_val_if_fail(PURPLE_IS_MEDIA_BACKEND_FS2(self), NULL);
 
-	priv = PURPLE_MEDIA_BACKEND_FS2_GET_PRIVATE(self);
+	priv = purple_media_backend_fs2_get_instance_private(self);
 	streams = priv->streams;
 
 	for (; streams; streams = g_list_next(streams)) {
@@ -853,7 +853,7 @@
 
 	g_return_val_if_fail(PURPLE_IS_MEDIA_BACKEND_FS2(self), NULL);
 
-	priv = PURPLE_MEDIA_BACKEND_FS2_GET_PRIVATE(self);
+	priv = purple_media_backend_fs2_get_instance_private(self);
 	streams = priv->streams;
 
 	for (; streams; streams = g_list_next(streams)) {
@@ -875,7 +875,7 @@
 get_session_from_fs_stream(PurpleMediaBackendFs2 *self, FsStream *stream)
 {
 	PurpleMediaBackendFs2Private *priv =
-			PURPLE_MEDIA_BACKEND_FS2_GET_PRIVATE(self);
+			purple_media_backend_fs2_get_instance_private(self);
 	FsSession *fssession;
 	GList *values;
 
@@ -933,7 +933,7 @@
 		PurpleMediaBackendFs2 *self)
 {
 	PurpleMediaBackendFs2Private *priv =
-			PURPLE_MEDIA_BACKEND_FS2_GET_PRIVATE(self);
+			purple_media_backend_fs2_get_instance_private(self);
 	GstElement *src = GST_ELEMENT(GST_MESSAGE_SRC(msg));
 	static guint level_id = 0;
 	const GstStructure *structure = gst_message_get_structure(msg);
@@ -1232,7 +1232,7 @@
 		PurpleMediaBackendFs2 *self)
 {
 	PurpleMediaBackendFs2Private *priv =
-			PURPLE_MEDIA_BACKEND_FS2_GET_PRIVATE(self);
+			purple_media_backend_fs2_get_instance_private(self);
 	GstElement *element = GST_ELEMENT(GST_MESSAGE_SRC(msg));
 	GstElement *lastElement = NULL;
 	GList *sessions;
@@ -1316,7 +1316,8 @@
 {
 	if (state == PURPLE_MEDIA_STATE_END) {
 		PurpleMediaBackendFs2Private *priv =
-				PURPLE_MEDIA_BACKEND_FS2_GET_PRIVATE(self);
+				purple_media_backend_fs2_get_instance_private(
+						self);
 
 		if (sid && name) {
 			PurpleMediaBackendFs2Stream *stream = get_stream(self, sid, name);
@@ -1394,7 +1395,8 @@
 	} else if (local == TRUE && (type == PURPLE_MEDIA_INFO_MUTE ||
 			type == PURPLE_MEDIA_INFO_UNMUTE)) {
 		PurpleMediaBackendFs2Private *priv =
-				PURPLE_MEDIA_BACKEND_FS2_GET_PRIVATE(self);
+				purple_media_backend_fs2_get_instance_private(
+						self);
 		gboolean active = (type == PURPLE_MEDIA_INFO_MUTE);
 		GList *sessions;
 
@@ -1458,7 +1460,7 @@
 init_conference(PurpleMediaBackendFs2 *self)
 {
 	PurpleMediaBackendFs2Private *priv =
-			PURPLE_MEDIA_BACKEND_FS2_GET_PRIVATE(self);
+			purple_media_backend_fs2_get_instance_private(self);
 	GstElement *pipeline;
 	GstBus *bus;
 	gchar *name;
@@ -1546,7 +1548,7 @@
 		PurpleMediaSessionType type)
 {
 	PurpleMediaBackendFs2Private *priv =
-			PURPLE_MEDIA_BACKEND_FS2_GET_PRIVATE(self);
+			purple_media_backend_fs2_get_instance_private(self);
 	PurpleMediaBackendFs2Session *session;
 	PurpleMediaSessionType session_type;
 	FsMediaType media_type = session_type_to_fs_media_type(type);
@@ -1656,7 +1658,7 @@
 		const gchar *transmitter)
 {
 	PurpleMediaBackendFs2Private *priv =
-			PURPLE_MEDIA_BACKEND_FS2_GET_PRIVATE(self);
+			purple_media_backend_fs2_get_instance_private(self);
 	PurpleMediaBackendFs2Session *session;
 	GError *err = NULL;
 	GList *codec_conf = NULL;
@@ -1756,7 +1758,7 @@
 create_participant(PurpleMediaBackendFs2 *self, const gchar *name)
 {
 	PurpleMediaBackendFs2Private *priv =
-			PURPLE_MEDIA_BACKEND_FS2_GET_PRIVATE(self);
+			purple_media_backend_fs2_get_instance_private(self);
 	FsParticipant *participant;
 	GError *err = NULL;
 
@@ -1798,7 +1800,8 @@
 
 	g_return_val_if_fail(stream != NULL, FALSE);
 
-	priv = PURPLE_MEDIA_BACKEND_FS2_GET_PRIVATE(stream->session->backend);
+	priv = purple_media_backend_fs2_get_instance_private(
+			stream->session->backend);
 	stream->connected_cb_id = 0;
 
 	purple_media_manager_create_output_window(
@@ -1821,7 +1824,8 @@
 	g_return_if_fail(FS_IS_STREAM(fsstream));
 	g_return_if_fail(stream != NULL);
 
-	priv = PURPLE_MEDIA_BACKEND_FS2_GET_PRIVATE(stream->session->backend);
+	priv = purple_media_backend_fs2_get_instance_private(
+			stream->session->backend);
 
 	if (stream->src == NULL) {
 		GstElement *sink = NULL;
@@ -1927,7 +1931,7 @@
 		guint num_params, GParameter *params)
 {
 	PurpleMediaBackendFs2Private *priv =
-			PURPLE_MEDIA_BACKEND_FS2_GET_PRIVATE(self);
+			purple_media_backend_fs2_get_instance_private(self);
 	GError *err = NULL;
 	FsStream *fsstream = NULL;
 	const gchar *stun_ip = purple_network_get_stun_ip();
@@ -2152,7 +2156,7 @@
 {
 	PurpleMediaBackendFs2 *backend = PURPLE_MEDIA_BACKEND_FS2(self);
 	PurpleMediaBackendFs2Private *priv =
-			PURPLE_MEDIA_BACKEND_FS2_GET_PRIVATE(backend);
+			purple_media_backend_fs2_get_instance_private(backend);
 	PurpleMediaBackendFs2Stream *stream;
 
 	if (priv->conference == NULL && !init_conference(backend)) {
@@ -2209,7 +2213,8 @@
 
 	g_return_if_fail(PURPLE_IS_MEDIA_BACKEND_FS2(self));
 
-	priv = PURPLE_MEDIA_BACKEND_FS2_GET_PRIVATE(self);
+	priv = purple_media_backend_fs2_get_instance_private(
+			PURPLE_MEDIA_BACKEND_FS2(self));
 	stream = get_stream(PURPLE_MEDIA_BACKEND_FS2(self),
 			sess_id, participant);
 
@@ -2253,7 +2258,8 @@
 
 	g_return_val_if_fail(PURPLE_IS_MEDIA_BACKEND_FS2(self), FALSE);
 
-	priv = PURPLE_MEDIA_BACKEND_FS2_GET_PRIVATE(self);
+	priv = purple_media_backend_fs2_get_instance_private(
+			PURPLE_MEDIA_BACKEND_FS2(self));
 
 	if (sess_id != NULL) {
 		PurpleMediaBackendFs2Session *session = get_session(
@@ -2540,7 +2546,8 @@
 
 	g_return_if_fail(PURPLE_IS_MEDIA_BACKEND_FS2(self));
 
-	priv = PURPLE_MEDIA_BACKEND_FS2_GET_PRIVATE(self);
+	priv = purple_media_backend_fs2_get_instance_private(
+			PURPLE_MEDIA_BACKEND_FS2(self));
 
 	if (priv->conference == NULL &&
 		!init_conference(PURPLE_MEDIA_BACKEND_FS2(self))) {
@@ -2672,7 +2679,7 @@
 
 	g_return_if_fail(PURPLE_IS_MEDIA_BACKEND_FS2(self));
 
-	priv = PURPLE_MEDIA_BACKEND_FS2_GET_PRIVATE(self);
+	priv = purple_media_backend_fs2_get_instance_private(self);
 
 	purple_prefs_set_int("/purple/media/audio/volume/input", level);
 
--- a/libpurple/media/candidate.c	Fri Nov 02 01:08:17 2018 +0000
+++ b/libpurple/media/candidate.c	Fri Nov 02 01:24:29 2018 +0000
@@ -26,12 +26,6 @@
 /** @copydoc _PurpleMediaCandidatePrivate */
 typedef struct _PurpleMediaCandidatePrivate PurpleMediaCandidatePrivate;
 
-#define PURPLE_MEDIA_CANDIDATE_GET_PRIVATE(obj) \
-		(G_TYPE_INSTANCE_GET_PRIVATE((obj), \
-		PURPLE_TYPE_MEDIA_CANDIDATE, \
-		PurpleMediaCandidatePrivate))
-
-
 struct _PurpleMediaCandidateClass
 {
 	GObjectClass parent_class;
@@ -42,8 +36,6 @@
 	GObject parent;
 };
 
-G_DEFINE_TYPE(PurpleMediaCandidate, purple_media_candidate, G_TYPE_OBJECT);
-
 struct _PurpleMediaCandidatePrivate
 {
 	gchar *foundation;
@@ -76,11 +68,14 @@
 	PROP_TTL,
 };
 
+G_DEFINE_TYPE_WITH_PRIVATE(PurpleMediaCandidate, purple_media_candidate,
+		G_TYPE_OBJECT);
+
 static void
 purple_media_candidate_init(PurpleMediaCandidate *info)
 {
 	PurpleMediaCandidatePrivate *priv =
-			PURPLE_MEDIA_CANDIDATE_GET_PRIVATE(info);
+			purple_media_candidate_get_instance_private(info);
 	priv->foundation = NULL;
 	priv->component_id = 0;
 	priv->ip = NULL;
@@ -98,13 +93,16 @@
 purple_media_candidate_finalize(GObject *info)
 {
 	PurpleMediaCandidatePrivate *priv =
-			PURPLE_MEDIA_CANDIDATE_GET_PRIVATE(info);
+			purple_media_candidate_get_instance_private(
+					PURPLE_MEDIA_CANDIDATE(info));
 
 	g_free(priv->foundation);
 	g_free(priv->ip);
 	g_free(priv->base_ip);
 	g_free(priv->username);
 	g_free(priv->password);
+
+	G_OBJECT_CLASS(purple_media_candidate_parent_class)->finalize(info);
 }
 
 static void
@@ -114,7 +112,8 @@
 	PurpleMediaCandidatePrivate *priv;
 	g_return_if_fail(PURPLE_IS_MEDIA_CANDIDATE(object));
 
-	priv = PURPLE_MEDIA_CANDIDATE_GET_PRIVATE(object);
+	priv = purple_media_candidate_get_instance_private(
+			PURPLE_MEDIA_CANDIDATE(object));
 
 	switch (prop_id) {
 		case PROP_FOUNDATION:
@@ -172,7 +171,8 @@
 	PurpleMediaCandidatePrivate *priv;
 	g_return_if_fail(PURPLE_IS_MEDIA_CANDIDATE(object));
 
-	priv = PURPLE_MEDIA_CANDIDATE_GET_PRIVATE(object);
+	priv = purple_media_candidate_get_instance_private(
+			PURPLE_MEDIA_CANDIDATE(object));
 
 	switch (prop_id) {
 		case PROP_FOUNDATION:
@@ -312,8 +312,6 @@
 			"The TTL of the candidate.",
 			0, G_MAXUINT, 0,
 			G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-
-	g_type_class_add_private(klass, sizeof(PurpleMediaCandidatePrivate));
 }
 
 PurpleMediaCandidate *
@@ -340,7 +338,7 @@
 	if (candidate == NULL)
 		return NULL;
 
-	priv = PURPLE_MEDIA_CANDIDATE_GET_PRIVATE(candidate);
+	priv = purple_media_candidate_get_instance_private(candidate);
 
 	new_candidate = purple_media_candidate_new(priv->foundation,
 			priv->component_id, priv->type, priv->proto,
--- a/libpurple/media/codec.c	Fri Nov 02 01:08:17 2018 +0000
+++ b/libpurple/media/codec.c	Fri Nov 02 01:24:29 2018 +0000
@@ -28,10 +28,6 @@
 /** @copydoc _PurpleMediaCodecPrivate */
 typedef struct _PurpleMediaCodecPrivate PurpleMediaCodecPrivate;
 
-#define PURPLE_MEDIA_CODEC_GET_PRIVATE(obj) \
-		(G_TYPE_INSTANCE_GET_PRIVATE((obj), \
-		PURPLE_TYPE_MEDIA_CODEC, PurpleMediaCodecPrivate))
-
 struct _PurpleMediaCodecClass
 {
 	GObjectClass parent_class;
@@ -42,8 +38,6 @@
 	GObject parent;
 };
 
-G_DEFINE_TYPE(PurpleMediaCodec, purple_media_codec, G_TYPE_OBJECT);
-
 struct _PurpleMediaCodecPrivate
 {
 	gint id;
@@ -67,11 +61,13 @@
 
 static GParamSpec *properties[PROP_LAST];
 
+G_DEFINE_TYPE_WITH_PRIVATE(PurpleMediaCodec, purple_media_codec, G_TYPE_OBJECT);
+
 static void
 purple_media_codec_init(PurpleMediaCodec *info)
 {
 	PurpleMediaCodecPrivate *priv =
-			PURPLE_MEDIA_CODEC_GET_PRIVATE(info);
+			purple_media_codec_get_instance_private(info);
 	priv->encoding_name = NULL;
 	priv->optional_params = NULL;
 }
@@ -80,7 +76,8 @@
 purple_media_codec_finalize(GObject *info)
 {
 	PurpleMediaCodecPrivate *priv =
-			PURPLE_MEDIA_CODEC_GET_PRIVATE(info);
+			purple_media_codec_get_instance_private(
+					PURPLE_MEDIA_CODEC(info));
 	g_free(priv->encoding_name);
 	for (; priv->optional_params; priv->optional_params =
 			g_list_delete_link(priv->optional_params, priv->optional_params)) {
@@ -89,6 +86,8 @@
 		g_free(param->value);
 		g_free(param);
 	}
+
+	G_OBJECT_CLASS(purple_media_codec_parent_class)->finalize(info);
 }
 
 static void
@@ -98,7 +97,8 @@
 	PurpleMediaCodecPrivate *priv;
 	g_return_if_fail(PURPLE_IS_MEDIA_CODEC(object));
 
-	priv = PURPLE_MEDIA_CODEC_GET_PRIVATE(object);
+	priv = purple_media_codec_get_instance_private(
+			PURPLE_MEDIA_CODEC(object));
 
 	switch (prop_id) {
 		case PROP_ID:
@@ -134,7 +134,8 @@
 	PurpleMediaCodecPrivate *priv;
 	g_return_if_fail(PURPLE_IS_MEDIA_CODEC(object));
 
-	priv = PURPLE_MEDIA_CODEC_GET_PRIVATE(object);
+	priv = purple_media_codec_get_instance_private(
+			PURPLE_MEDIA_CODEC(object));
 
 	switch (prop_id) {
 		case PROP_ID:
@@ -171,8 +172,6 @@
 	gobject_class->set_property = purple_media_codec_set_property;
 	gobject_class->get_property = purple_media_codec_get_property;
 
-	g_type_class_add_private(klass, sizeof(PurpleMediaCodecPrivate));
-
 	properties[PROP_ID] = g_param_spec_uint("id",
 			"ID",
 			"The numeric identifier of the codec.",
@@ -283,7 +282,7 @@
 	g_return_if_fail(codec != NULL);
 	g_return_if_fail(name != NULL && value != NULL);
 
-	priv = PURPLE_MEDIA_CODEC_GET_PRIVATE(codec);
+	priv = purple_media_codec_get_instance_private(codec);
 
 	new_param = g_new0(PurpleKeyValuePair, 1);
 	new_param->key = g_strdup(name);
@@ -302,7 +301,7 @@
 
 	g_return_if_fail(codec != NULL && param != NULL);
 
-	priv = PURPLE_MEDIA_CODEC_GET_PRIVATE(codec);
+	priv = purple_media_codec_get_instance_private(codec);
 
 	g_free(param->key);
 	g_free(param->value);
@@ -324,7 +323,7 @@
 	g_return_val_if_fail(codec != NULL, NULL);
 	g_return_val_if_fail(name != NULL, NULL);
 
-	priv = PURPLE_MEDIA_CODEC_GET_PRIVATE(codec);
+	priv = purple_media_codec_get_instance_private(codec);
 
 	for (iter = priv->optional_params; iter; iter = g_list_next(iter)) {
 		PurpleKeyValuePair *param = iter->data;
@@ -347,7 +346,7 @@
 	if (codec == NULL)
 		return NULL;
 
-	priv = PURPLE_MEDIA_CODEC_GET_PRIVATE(codec);
+	priv = purple_media_codec_get_instance_private(codec);
 
 	new_codec = purple_media_codec_new(priv->id, priv->encoding_name,
 			priv->media_type, priv->clock_rate);
@@ -387,7 +386,7 @@
 }
 
 gchar *
-purple_media_codec_to_string(const PurpleMediaCodec *codec)
+purple_media_codec_to_string(PurpleMediaCodec *codec)
 {
 	PurpleMediaCodecPrivate *priv;
 	GString *string = NULL;
@@ -398,7 +397,7 @@
 	if (codec == NULL)
 		return g_strdup("(NULL)");
 
-	priv = PURPLE_MEDIA_CODEC_GET_PRIVATE(codec);
+	priv = purple_media_codec_get_instance_private(codec);
 
 	string = g_string_new("");
 
--- a/libpurple/media/codec.h	Fri Nov 02 01:08:17 2018 +0000
+++ b/libpurple/media/codec.h	Fri Nov 02 01:24:29 2018 +0000
@@ -198,7 +198,7 @@
  *
  * Returns: The new string representation.
  */
-gchar *purple_media_codec_to_string(const PurpleMediaCodec *codec);
+gchar *purple_media_codec_to_string(PurpleMediaCodec *codec);
 
 G_END_DECLS
 
--- a/libpurple/mediamanager.c	Fri Nov 02 01:08:17 2018 +0000
+++ b/libpurple/mediamanager.c	Fri Nov 02 01:24:29 2018 +0000
@@ -113,12 +113,7 @@
 } PurpleMediaAppDataInfo;
 #endif
 
-#define PURPLE_MEDIA_MANAGER_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE((obj), PURPLE_TYPE_MEDIA_MANAGER, PurpleMediaManagerPrivate))
-#define PURPLE_MEDIA_ELEMENT_INFO_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE((obj), PURPLE_TYPE_MEDIA_ELEMENT_INFO, PurpleMediaElementInfoPrivate))
-
 #ifdef USE_VV
-static void purple_media_manager_class_init (PurpleMediaManagerClass *klass);
-static void purple_media_manager_init (PurpleMediaManager *media);
 static void purple_media_manager_finalize (GObject *object);
 #ifdef HAVE_MEDIA_APPLICATION
 static void free_appdata_info_locked (PurpleMediaAppDataInfo *info);
@@ -126,9 +121,6 @@
 static void purple_media_manager_init_device_monitor(PurpleMediaManager *manager);
 static void purple_media_manager_register_static_elements(PurpleMediaManager *manager);
 
-static GObjectClass *parent_class = NULL;
-
-
 
 enum {
 	INIT_MEDIA,
@@ -138,41 +130,22 @@
 	LAST_SIGNAL
 };
 static guint purple_media_manager_signals[LAST_SIGNAL] = {0};
-#endif
-
+
+G_DEFINE_TYPE_WITH_PRIVATE(PurpleMediaManager, purple_media_manager,
+		G_TYPE_OBJECT);
+#else
 GType
 purple_media_manager_get_type()
 {
-#ifdef USE_VV
-	static GType type = 0;
-
-	if (type == 0) {
-		static const GTypeInfo info = {
-			sizeof(PurpleMediaManagerClass),
-			NULL,
-			NULL,
-			(GClassInitFunc) purple_media_manager_class_init,
-			NULL,
-			NULL,
-			sizeof(PurpleMediaManager),
-			0,
-			(GInstanceInitFunc) purple_media_manager_init,
-			NULL
-		};
-		type = g_type_register_static(G_TYPE_OBJECT, "PurpleMediaManager", &info, 0);
-	}
-	return type;
-#else
 	return G_TYPE_NONE;
-#endif
 }
+#endif /* USE_VV */
 
 #ifdef USE_VV
 static void
 purple_media_manager_class_init (PurpleMediaManagerClass *klass)
 {
 	GObjectClass *gobject_class = (GObjectClass*)klass;
-	parent_class = g_type_class_peek_parent(klass);
 
 	gobject_class->finalize = purple_media_manager_finalize;
 
@@ -204,8 +177,6 @@
 			G_SIGNAL_RUN_LAST | G_SIGNAL_DETAILED,
 			0, NULL, NULL, NULL,
 			G_TYPE_NONE, 0);
-
-	g_type_class_add_private(klass, sizeof(PurpleMediaManagerPrivate));
 }
 
 static void
@@ -213,7 +184,7 @@
 {
 	GError *error;
 
-	media->priv = PURPLE_MEDIA_MANAGER_GET_PRIVATE(media);
+	media->priv = purple_media_manager_get_instance_private(media);
 	media->priv->medias = NULL;
 	media->priv->private_medias = NULL;
 	media->priv->next_output_window_id = 1;
@@ -245,7 +216,10 @@
 static void
 purple_media_manager_finalize (GObject *media)
 {
-	PurpleMediaManagerPrivate *priv = PURPLE_MEDIA_MANAGER_GET_PRIVATE(media);
+	PurpleMediaManagerPrivate *priv =
+			purple_media_manager_get_instance_private(
+					PURPLE_MEDIA_MANAGER(media));
+
 	for (; priv->medias; priv->medias =
 			g_list_delete_link(priv->medias, priv->medias)) {
 		g_object_unref(priv->medias->data);
@@ -273,7 +247,7 @@
 	}
 #endif /* GST_CHECK_VERSION(1, 4, 0) */
 
-	parent_class->finalize(media);
+	G_OBJECT_CLASS(purple_media_manager_parent_class)->finalize(media);
 }
 #endif
 
@@ -2409,11 +2383,14 @@
 	PROP_CREATE_CB,
 };
 
+G_DEFINE_TYPE_WITH_PRIVATE(PurpleMediaElementInfo,
+		purple_media_element_info, G_TYPE_OBJECT);
+
 static void
 purple_media_element_info_init(PurpleMediaElementInfo *info)
 {
 	PurpleMediaElementInfoPrivate *priv =
-			PURPLE_MEDIA_ELEMENT_INFO_GET_PRIVATE(info);
+			purple_media_element_info_get_instance_private(info);
 	priv->id = NULL;
 	priv->name = NULL;
 	priv->type = PURPLE_MEDIA_ELEMENT_NONE;
@@ -2424,9 +2401,12 @@
 purple_media_element_info_finalize(GObject *info)
 {
 	PurpleMediaElementInfoPrivate *priv =
-			PURPLE_MEDIA_ELEMENT_INFO_GET_PRIVATE(info);
+			purple_media_element_info_get_instance_private(
+					PURPLE_MEDIA_ELEMENT_INFO(info));
 	g_free(priv->id);
 	g_free(priv->name);
+
+	G_OBJECT_CLASS(purple_media_element_info_parent_class)->finalize(info);
 }
 
 static void
@@ -2436,7 +2416,8 @@
 	PurpleMediaElementInfoPrivate *priv;
 	g_return_if_fail(PURPLE_IS_MEDIA_ELEMENT_INFO(object));
 
-	priv = PURPLE_MEDIA_ELEMENT_INFO_GET_PRIVATE(object);
+	priv = purple_media_element_info_get_instance_private(
+			PURPLE_MEDIA_ELEMENT_INFO(object));
 
 	switch (prop_id) {
 		case PROP_ID:
@@ -2468,7 +2449,8 @@
 	PurpleMediaElementInfoPrivate *priv;
 	g_return_if_fail(PURPLE_IS_MEDIA_ELEMENT_INFO(object));
 
-	priv = PURPLE_MEDIA_ELEMENT_INFO_GET_PRIVATE(object);
+	priv = purple_media_element_info_get_instance_private(
+			PURPLE_MEDIA_ELEMENT_INFO(object));
 
 	switch (prop_id) {
 		case PROP_ID:
@@ -2530,13 +2512,8 @@
 			"The function called to create this element.",
 			G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE |
 			G_PARAM_STATIC_STRINGS));
-
-	g_type_class_add_private(klass, sizeof(PurpleMediaElementInfoPrivate));
 }
 
-G_DEFINE_TYPE(PurpleMediaElementInfo,
-		purple_media_element_info, G_TYPE_OBJECT);
-
 gchar *
 purple_media_element_info_get_id(PurpleMediaElementInfo *info)
 {

mercurial