diff --git a/src/fe-common/core/fe-channels.c b/src/fe-common/core/fe-channels.c index a3325ef8..1e9ff267 100644 --- a/src/fe-common/core/fe-channels.c +++ b/src/fe-common/core/fe-channels.c @@ -49,9 +49,18 @@ static void signal_channel_created(CHANNEL_REC *channel, void *automatic) static void signal_channel_created_curwin(CHANNEL_REC *channel) { + WINDOW_REC *window; + int refnum; + g_return_if_fail(channel != NULL); - window_item_add(active_win, (WI_ITEM_REC *) channel, FALSE); + window = NULL; + refnum = GPOINTER_TO_INT(signal_get_user_data()); + if (refnum > 0) + window = window_find_refnum(refnum); + if (window == NULL) + window = active_win; + window_item_add(window, (WI_ITEM_REC *) channel, window != active_win); } static void signal_channel_destroyed(CHANNEL_REC *channel) @@ -115,6 +124,7 @@ static void cmd_wjoin_pre(const char *data, SERVER_REC *server) GHashTable *optlist; char *nick; void *free_arg; + char *arg; if (!cmd_get_params(data, &free_arg, 1 | PARAM_FLAG_OPTIONS | PARAM_FLAG_UNKNOWN_OPTIONS | PARAM_FLAG_GETREST, @@ -127,9 +137,11 @@ static void cmd_wjoin_pre(const char *data, SERVER_REC *server) cmd_params_free(free_arg); return; } - if (g_hash_table_lookup(optlist, "window") != NULL) { - signal_add("channel created", - (SIGNAL_FUNC) signal_channel_created_curwin); + arg = g_hash_table_lookup(optlist, "window"); + if (arg != NULL) { + int refnum = *arg != '\0' ? atoi(arg) : 0; + signal_add_data("channel created", + (SIGNAL_FUNC) signal_channel_created_curwin, GINT_TO_POINTER(refnum)); } cmd_params_free(free_arg); } @@ -167,15 +179,18 @@ static void cmd_wjoin_post(const char *data) GHashTable *optlist; char *nick; void *free_arg; + char *arg; if (!cmd_get_params(data, &free_arg, 1 | PARAM_FLAG_OPTIONS | PARAM_FLAG_UNKNOWN_OPTIONS | PARAM_FLAG_GETREST, "join", &optlist, &nick)) return; - if (g_hash_table_lookup(optlist, "window") != NULL) { - signal_remove("channel created", - (SIGNAL_FUNC) signal_channel_created_curwin); + arg = g_hash_table_lookup(optlist, "window"); + if (arg != NULL) { + int refnum = *arg != '\0' ? atoi(arg) : 0; + signal_remove_data("channel created", + (SIGNAL_FUNC) signal_channel_created_curwin, GINT_TO_POINTER(refnum)); } cmd_params_free(free_arg); } @@ -650,7 +665,7 @@ void fe_channels_init(void) command_set_options("channel add", "auto noauto -bots -botcmd"); command_set_options("names", "count ops halfops voices normal"); - command_set_options("join", "window"); + command_set_options("join", "@window"); } void fe_channels_deinit(void) diff --git a/src/fe-common/core/fe-queries.c b/src/fe-common/core/fe-queries.c index 991b9bb5..22d35719 100644 --- a/src/fe-common/core/fe-queries.c +++ b/src/fe-common/core/fe-queries.c @@ -76,9 +76,18 @@ static void signal_query_created(QUERY_REC *query, gpointer automatic) static void signal_query_created_curwin(QUERY_REC *query) { + WINDOW_REC *window; + int refnum; + g_return_if_fail(IS_QUERY(query)); - window_item_add(active_win, (WI_ITEM_REC *) query, FALSE); + window = NULL; + refnum = GPOINTER_TO_INT(signal_get_user_data()); + if (refnum > 0) + window = window_find_refnum(refnum); + if (window == NULL) + window = active_win; + window_item_add(window, (WI_ITEM_REC *) query, window != active_win); } static void signal_query_destroyed(QUERY_REC *query) @@ -226,6 +235,8 @@ static void cmd_query(const char *data, SERVER_REC *server, WI_ITEM_REC *item) QUERY_REC *query; char *nick, *msg; void *free_arg; + char *arg; + int refnum; g_return_if_fail(data != NULL); @@ -250,9 +261,11 @@ static void cmd_query(const char *data, SERVER_REC *server, WI_ITEM_REC *item) if (*nick != '=' && (server == NULL || !server->connected)) cmd_param_error(CMDERR_NOT_CONNECTED); - if (g_hash_table_lookup(optlist, "window") != NULL) { - signal_add("query created", - (SIGNAL_FUNC) signal_query_created_curwin); + arg = g_hash_table_lookup(optlist, "window"); + if (arg != NULL) { + refnum = *arg != '\0' ? atoi(arg) : 0; + signal_add_data("query created", + (SIGNAL_FUNC) signal_query_created_curwin, GINT_TO_POINTER(refnum)); } query = query_find(server, nick); @@ -268,9 +281,9 @@ static void cmd_query(const char *data, SERVER_REC *server, WI_ITEM_REC *item) window_item_set_active(active_win, (WI_ITEM_REC *) query); } - if (g_hash_table_lookup(optlist, "window") != NULL) { - signal_remove("query created", - (SIGNAL_FUNC) signal_query_created_curwin); + if (arg != NULL) { + signal_remove_data("query created", + (SIGNAL_FUNC) signal_query_created_curwin, GINT_TO_POINTER(refnum)); } if (*msg != '\0') { @@ -373,7 +386,7 @@ void fe_queries_init(void) command_bind("unquery", NULL, (SIGNAL_FUNC) cmd_unquery); command_bind("window server", NULL, (SIGNAL_FUNC) cmd_window_server); - command_set_options("query", "window"); + command_set_options("query", "@window"); } void fe_queries_deinit(void)