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