# HG changeset patch # User Sadrul Habib Chowdhury # Date 1182935757 0 # Node ID ffd706ec0220f337bc1be306ad3c2fc0bac3abcf # Parent 38ecbc8a70bdd8ae09e040a1151e62f9a7623bda Set and use convchatbuddy->buddy. This change also makes sure we don't leak everytime any user in a chatroom changes nick. Thanks to stingray for noticing this. Fixes #1818. diff -r 38ecbc8a70bd -r ffd706ec0220 libpurple/conversation.c --- a/libpurple/conversation.c Wed Jun 27 06:32:56 2007 +0000 +++ b/libpurple/conversation.c Wed Jun 27 09:15:57 2007 +0000 @@ -1563,6 +1563,7 @@ purple_conv_chat_is_user_ignored(chat, user); cbuddy = purple_conv_chat_cb_new(user, alias, flag); + cbuddy->buddy = purple_find_buddy(conv->account, user) != NULL; /* This seems dumb. Why should we set users thousands of times? */ purple_conv_chat_set_users(chat, g_list_prepend(chat->in_room, cbuddy)); @@ -1631,11 +1632,6 @@ prpl_info = PURPLE_PLUGIN_PROTOCOL_INFO(gc->prpl); g_return_if_fail(prpl_info != NULL); - flags = purple_conv_chat_user_get_flags(chat, old_user); - cb = purple_conv_chat_cb_new(new_user, NULL, flags); - purple_conv_chat_set_users(chat, - g_list_prepend(chat->in_room, cb)); - if (!strcmp(chat->nick, purple_normalize(conv->account, old_user))) { const char *alias; @@ -1659,6 +1655,12 @@ new_alias = purple_buddy_get_contact_alias(buddy); } + flags = purple_conv_chat_user_get_flags(chat, old_user); + cb = purple_conv_chat_cb_new(new_user, new_alias, flags); + cb->buddy = purple_find_buddy(conv->account, new_user) != NULL; + purple_conv_chat_set_users(chat, + g_list_prepend(chat->in_room, cb)); + if (ops != NULL && ops->chat_rename_user != NULL) ops->chat_rename_user(conv, old_user, new_user, new_alias); @@ -1949,6 +1951,7 @@ return chat->left; } + PurpleConvChatBuddy * purple_conv_chat_cb_new(const char *name, const char *alias, PurpleConvChatBuddyFlags flags) { diff -r 38ecbc8a70bd -r ffd706ec0220 pidgin/gtkconv.c --- a/pidgin/gtkconv.c Wed Jun 27 06:32:56 2007 +0000 +++ b/pidgin/gtkconv.c Wed Jun 27 09:15:57 2007 +0000 @@ -3684,7 +3684,7 @@ if (!strcmp(chat->nick, purple_normalize(conv->account, old_name != NULL ? old_name : name))) is_me = TRUE; - is_buddy = (purple_find_buddy(conv->account, name) != NULL); + is_buddy = cb->buddy; tmp = g_utf8_casefold(alias, -1); alias_key = g_utf8_collate_key(tmp, -1); @@ -5576,7 +5576,7 @@ g_return_if_fail(new_alias != NULL); - cbuddy = purple_conv_chat_cb_new(new_name, new_alias, flags); + cbuddy = purple_conv_chat_cb_find(chat, new_name); add_chat_buddy_common(conv, cbuddy, old_name); }