aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--window-choose.c27
1 files changed, 17 insertions, 10 deletions
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 <nicm@users.sourceforge.net>
@@ -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: