diff options
author | James Booth <boothj5@gmail.com> | 2016-02-03 22:19:29 +0000 |
---|---|---|
committer | James Booth <boothj5@gmail.com> | 2016-02-03 22:19:29 +0000 |
commit | 30116dd922d57e6676118b47a7c59bdaa838406d (patch) | |
tree | baf7de23db7e978bd97e4714708504d5df9d41f4 | |
parent | 46b27bcbd8ca0dd89194c4192446d5386eb6013d (diff) | |
download | profani-tty-30116dd922d57e6676118b47a7c59bdaa838406d.tar.gz |
Update autocompleters on roster nick change/clear
fixes #720
-rw-r--r-- | src/command/commands.c | 9 | ||||
-rw-r--r-- | src/window_list.c | 26 | ||||
-rw-r--r-- | src/window_list.h | 2 |
3 files changed, 37 insertions, 0 deletions
diff --git a/src/command/commands.c b/src/command/commands.c index c8c01778..d4e635c1 100644 --- a/src/command/commands.c +++ b/src/command/commands.c @@ -2665,10 +2665,15 @@ cmd_roster(ProfWin *window, const char *const command, gchar **args) } const char *barejid = p_contact_barejid(contact); + + // TODO wait for result stanza before updating + const char *oldnick = p_contact_name(contact); + wins_change_nick(barejid, oldnick, name); roster_change_name(contact, name); GSList *groups = p_contact_groups(contact); roster_send_name_change(barejid, name, groups); + cons_show("Nickname for %s set to: %s.", jid, name); return TRUE; @@ -2693,6 +2698,10 @@ cmd_roster(ProfWin *window, const char *const command, gchar **args) } const char *barejid = p_contact_barejid(contact); + + // TODO wait for result stanza before updating + const char *oldnick = p_contact_name(contact); + wins_remove_nick(barejid, oldnick); roster_change_name(contact, NULL); GSList *groups = p_contact_groups(contact); roster_send_name_change(barejid, NULL, groups); diff --git a/src/window_list.c b/src/window_list.c index e4ef8a64..62576b84 100644 --- a/src/window_list.c +++ b/src/window_list.c @@ -221,6 +221,32 @@ wins_private_nick_change(const char *const roomjid, const char *const oldnick, c jid_destroy(oldjid); } +void +wins_change_nick(const char *const barejid, const char *const oldnick, const char *const newnick) +{ + ProfChatWin *chatwin = wins_get_chat(barejid); + if (chatwin) { + if (oldnick) { + autocomplete_remove(wins_ac, oldnick); + autocomplete_remove(wins_close_ac, oldnick); + } + autocomplete_add(wins_ac, newnick); + autocomplete_add(wins_close_ac, newnick); + } +} + +void +wins_remove_nick(const char *const barejid, const char *const oldnick) +{ + ProfChatWin *chatwin = wins_get_chat(barejid); + if (chatwin) { + if (oldnick) { + autocomplete_remove(wins_ac, oldnick); + autocomplete_remove(wins_close_ac, oldnick); + } + } +} + ProfWin* wins_get_current(void) { diff --git a/src/window_list.h b/src/window_list.h index 3c4c29fe..7037e80e 100644 --- a/src/window_list.h +++ b/src/window_list.h @@ -48,6 +48,8 @@ ProfWin* wins_new_private(const char *const fulljid); gboolean wins_chat_exists(const char *const barejid); GList* wins_get_private_chats(const char *const roomjid); void wins_private_nick_change(const char *const roomjid, const char *const oldnick, const char *const newnick); +void wins_change_nick(const char *const barejid, const char *const oldnick, const char *const newnick); +void wins_remove_nick(const char *const barejid, const char *const oldnick); ProfWin* wins_get_console(void); ProfChatWin* wins_get_chat(const char *const barejid); |