1
0
mirror of https://github.com/irssi/irssi.git synced 2024-09-01 04:14:16 -04:00

Make -window option of /join and /query accept an optional numeric argument

that specifies the refnum of the window to create the item in, bug #203.


git-svn-id: http://svn.irssi.org/repos/irssi/trunk@4549 dbcabf3a-b0e7-0310-adc4-f8d773084564
This commit is contained in:
Emanuele Giaquinta 2007-06-10 17:15:14 +00:00 committed by exg
parent db0eac61e4
commit d51a03ed01
2 changed files with 44 additions and 16 deletions

View File

@ -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)

View File

@ -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)