version 1.2, 2009/06/24 23:00:31 |
version 1.3, 2009/07/17 07:05:58 |
|
|
u_int top; |
u_int top; |
u_int selected; |
u_int selected; |
|
|
void (*callback)(void *, int); |
void (*callbackfn)(void *, int); |
|
void (*freefn)(void *); |
void *data; |
void *data; |
}; |
}; |
|
|
|
|
} |
} |
|
|
void |
void |
window_choose_ready(struct window_pane *wp, |
window_choose_ready(struct window_pane *wp, u_int cur, |
u_int cur, void (*callback)(void *, int), void *cdata) |
void (*callbackfn)(void *, int), void (*freefn)(void *), void *cdata) |
{ |
{ |
struct window_choose_mode_data *data = wp->modedata; |
struct window_choose_mode_data *data = wp->modedata; |
struct screen *s = &data->screen; |
struct screen *s = &data->screen; |
|
|
if (data->selected > screen_size_y(s) - 1) |
if (data->selected > screen_size_y(s) - 1) |
data->top = ARRAY_LENGTH(&data->list) - screen_size_y(s); |
data->top = ARRAY_LENGTH(&data->list) - screen_size_y(s); |
|
|
data->callback = callback; |
data->callbackfn = callbackfn; |
|
data->freefn = freefn; |
data->data = cdata; |
data->data = cdata; |
|
|
window_choose_redraw_screen(wp); |
window_choose_redraw_screen(wp); |
|
|
struct screen *s; |
struct screen *s; |
|
|
wp->modedata = data = xmalloc(sizeof *data); |
wp->modedata = data = xmalloc(sizeof *data); |
data->callback = NULL; |
|
|
data->callbackfn = NULL; |
|
data->freefn = NULL; |
|
data->data = NULL; |
|
|
ARRAY_INIT(&data->list); |
ARRAY_INIT(&data->list); |
data->top = 0; |
data->top = 0; |
|
|
|
|
struct window_choose_mode_data *data = wp->modedata; |
struct window_choose_mode_data *data = wp->modedata; |
u_int i; |
u_int i; |
|
|
|
if (data->freefn != NULL && data->data != NULL) |
|
data->freefn(data->data); |
|
|
mode_key_free(&data->mdata); |
mode_key_free(&data->mdata); |
|
|
for (i = 0; i < ARRAY_LENGTH(&data->list); i++) |
for (i = 0; i < ARRAY_LENGTH(&data->list); i++) |
|
|
|
|
switch (mode_key_lookup(&data->mdata, key)) { |
switch (mode_key_lookup(&data->mdata, key)) { |
case MODEKEYCMD_QUIT: |
case MODEKEYCMD_QUIT: |
data->callback(data->data, -1); |
data->callbackfn(data->data, -1); |
window_pane_reset_mode(wp); |
window_pane_reset_mode(wp); |
break; |
break; |
case MODEKEYCMD_CHOOSE: |
case MODEKEYCMD_CHOOSE: |
item = &ARRAY_ITEM(&data->list, data->selected); |
item = &ARRAY_ITEM(&data->list, data->selected); |
data->callback(data->data, item->idx); |
data->callbackfn(data->data, item->idx); |
window_pane_reset_mode(wp); |
window_pane_reset_mode(wp); |
break; |
break; |
case MODEKEYCMD_UP: |
case MODEKEYCMD_UP: |
|
|
data->selected = idx; |
data->selected = idx; |
|
|
item = &ARRAY_ITEM(&data->list, data->selected); |
item = &ARRAY_ITEM(&data->list, data->selected); |
data->callback(data->data, item->idx); |
data->callbackfn(data->data, item->idx); |
window_pane_reset_mode(wp); |
window_pane_reset_mode(wp); |
} |
} |
|
|
|
|
struct grid_cell gc; |
struct grid_cell gc; |
int utf8flag; |
int utf8flag; |
|
|
if (data->callback == NULL) |
if (data->callbackfn == NULL) |
fatalx("called before callback assigned"); |
fatalx("called before callback assigned"); |
|
|
utf8flag = options_get_number(&wp->window->options, "utf8"); |
utf8flag = options_get_number(&wp->window->options, "utf8"); |