diff --git a/window-choose.c b/window-choose.c index 1bc3746b..a545552b 100644 --- a/window-choose.c +++ b/window-choose.c @@ -1,4 +1,4 @@ -/* $Id: window-choose.c,v 1.3 2009-01-18 17:20:52 nicm Exp $ */ +/* $Id: window-choose.c,v 1.4 2009-01-23 17:14:30 nicm Exp $ */ /* * Copyright (c) 2009 Nicholas Marriott @@ -193,8 +193,7 @@ window_choose_key(struct window_pane *wp, unused struct client *c, int key) break; if (data->selected == items - 1) { data->selected = 0; - if (data->top != 0) - data->top = 0; + data->top = 0; window_choose_redraw_screen(wp); break; } @@ -211,10 +210,16 @@ window_choose_key(struct window_pane *wp, unused struct client *c, int key) } break; case MODEKEY_PPAGE: - if (data->top < screen_size_y(s)) + if (data->selected < screen_size_y(s)) { + data->selected = 0; data->top = 0; - else - data->top -= screen_size_y(s); + } else { + data->selected -= screen_size_y(s); + if (data->top < screen_size_y(s)) + data->top = 0; + else + data->top -= screen_size_y(s); + } window_choose_redraw_screen(wp); break; case MODEKEY_NONE: @@ -222,10 +227,12 @@ window_choose_key(struct window_pane *wp, unused struct client *c, int key) break; /* FALLTHROUGH */ case MODEKEY_NPAGE: - if (data->top + screen_size_y(s) > ARRAY_LENGTH(&data->list)) - data->top = ARRAY_LENGTH(&data->list); - else - data->top += screen_size_y(s); + data->selected += screen_size_y(s); + if (data->selected > items - 1) + data->selected = items - 1; + data->top += screen_size_y(s); + if (data->top + screen_size_y(s) - 1 > data->selected) + data->top = items - screen_size_y(s); window_choose_redraw_screen(wp); break; default: