diff options
Diffstat (limited to 'src/irc')
-rw-r--r-- | src/irc/core/irc-servers.c | 24 |
1 files changed, 9 insertions, 15 deletions
diff --git a/src/irc/core/irc-servers.c b/src/irc/core/irc-servers.c index f678777b..ef8a21ee 100644 --- a/src/irc/core/irc-servers.c +++ b/src/irc/core/irc-servers.c @@ -416,21 +416,15 @@ static int sig_set_user_mode(IRC_SERVER_REC *server) newmode = server->usermode == NULL ? NULL : modes_join(server->usermode, mode, FALSE); - if (server->usermode == NULL) { - /* server didn't set user mode, just set the new one */ - irc_send_cmdv(server, "MODE %s %s", server->nick, mode); - } else if (strcmp(newmode, server->usermode) != 0) { - if (server->connrec->reconnection) { - /* when reconnecting, we want to set exactly the - same mode we had before reconnect */ - args = g_strdup_printf("%s -%s+%s", server->nick, - server->usermode, mode); - } else { - /* allow using modes the server gave us */ - args = g_strdup_printf("%s -%s", server->nick, mode); - } - signal_emit("command mode", 3, server, args, NULL); - g_free(args); + if (newmode == NULL || strcmp(newmode, server->usermode) != 0) { + /* change the user mode. we used to do some trickery to + get rid of unwanted modes at reconnect time, but that's + more trouble than worth. (eg. we don't want to remove + some good default server modes, but we don't want to + set back +r, etc..) */ + args = g_strdup_printf("%s %s", server->nick, mode); + signal_emit("command mode", 3, args, server, NULL); + g_free(args); } g_free_not_null(newmode); |