changeset 15256:2e3ffe29f9ae

[gaim-migrate @ 18045] We occasionally get to gaim_parse_oncoming() with a user_info indicating a NULL away message for a contact who (1) is away and is still away and (2) does actually have a message. gaim_got_infoblock() will then be called shortly thereafter. Check to ensure that the call to gaim_prpl_got_user_status() has some benefit other than potentially removing an appropriate away message; do the call if the status actually changes as a result. This fixes an issue in which away messages would periodically flicker invisible and then visible again in the contact list for certain contacts. committer: Tailor Script <tailor@pidgin.im>
author Evan Schoenberg <evan.s@dreskin.net>
date Fri, 22 Dec 2006 08:29:28 +0000
parents e711afcb9ff4
children 7a94d65a8f6a
files libgaim/protocols/oscar/oscar.c
diffstat 1 files changed, 12 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/libgaim/protocols/oscar/oscar.c	Fri Dec 22 06:59:05 2006 +0000
+++ b/libgaim/protocols/oscar/oscar.c	Fri Dec 22 08:29:28 2006 +0000
@@ -1774,8 +1774,18 @@
 		g_free(message);
 	}
 	else
-		gaim_prpl_got_user_status(account, info->sn, status_id, NULL);
-
+	{
+		GaimBuddy *b = gaim_find_buddy(account, info->sn);
+		GaimStatus *status;
+		const char *active_status_id;
+		
+		status = gaim_presence_get_active_status(gaim_buddy_get_presence(b));
+		active_status_id = gaim_status_get_id(status);
+		
+		if (!active_status_id || strcmp(active_status_id, status_id))
+			gaim_prpl_got_user_status(account, info->sn, status_id, NULL);
+	}
+	
 	/* Login time stuff */
 	if (info->present & AIM_USERINFO_PRESENT_ONLINESINCE)
 		signon = info->onlinesince;