media: make "init-media" signal handler optional release-2.x.y

Tue, 12 Aug 2014 14:39:08 +0200

author
Jakub Adam <jakub.adam@ktknet.cz>
date
Tue, 12 Aug 2014 14:39:08 +0200
branch
release-2.x.y
changeset 36330
7767aaeade64
parent 36329
8e4fa54f1662
child 36331
d729a9b21265

media: make "init-media" signal handler optional

Change the logic so that the PurpleMedia instance isn't disposed when
"init-media" has no connected handlers.

We want the media object freed only when some signal callback function
explicitly returns FALSE, indicating an error during the initialization.

This is mostly useful for the imminent addition of private media streams.

libpurple/mediamanager.c file | annotate | diff | comparison | revisions
--- a/libpurple/mediamanager.c	Thu Oct 02 23:46:22 2014 +0200
+++ b/libpurple/mediamanager.c	Tue Aug 12 14:39:08 2014 +0200
@@ -334,7 +334,7 @@
 {
 #ifdef USE_VV
 	PurpleMedia *media;
-	gboolean signal_ret;
+	guint signal_id;
 
 	media = PURPLE_MEDIA(g_object_new(purple_media_get_type(),
 			     "manager", manager,
@@ -343,12 +343,17 @@
 			     "initiator", initiator,
 			     NULL));
 
-	g_signal_emit(manager, purple_media_manager_signals[INIT_MEDIA], 0,
-			media, account, remote_user, &signal_ret);
+	signal_id = purple_media_manager_signals[INIT_MEDIA];
+
+	if (g_signal_has_handler_pending(manager, signal_id, 0, FALSE)) {
+		gboolean signal_ret;
 
-	if (signal_ret == FALSE) {
-		g_object_unref(media);
-		return NULL;
+		g_signal_emit(manager, signal_id, 0, media, account, remote_user,
+				&signal_ret);
+		if (signal_ret == FALSE) {
+			g_object_unref(media);
+			return NULL;
+		}
 	}
 
 	manager->priv->medias = g_list_append(manager->priv->medias, media);

mercurial