mirror of
https://github.com/irssi/irssi.git
synced 2026-08-10 12:23:37 +02:00
window->active_server used to hold non-connected servers, but that was
removed before because it created several problems, especially with scripts. however that change made /server and /disconnect annoying to use with non-connected servers. so, now we have window->connect_server as well. either active_server or connect_server is set, but never both. commands that can deal properly with non-connected servers can now use the connect_server, while everyone else happily thinks that no server is active. git-svn-id: http://svn.irssi.org/repos/irssi/trunk@2921 dbcabf3a-b0e7-0310-adc4-f8d773084564
This commit is contained in:
parent
930dd40815
commit
a83366069f
5 changed files with 119 additions and 24 deletions
|
|
@ -161,11 +161,30 @@ void window_set_active(WINDOW_REC *window)
|
|||
|
||||
void window_change_server(WINDOW_REC *window, void *server)
|
||||
{
|
||||
SERVER_REC *active, *connect;
|
||||
|
||||
if (server != NULL && SERVER(server)->disconnected)
|
||||
return;
|
||||
|
||||
window->active_server = server;
|
||||
signal_emit("window server changed", 2, window, server);
|
||||
if (server == NULL) {
|
||||
active = connect = NULL;
|
||||
} else if (SERVER(server)->connected) {
|
||||
active = server;
|
||||
connect = NULL;
|
||||
} else {
|
||||
active = NULL;
|
||||
connect = server;
|
||||
}
|
||||
|
||||
if (window->connect_server != connect) {
|
||||
window->connect_server = connect;
|
||||
signal_emit("window connect changed", 2, window, connect);
|
||||
}
|
||||
|
||||
if (window->active_server != active) {
|
||||
window->active_server = active;
|
||||
signal_emit("window server changed", 2, window, active);
|
||||
}
|
||||
}
|
||||
|
||||
void window_set_refnum(WINDOW_REC *window, int refnum)
|
||||
|
|
@ -519,7 +538,8 @@ static void sig_server_disconnected(SERVER_REC *server)
|
|||
for (tmp = windows; tmp != NULL; tmp = tmp->next) {
|
||||
WINDOW_REC *rec = tmp->data;
|
||||
|
||||
if (rec->active_server == server) {
|
||||
if (rec->active_server == server ||
|
||||
rec->connect_server == server) {
|
||||
window_change_server(rec, rec->servertag != NULL ?
|
||||
NULL : new_server);
|
||||
}
|
||||
|
|
@ -609,6 +629,7 @@ void windows_init(void)
|
|||
settings_add_str("lookandfeel", "window_default_level", "NONE");
|
||||
|
||||
read_settings();
|
||||
signal_add("server looking", (SIGNAL_FUNC) sig_server_connected);
|
||||
signal_add("server connected", (SIGNAL_FUNC) sig_server_connected);
|
||||
signal_add("server disconnected", (SIGNAL_FUNC) sig_server_disconnected);
|
||||
signal_add("server connect failed", (SIGNAL_FUNC) sig_server_disconnected);
|
||||
|
|
@ -620,6 +641,7 @@ void windows_deinit(void)
|
|||
if (daytag != -1) g_source_remove(daytag);
|
||||
if (daycheck == 1) signal_remove("print text", (SIGNAL_FUNC) sig_print_text);
|
||||
|
||||
signal_remove("server looking", (SIGNAL_FUNC) sig_server_connected);
|
||||
signal_remove("server connected", (SIGNAL_FUNC) sig_server_connected);
|
||||
signal_remove("server disconnected", (SIGNAL_FUNC) sig_server_disconnected);
|
||||
signal_remove("server connect failed", (SIGNAL_FUNC) sig_server_disconnected);
|
||||
|
|
|
|||
|
|
@ -26,6 +26,7 @@ struct _WINDOW_REC {
|
|||
GSList *items;
|
||||
WI_ITEM_REC *active;
|
||||
SERVER_REC *active_server;
|
||||
SERVER_REC *connect_server;
|
||||
char *servertag; /* active_server must be either NULL or have this tag (unless there's items in this window) */
|
||||
|
||||
int level; /* message level */
|
||||
|
|
|
|||
|
|
@ -393,6 +393,8 @@ static void cmd_window_server(const char *data)
|
|||
if (*tag == '\0')
|
||||
cmd_param_error(CMDERR_NOT_ENOUGH_PARAMS);
|
||||
server = server_find_tag(tag);
|
||||
if (server == NULL)
|
||||
server = server_find_lookup_tag(tag);
|
||||
|
||||
if (g_hash_table_lookup(optlist, "unsticky") != NULL &&
|
||||
active_win->servertag != NULL) {
|
||||
|
|
|
|||
|
|
@ -119,9 +119,22 @@ static void cmd_server_list(const char *data)
|
|||
g_string_free(str, TRUE);
|
||||
}
|
||||
|
||||
static void server_command(const char *data, SERVER_REC *server,
|
||||
WI_ITEM_REC *item)
|
||||
{
|
||||
if (server == NULL) {
|
||||
/* this command accepts non-connected server too */
|
||||
server = active_win->connect_server;
|
||||
}
|
||||
|
||||
signal_continue(3, data, server, item);
|
||||
}
|
||||
|
||||
void fe_irc_server_init(void)
|
||||
{
|
||||
signal_add("server add fill", (SIGNAL_FUNC) sig_server_add_fill);
|
||||
command_bind_first("server", NULL, (SIGNAL_FUNC) server_command);
|
||||
command_bind_first("disconnect", NULL, (SIGNAL_FUNC) server_command);
|
||||
command_bind("server list", NULL, (SIGNAL_FUNC) cmd_server_list);
|
||||
|
||||
command_set_options("server add", "-ircnet -cmdspeed -cmdmax -querychans");
|
||||
|
|
@ -130,5 +143,7 @@ void fe_irc_server_init(void)
|
|||
void fe_irc_server_deinit(void)
|
||||
{
|
||||
signal_remove("server add fill", (SIGNAL_FUNC) sig_server_add_fill);
|
||||
command_unbind("server", (SIGNAL_FUNC) server_command);
|
||||
command_unbind("disconnect", (SIGNAL_FUNC) server_command);
|
||||
command_unbind("server list", (SIGNAL_FUNC) cmd_server_list);
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue