|
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 |
|