Mercurial > pidgin
diff libpurple/prpl.c @ 29315:7b1cfd48beab
propagate from branch 'im.pidgin.cpw.attention_ui' (head 3d97b094123bd082b1438ea44cb25169aa41315c)
to branch 'im.pidgin.pidgin.next.minor' (head d00241305ccc36eef5bd6723980b66a2e6108856)
author | Marcus Lundblad <ml@update.uu.se> |
---|---|
date | Mon, 16 Nov 2009 22:06:27 +0000 |
parents | 163f6c3cbdd9 c5712737e59a |
children | 31a34388fb1d |
line wrap: on
line diff
--- a/libpurple/prpl.c Mon Nov 16 21:57:32 2009 +0000 +++ b/libpurple/prpl.c Mon Nov 16 22:06:27 2009 +0000 @@ -288,8 +288,10 @@ /* The buddy is no longer online, they are therefore by definition not * still typing to us. */ - if (!purple_status_is_online(status)) + if (!purple_status_is_online(status)) { serv_got_typing_stopped(purple_account_get_connection(account), name); + purple_prpl_got_media_caps(account, name); + } } void purple_prpl_got_user_status_deactive(PurpleAccount *account, const char *name, @@ -579,6 +581,35 @@ return PURPLE_MEDIA_CAPS_NONE; } +void +purple_prpl_got_media_caps(PurpleAccount *account, const char *name) +{ +#ifdef USE_VV + GSList *list; + + g_return_if_fail(account != NULL); + g_return_if_fail(name != NULL); + + if ((list = purple_find_buddies(account, name)) == NULL) + return; + + while (list) { + PurpleBuddy *buddy = list->data; + PurpleMediaCaps oldcaps = buddy->media_caps; + const gchar *bname = purple_buddy_get_name(buddy); + list = g_slist_delete_link(list, list); + buddy->media_caps = purple_prpl_get_media_caps(account, bname); + + if (oldcaps == buddy->media_caps) + continue; + + purple_signal_emit(purple_blist_get_handle(), + "buddy-caps-changed", buddy, + buddy->media_caps, oldcaps); + } +#endif +} + /************************************************************************** * Protocol Plugin Subsystem API **************************************************************************/