media: make "init-media" signal handler optional

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

author
Jakub Adam <jakub.adam@ktknet.cz>
date
Tue, 12 Aug 2014 14:39:08 +0200
changeset 36327
8a6f23f61052
parent 36326
f80210352fb3
child 36328
cfe439dd03f1

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
@@ -313,7 +313,7 @@
 {
 #ifdef USE_VV
 	PurpleMedia *media;
-	gboolean signal_ret;
+	guint signal_id;
 
 	media = PURPLE_MEDIA(g_object_new(purple_media_get_type(),
 			     "manager", manager,
@@ -322,12 +322,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