version 1.20, 2012/10/25 11:26:47 |
version 1.21, 2013/03/21 16:08:24 |
|
|
enum cmd_retval cmd_find_window_exec(struct cmd *, struct cmd_ctx *); |
enum cmd_retval cmd_find_window_exec(struct cmd *, struct cmd_ctx *); |
|
|
void cmd_find_window_callback(struct window_choose_data *); |
void cmd_find_window_callback(struct window_choose_data *); |
void cmd_find_window_free(struct window_choose_data *); |
|
|
|
/* Flags for determining matching behavior. */ |
/* Flags for determining matching behavior. */ |
#define CMD_FIND_WINDOW_BY_TITLE 0x1 |
#define CMD_FIND_WINDOW_BY_TITLE 0x1 |
|
|
cmd_find_window_exec(struct cmd *self, struct cmd_ctx *ctx) |
cmd_find_window_exec(struct cmd *self, struct cmd_ctx *ctx) |
{ |
{ |
struct args *args = self->args; |
struct args *args = self->args; |
|
struct client *c; |
struct window_choose_data *cdata; |
struct window_choose_data *cdata; |
struct session *s; |
struct session *s; |
struct winlink *wl, *wm; |
struct winlink *wl, *wm; |
|
|
ctx->error(ctx, "must be run interactively"); |
ctx->error(ctx, "must be run interactively"); |
return (CMD_RETURN_ERROR); |
return (CMD_RETURN_ERROR); |
} |
} |
s = ctx->curclient->session; |
c = ctx->curclient; |
|
s = c->session; |
|
|
if ((wl = cmd_find_window(ctx, args_get(args, 't'), NULL)) == NULL) |
if ((wl = cmd_find_window(ctx, args_get(args, 't'), NULL)) == NULL) |
return (CMD_RETURN_ERROR); |
return (CMD_RETURN_ERROR); |
|
|
for (i = 0; i < ARRAY_LENGTH(&find_list); i++) { |
for (i = 0; i < ARRAY_LENGTH(&find_list); i++) { |
wm = ARRAY_ITEM(&find_list, i).wl; |
wm = ARRAY_ITEM(&find_list, i).wl; |
|
|
cdata = window_choose_data_create(ctx); |
cdata = window_choose_data_create(TREE_OTHER, c, c->session); |
cdata->idx = wm->idx; |
cdata->idx = wm->idx; |
cdata->client->references++; |
|
cdata->wl = wm; |
cdata->wl = wm; |
|
|
cdata->ft_template = xstrdup(template); |
cdata->ft_template = xstrdup(template); |
|
|
window_choose_add(wl->window->active, cdata); |
window_choose_add(wl->window->active, cdata); |
} |
} |
|
|
window_choose_ready(wl->window->active, |
window_choose_ready(wl->window->active, 0, cmd_find_window_callback, |
0, cmd_find_window_callback, cmd_find_window_free); |
NULL); |
|
|
out: |
out: |
ARRAY_FREE(&find_list); |
ARRAY_FREE(&find_list); |
|
|
if (cdata == NULL) |
if (cdata == NULL) |
return; |
return; |
|
|
s = cdata->session; |
s = cdata->start_session; |
if (!session_alive(s)) |
if (!session_alive(s)) |
return; |
return; |
|
|
|
|
server_redraw_session(s); |
server_redraw_session(s); |
recalculate_sizes(); |
recalculate_sizes(); |
} |
} |
} |
|
|
|
void |
|
cmd_find_window_free(struct window_choose_data *cdata) |
|
{ |
|
if (cdata == NULL) |
|
return; |
|
|
|
cdata->session->references--; |
|
|
|
free(cdata->ft_template); |
|
format_free(cdata->ft); |
|
free(cdata); |
|
} |
} |