diff options
author | Jakub Adam <jakub.adam@ktknet.cz> | 2016-06-23 12:57:41 +0200 |
---|---|---|
committer | Jakub Adam <jakub.adam@ktknet.cz> | 2016-06-23 12:57:41 +0200 |
commit | 62763c0dfe26c20d93d762c4b674ce159fb5aeaf (patch) | |
tree | bdfbc109748de007c65bceb5acd7ea61e5629e01 | |
parent | 757f7048c1e5798e3bc8baf544c83ebfec835a9b (diff) | |
download | pidgin-62763c0dfe26c20d93d762c4b674ce159fb5aeaf.tar.gz |
mediamanager: add "elements-changed" signal
-rw-r--r-- | libpurple/mediamanager.c | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/libpurple/mediamanager.c b/libpurple/mediamanager.c index 07553e8d88..49bb9dc5e2 100644 --- a/libpurple/mediamanager.c +++ b/libpurple/mediamanager.c @@ -161,6 +161,7 @@ enum { INIT_MEDIA, INIT_PRIVATE_MEDIA, UI_CAPS_CHANGED, + ELEMENTS_CHANGED, LAST_SIGNAL }; static guint purple_media_manager_signals[LAST_SIGNAL] = {0}; @@ -227,6 +228,14 @@ purple_media_manager_class_init (PurpleMediaManagerClass *klass) G_TYPE_NONE, 2, PURPLE_MEDIA_TYPE_CAPS, PURPLE_MEDIA_TYPE_CAPS); + purple_media_manager_signals[ELEMENTS_CHANGED] = + g_signal_new("elements-changed", + G_TYPE_FROM_CLASS(klass), + G_SIGNAL_RUN_LAST | G_SIGNAL_DETAILED, + 0, NULL, NULL, + g_cclosure_marshal_VOID__VOID, + G_TYPE_NONE, 0); + g_type_class_add_private(klass, sizeof(PurpleMediaManagerPrivate)); } @@ -1316,6 +1325,30 @@ purple_media_manager_get_element_info(PurpleMediaManager *manager, return NULL; } +static GQuark +element_info_to_detail(PurpleMediaElementInfo *info) +{ + PurpleMediaElementType type; + + type = purple_media_element_info_get_element_type(info); + + if (type & PURPLE_MEDIA_ELEMENT_AUDIO) { + if (type & PURPLE_MEDIA_ELEMENT_SRC) { + return g_quark_from_string("audiosrc"); + } else if (type & PURPLE_MEDIA_ELEMENT_SINK) { + return g_quark_from_string("audiosink"); + } + } else if (type & PURPLE_MEDIA_ELEMENT_VIDEO) { + if (type & PURPLE_MEDIA_ELEMENT_SRC) { + return g_quark_from_string("videosrc"); + } else if (type & PURPLE_MEDIA_ELEMENT_SINK) { + return g_quark_from_string("videosink"); + } + } + + return 0; +} + gboolean purple_media_manager_register_element(PurpleMediaManager *manager, PurpleMediaElementInfo *info) @@ -1323,6 +1356,7 @@ purple_media_manager_register_element(PurpleMediaManager *manager, #ifdef USE_VV PurpleMediaElementInfo *info2; gchar *id; + GQuark detail; g_return_val_if_fail(PURPLE_IS_MEDIA_MANAGER(manager), FALSE); g_return_val_if_fail(info != NULL, FALSE); @@ -1338,6 +1372,14 @@ purple_media_manager_register_element(PurpleMediaManager *manager, manager->priv->elements = g_list_prepend(manager->priv->elements, info); + + detail = element_info_to_detail(info); + if (detail != 0) { + g_signal_emit(manager, + purple_media_manager_signals[ELEMENTS_CHANGED], + detail); + } + return TRUE; #else return FALSE; @@ -1350,6 +1392,7 @@ purple_media_manager_unregister_element(PurpleMediaManager *manager, { #ifdef USE_VV PurpleMediaElementInfo *info; + GQuark detail; g_return_val_if_fail(PURPLE_IS_MEDIA_MANAGER(manager), FALSE); @@ -1369,9 +1412,18 @@ purple_media_manager_unregister_element(PurpleMediaManager *manager, if (manager->priv->video_sink == info) manager->priv->video_sink = NULL; + detail = element_info_to_detail(info); + manager->priv->elements = g_list_remove( manager->priv->elements, info); g_object_unref(info); + + if (detail != 0) { + g_signal_emit(manager, + purple_media_manager_signals[ELEMENTS_CHANGED], + detail); + } + return TRUE; #else return FALSE; |