diff options
author | Nicholas Marriott <nicholas.marriott@gmail.com> | 2009-01-23 17:14:30 +0000 |
---|---|---|
committer | Nicholas Marriott <nicholas.marriott@gmail.com> | 2009-01-23 17:14:30 +0000 |
commit | 374b0d85b834385a96600d7020c3d36aa8c18226 (patch) | |
tree | 790c1da75ae1171fc194ea6c81b70a35e83f5cc8 | |
parent | 4d9af27b0bbb19466aecc9a39b9eb94796b2c7d8 (diff) | |
download | rtmux-374b0d85b834385a96600d7020c3d36aa8c18226.tar.gz rtmux-374b0d85b834385a96600d7020c3d36aa8c18226.tar.bz2 rtmux-374b0d85b834385a96600d7020c3d36aa8c18226.zip |
Fix next/previous page. DOH.
-rw-r--r-- | window-choose.c | 27 |
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: |