Mercurial > pidgin
changeset 12476:18b16e801e6f
[gaim-migrate @ 14787]
SF Patch #1379107 from evands
'Properly notify the UI when a buddy icon changes
gaim_buddy_set_icon() currently does nothing if the incoming
GaimBuddyIcon* is the same as buddy->icon.
This is wrong, however, because gaim_buddy_icon_new() will recycle an
existing GaimBuddyIcon* object for the buddy, replacing its data with the
new buddy icon data, if possible. The recycling means that just because
(icon == buddy->icon) we can't assume nothing has changed.
This patch makes the "buddy-icon-changed" signal be sent and the
gaim_blist_update_buddy_icon() function be called appropriately when the
buddy icon changes.
Call stack that gets us here from prpl code, for those keeping score at
home:
gaim_buddy_icons_set_for_user() -> gaim_buddy_icon_new() ->
gaim_buddy_icon_set_data() -> gaim_buddy_icon_update() ->
gaim_buddy_set_icon()'
committer: Tailor Script <tailor@pidgin.im>
author | Richard Laager <rlaager@wiktel.com> |
---|---|
date | Tue, 13 Dec 2005 08:10:28 +0000 |
parents | 572d6d5da418 |
children | d90eae2387b5 |
files | src/blist.c |
diffstat | 1 files changed, 6 insertions(+), 8 deletions(-) [+] |
line wrap: on
line diff
--- a/src/blist.c Tue Dec 13 08:04:13 2005 +0000 +++ b/src/blist.c Tue Dec 13 08:10:28 2005 +0000 @@ -1122,14 +1122,12 @@ { g_return_if_fail(buddy != NULL); - if (buddy->icon == icon) - /* Don't need to do anything */ - return; - - if (buddy->icon != NULL) - gaim_buddy_icon_unref(buddy->icon); - - buddy->icon = (icon != NULL ? gaim_buddy_icon_ref(icon) : NULL); + if (buddy->icon != icon) { + if (buddy->icon != NULL) + gaim_buddy_icon_unref(buddy->icon); + + buddy->icon = (icon != NULL ? gaim_buddy_icon_ref(icon) : NULL); + } if (buddy->icon) gaim_buddy_icon_cache(icon, buddy);