From c330b55de4035b058965d45989a14662b99a77a3 Mon Sep 17 00:00:00 2001 From: baskerville Date: Sun, 15 Jul 2012 10:30:58 +0200 Subject: handle count prefix in thumbnail movements --- thumbs.c | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-) (limited to 'thumbs.c') diff --git a/thumbs.c b/thumbs.c index d097bbe..175d3dd 100644 --- a/thumbs.c +++ b/thumbs.c @@ -390,8 +390,9 @@ void tns_highlight(tns_t *tns, int n, bool hl) { } } -bool tns_move_selection(tns_t *tns, direction_t dir) { +bool tns_move_selection(tns_t *tns, direction_t dir, int count) { int old; + int c = (count > 0 ? count : 1); if (tns == NULL || tns->thumbs == NULL) return false; @@ -400,22 +401,16 @@ bool tns_move_selection(tns_t *tns, direction_t dir) { switch (dir) { case DIR_UP: - if (tns->sel >= tns->cols) - tns->sel -= tns->cols; + tns->sel = MAX(tns->sel - c * tns->cols, tns->sel % tns->cols); break; case DIR_DOWN: - if (tns->sel + tns->cols < tns->cnt) - tns->sel += tns->cols; - else if (tns->sel < tns->cnt - tns->cnt % tns->cols) - tns->sel = tns->cnt - 1; + tns->sel = MIN(tns->sel + c * tns->cols, tns->cols * ((tns->cnt - 1) / tns->cols) + MIN((tns->cnt - 1) % tns->cols, tns->sel % tns->cols)); break; case DIR_LEFT: - if (tns->sel > 0) - tns->sel--; + tns->sel = MAX(tns->sel - c, 0); break; case DIR_RIGHT: - if (tns->sel < tns->cnt - 1) - tns->sel++; + tns->sel = MIN(tns->sel + c, tns->cnt - 1); break; } -- cgit v1.2.3