=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/tmux/Attic/window-choose.c,v retrieving revision 1.2 retrieving revision 1.3 diff -c -r1.2 -r1.3 *** src/usr.bin/tmux/Attic/window-choose.c 2009/06/24 23:00:31 1.2 --- src/usr.bin/tmux/Attic/window-choose.c 2009/07/17 07:05:58 1.3 *************** *** 1,4 **** ! /* $OpenBSD: window-choose.c,v 1.2 2009/06/24 23:00:31 nicm Exp $ */ /* * Copyright (c) 2009 Nicholas Marriott --- 1,4 ---- ! /* $OpenBSD: window-choose.c,v 1.3 2009/07/17 07:05:58 nicm Exp $ */ /* * Copyright (c) 2009 Nicholas Marriott *************** *** 59,65 **** u_int top; u_int selected; ! void (*callback)(void *, int); void *data; }; --- 59,66 ---- u_int top; u_int selected; ! void (*callbackfn)(void *, int); ! void (*freefn)(void *); void *data; }; *************** *** 86,93 **** } void ! window_choose_ready(struct window_pane *wp, ! u_int cur, void (*callback)(void *, int), void *cdata) { struct window_choose_mode_data *data = wp->modedata; struct screen *s = &data->screen; --- 87,94 ---- } void ! window_choose_ready(struct window_pane *wp, u_int cur, ! void (*callbackfn)(void *, int), void (*freefn)(void *), void *cdata) { struct window_choose_mode_data *data = wp->modedata; struct screen *s = &data->screen; *************** *** 96,102 **** if (data->selected > screen_size_y(s) - 1) data->top = ARRAY_LENGTH(&data->list) - screen_size_y(s); ! data->callback = callback; data->data = cdata; window_choose_redraw_screen(wp); --- 97,104 ---- if (data->selected > screen_size_y(s) - 1) data->top = ARRAY_LENGTH(&data->list) - screen_size_y(s); ! data->callbackfn = callbackfn; ! data->freefn = freefn; data->data = cdata; window_choose_redraw_screen(wp); *************** *** 109,115 **** struct screen *s; wp->modedata = data = xmalloc(sizeof *data); ! data->callback = NULL; ARRAY_INIT(&data->list); data->top = 0; --- 111,121 ---- struct screen *s; wp->modedata = data = xmalloc(sizeof *data); ! ! data->callbackfn = NULL; ! data->freefn = NULL; ! data->data = NULL; ! ARRAY_INIT(&data->list); data->top = 0; *************** *** 131,136 **** --- 137,145 ---- struct window_choose_mode_data *data = wp->modedata; u_int i; + if (data->freefn != NULL && data->data != NULL) + data->freefn(data->data); + mode_key_free(&data->mdata); for (i = 0; i < ARRAY_LENGTH(&data->list); i++) *************** *** 168,179 **** switch (mode_key_lookup(&data->mdata, key)) { case MODEKEYCMD_QUIT: ! data->callback(data->data, -1); window_pane_reset_mode(wp); break; case MODEKEYCMD_CHOOSE: item = &ARRAY_ITEM(&data->list, data->selected); ! data->callback(data->data, item->idx); window_pane_reset_mode(wp); break; case MODEKEYCMD_UP: --- 177,188 ---- switch (mode_key_lookup(&data->mdata, key)) { case MODEKEYCMD_QUIT: ! data->callbackfn(data->data, -1); window_pane_reset_mode(wp); break; case MODEKEYCMD_CHOOSE: item = &ARRAY_ITEM(&data->list, data->selected); ! data->callbackfn(data->data, item->idx); window_pane_reset_mode(wp); break; case MODEKEYCMD_UP: *************** *** 273,279 **** data->selected = idx; item = &ARRAY_ITEM(&data->list, data->selected); ! data->callback(data->data, item->idx); window_pane_reset_mode(wp); } --- 282,288 ---- data->selected = idx; item = &ARRAY_ITEM(&data->list, data->selected); ! data->callbackfn(data->data, item->idx); window_pane_reset_mode(wp); } *************** *** 287,293 **** struct grid_cell gc; int utf8flag; ! if (data->callback == NULL) fatalx("called before callback assigned"); utf8flag = options_get_number(&wp->window->options, "utf8"); --- 296,302 ---- struct grid_cell gc; int utf8flag; ! if (data->callbackfn == NULL) fatalx("called before callback assigned"); utf8flag = options_get_number(&wp->window->options, "utf8");