diff libpurple/mediamanager.c @ 23872:1d9a2296d5d2

Stop additional media sessions within a single conversation for grouped contacts.
author Mike Ruprecht <maiku@soc.pidgin.im>
date Fri, 15 Aug 2008 04:07:00 +0000
parents b8a73b6dc0a4
children f10e0ac24595
line wrap: on
line diff
--- a/libpurple/mediamanager.c	Thu Aug 14 23:23:41 2008 +0000
+++ b/libpurple/mediamanager.c	Fri Aug 15 04:07:00 2008 +0000
@@ -27,6 +27,7 @@
 #include "internal.h"
 
 #include "connection.h"
+#include "marshallers.h"
 #include "mediamanager.h"
 #include "media.h"
 
@@ -100,8 +101,8 @@
 		G_TYPE_FROM_CLASS (klass),
 		G_SIGNAL_RUN_LAST,
 		0, NULL, NULL,
-		g_cclosure_marshal_VOID__OBJECT,
-		G_TYPE_NONE, 1, PURPLE_TYPE_MEDIA);
+		purple_smarshal_BOOLEAN__OBJECT,
+		G_TYPE_BOOLEAN, 1, PURPLE_TYPE_MEDIA);
 	g_type_class_add_private(klass, sizeof(PurpleMediaManagerPrivate));
 }
 
@@ -137,6 +138,7 @@
 	PurpleMedia *media;
 	FsConference *conference = FS_CONFERENCE(gst_element_factory_make(conference_type, NULL));
 	GstStateChangeReturn ret;
+	gboolean signal_ret;
 
 	media = PURPLE_MEDIA(g_object_new(purple_media_get_type(),
 			     "screenname", remote_user,
@@ -154,8 +156,15 @@
 		return NULL;
 	}
 
+	g_signal_emit(manager, purple_media_manager_signals[INIT_MEDIA], 0,
+			media, &signal_ret);
+
+	if (signal_ret == FALSE) {
+		g_object_unref(media);
+		return NULL;
+	}
+
 	manager->priv->medias = g_list_append(manager->priv->medias, media);
-	g_signal_emit(manager, purple_media_manager_signals[INIT_MEDIA], 0, media);
 	return media;
 }