besser82 / rpms / pidgin

Forked from rpms/pidgin 6 years ago
Clone
David Woodhouse 313cf00
David Woodhouse 313cf00
# HG changeset patch
David Woodhouse 313cf00
# User Jakub Adam <jakub.adam@ktknet.cz>
David Woodhouse 313cf00
# Date 1407847148 -7200
David Woodhouse 313cf00
# Node ID 7767aaeade6404396204794f9bc75d9a2cb723f0
David Woodhouse 313cf00
# Parent  8e4fa54f166211ffd6cd869cca611e8d64ea1fdf
David Woodhouse 313cf00
media: make "init-media" signal handler optional
David Woodhouse 313cf00
David Woodhouse 313cf00
Change the logic so that the PurpleMedia instance isn't disposed when
David Woodhouse 313cf00
"init-media" has no connected handlers.
David Woodhouse 313cf00
David Woodhouse 313cf00
We want the media object freed only when some signal callback function
David Woodhouse 313cf00
explicitly returns FALSE, indicating an error during the initialization.
David Woodhouse 313cf00
David Woodhouse 313cf00
This is mostly useful for the imminent addition of private media streams.
David Woodhouse 313cf00
David Woodhouse 313cf00
diff --git a/libpurple/mediamanager.c b/libpurple/mediamanager.c
David Woodhouse 313cf00
--- a/libpurple/mediamanager.c
David Woodhouse 313cf00
+++ b/libpurple/mediamanager.c
David Woodhouse 313cf00
@@ -334,7 +334,7 @@
David Woodhouse 313cf00
 {
David Woodhouse 313cf00
 #ifdef USE_VV
David Woodhouse 313cf00
 	PurpleMedia *media;
David Woodhouse 313cf00
-	gboolean signal_ret;
David Woodhouse 313cf00
+	guint signal_id;
David Woodhouse 313cf00
 
David Woodhouse 313cf00
 	media = PURPLE_MEDIA(g_object_new(purple_media_get_type(),
David Woodhouse 313cf00
 			     "manager", manager,
David Woodhouse 313cf00
@@ -343,12 +343,17 @@
David Woodhouse 313cf00
 			     "initiator", initiator,
David Woodhouse 313cf00
 			     NULL));
David Woodhouse 313cf00
 
David Woodhouse 313cf00
-	g_signal_emit(manager, purple_media_manager_signals[INIT_MEDIA], 0,
David Woodhouse 313cf00
-			media, account, remote_user, &signal_ret);
David Woodhouse 313cf00
+	signal_id = purple_media_manager_signals[INIT_MEDIA];
David Woodhouse 313cf00
 
David Woodhouse 313cf00
-	if (signal_ret == FALSE) {
David Woodhouse 313cf00
-		g_object_unref(media);
David Woodhouse 313cf00
-		return NULL;
David Woodhouse 313cf00
+	if (g_signal_has_handler_pending(manager, signal_id, 0, FALSE)) {
David Woodhouse 313cf00
+		gboolean signal_ret;
David Woodhouse 313cf00
+
David Woodhouse 313cf00
+		g_signal_emit(manager, signal_id, 0, media, account, remote_user,
David Woodhouse 313cf00
+				&signal_ret);
David Woodhouse 313cf00
+		if (signal_ret == FALSE) {
David Woodhouse 313cf00
+			g_object_unref(media);
David Woodhouse 313cf00
+			return NULL;
David Woodhouse 313cf00
+		}
David Woodhouse 313cf00
 	}
David Woodhouse 313cf00
 
David Woodhouse 313cf00
 	manager->priv->medias = g_list_append(manager->priv->medias, media);
David Woodhouse 313cf00