diff options
author | Sebastien Helleu <flashcode@flashtux.org> | 2009-02-20 11:57:03 +0100 |
---|---|---|
committer | Sebastien Helleu <flashcode@flashtux.org> | 2009-02-20 11:57:03 +0100 |
commit | e3f12be462a37c09549fff4e3652914e81ae41b0 (patch) | |
tree | c92998322ff4bf0c946668c70b2ccb9cc7c464fd | |
parent | a3b9fa248340c94b1d15abafd521c4f759433dd4 (diff) | |
download | weechat-e3f12be462a37c09549fff4e3652914e81ae41b0.zip |
Fix bug with smart completion (irc/jabber): keep unique nicks in list of last speakers (bug #25559)
-rw-r--r-- | src/plugins/irc/irc-channel.c | 10 | ||||
-rw-r--r-- | src/plugins/jabber/jabber-muc.c | 10 |
2 files changed, 20 insertions, 0 deletions
diff --git a/src/plugins/irc/irc-channel.c b/src/plugins/irc/irc-channel.c index 66b116c02..7f06e0939 100644 --- a/src/plugins/irc/irc-channel.c +++ b/src/plugins/irc/irc-channel.c @@ -308,18 +308,28 @@ irc_channel_nick_speaking_add (struct t_irc_channel *channel, const char *nick_name, int highlight) { int size, to_remove, i; + struct t_weelist_item *ptr_item; if (highlight < 0) highlight = 0; if (highlight > 1) highlight = 1; + /* create list if it does not exist */ if (!channel->nicks_speaking[highlight]) channel->nicks_speaking[highlight] = weechat_list_new (); + /* remove item if it was already in list */ + ptr_item = weechat_list_casesearch (channel->nicks_speaking[highlight], + nick_name); + if (ptr_item) + weechat_list_remove (channel->nicks_speaking[highlight], ptr_item); + + /* add nick in list */ weechat_list_add (channel->nicks_speaking[highlight], nick_name, WEECHAT_LIST_POS_END); + /* reduce list size if it's too big */ size = weechat_list_size (channel->nicks_speaking[highlight]); if (size > IRC_CHANNEL_NICKS_SPEAKING_LIMIT) { diff --git a/src/plugins/jabber/jabber-muc.c b/src/plugins/jabber/jabber-muc.c index 109ffd273..dd24d2e26 100644 --- a/src/plugins/jabber/jabber-muc.c +++ b/src/plugins/jabber/jabber-muc.c @@ -253,18 +253,28 @@ jabber_muc_buddy_speaking_add (struct t_jabber_muc *muc, const char *buddy_name, int highlight) { int size, to_remove, i; + struct t_weelist_item *ptr_item; if (highlight < 0) highlight = 0; if (highlight > 1) highlight = 1; + /* create list if it does not exist */ if (!muc->buddies_speaking[highlight]) muc->buddies_speaking[highlight] = weechat_list_new (); + /* remove item if it was already in list */ + ptr_item = weechat_list_casesearch (muc->buddies_speaking[highlight], + buddy_name); + if (ptr_item) + weechat_list_remove (muc->buddies_speaking[highlight], ptr_item); + + /* add buddy in list */ weechat_list_add (muc->buddies_speaking[highlight], buddy_name, WEECHAT_LIST_POS_END); + /* reduce list size if it's too big */ size = weechat_list_size (muc->buddies_speaking[highlight]); if (size > JABBER_MUC_BUDDIES_SPEAKING_LIMIT) { |