version 1.6, 2009/08/25 13:32:14 |
version 1.7, 2009/09/07 21:01:50 |
|
|
}; |
}; |
|
|
struct cmd_choose_session_data { |
struct cmd_choose_session_data { |
u_int client; |
struct client *client; |
char *template; |
char *template; |
}; |
}; |
|
|
|
|
cdata->template = xstrdup(data->arg); |
cdata->template = xstrdup(data->arg); |
else |
else |
cdata->template = xstrdup("switch-client -t '%%'"); |
cdata->template = xstrdup("switch-client -t '%%'"); |
cdata->client = server_client_index(ctx->curclient); |
cdata->client = ctx->curclient; |
|
cdata->client->references++; |
|
|
window_choose_ready(wl->window->active, |
window_choose_ready(wl->window->active, |
cur, cmd_choose_session_callback, cmd_choose_session_free, cdata); |
cur, cmd_choose_session_callback, cmd_choose_session_free, cdata); |
|
|
cmd_choose_session_callback(void *data, int idx) |
cmd_choose_session_callback(void *data, int idx) |
{ |
{ |
struct cmd_choose_session_data *cdata = data; |
struct cmd_choose_session_data *cdata = data; |
struct client *c; |
|
struct session *s; |
struct session *s; |
struct cmd_list *cmdlist; |
struct cmd_list *cmdlist; |
struct cmd_ctx ctx; |
struct cmd_ctx ctx; |
|
|
|
|
if (idx == -1) |
if (idx == -1) |
return; |
return; |
if (cdata->client > ARRAY_LENGTH(&clients) - 1) |
if (cdata->client->flags & CLIENT_DEAD) |
return; |
return; |
c = ARRAY_ITEM(&clients, cdata->client); |
|
|
|
if ((u_int) idx > ARRAY_LENGTH(&sessions) - 1) |
if ((u_int) idx > ARRAY_LENGTH(&sessions) - 1) |
return; |
return; |
|
|
if (cmd_string_parse(template, &cmdlist, &cause) != 0) { |
if (cmd_string_parse(template, &cmdlist, &cause) != 0) { |
if (cause != NULL) { |
if (cause != NULL) { |
*cause = toupper((u_char) *cause); |
*cause = toupper((u_char) *cause); |
status_message_set(c, "%s", cause); |
status_message_set(cdata->client, "%s", cause); |
xfree(cause); |
xfree(cause); |
} |
} |
xfree(template); |
xfree(template); |
|
|
xfree(template); |
xfree(template); |
|
|
ctx.msgdata = NULL; |
ctx.msgdata = NULL; |
ctx.curclient = c; |
ctx.curclient = cdata->client; |
|
|
ctx.error = key_bindings_error; |
ctx.error = key_bindings_error; |
ctx.print = key_bindings_print; |
ctx.print = key_bindings_print; |
|
|
{ |
{ |
struct cmd_choose_session_data *cdata = data; |
struct cmd_choose_session_data *cdata = data; |
|
|
|
cdata->client->references--; |
xfree(cdata->template); |
xfree(cdata->template); |
xfree(cdata); |
xfree(cdata); |
} |
} |