summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorJari Vetoniemi <mailroxas@gmail.com>2014-10-26 17:52:00 +0200
committerJari Vetoniemi <mailroxas@gmail.com>2014-10-26 17:52:00 +0200
commit674a2a1ac2f8c906476ef6975d6d2c1fca9e5723 (patch)
tree8b84f60d7cc8468b0122a0a8ea68fb84df4dd219 /lib
parent4f2d73070cffd71aad7ac1dffeec3028cf724426 (diff)
downloadbemenu-674a2a1ac2f8c906476ef6975d6d2c1fca9e5723.tar.gz
bemenu-674a2a1ac2f8c906476ef6975d6d2c1fca9e5723.tar.bz2
bemenu-674a2a1ac2f8c906476ef6975d6d2c1fca9e5723.zip
Make right/left arrow scroll list on single line mode.
Diffstat (limited to 'lib')
-rw-r--r--lib/menu.c40
1 files changed, 28 insertions, 12 deletions
diff --git a/lib/menu.c b/lib/menu.c
index bab915a..e2ae236 100644
--- a/lib/menu.c
+++ b/lib/menu.c
@@ -484,6 +484,26 @@ bm_menu_poll_key(struct bm_menu *menu, uint32_t *out_unicode)
return key;
}
+static void
+menu_next(struct bm_menu *menu, uint32_t count)
+{
+ if (menu->index < count - 1) {
+ menu->index++;
+ } else if (menu->wrap) {
+ menu->index = 0;
+ }
+}
+
+static void
+menu_prev(struct bm_menu *menu, uint32_t count)
+{
+ if (menu->index > 0) {
+ menu->index--;
+ } else if (menu->wrap) {
+ menu->index = count - 1;
+ }
+}
+
enum bm_run_result
bm_menu_run_with_key(struct bm_menu *menu, enum bm_key key, uint32_t unicode)
{
@@ -501,18 +521,22 @@ bm_menu_run_with_key(struct bm_menu *menu, enum bm_key key, uint32_t unicode)
switch (key) {
case BM_KEY_LEFT:
- if (menu->filter) {
+ if (menu->lines > 0 && menu->filter) {
uint32_t oldCursor = menu->cursor;
menu->cursor -= bm_utf8_rune_prev(menu->filter, menu->cursor);
menu->curses_cursor -= bm_utf8_rune_width(menu->filter + menu->cursor, oldCursor - menu->cursor);
+ } else if (menu->lines == 0) {
+ menu_prev(menu, count);
}
break;
case BM_KEY_RIGHT:
- if (menu->filter) {
+ if (menu->lines > 0 && menu->filter) {
uint32_t oldCursor = menu->cursor;
menu->cursor += bm_utf8_rune_next(menu->filter, menu->cursor);
menu->curses_cursor += bm_utf8_rune_width(menu->filter + oldCursor, menu->cursor - oldCursor);
+ } else if (menu->lines == 0) {
+ menu_next(menu, count);
}
break;
@@ -526,19 +550,11 @@ bm_menu_run_with_key(struct bm_menu *menu, enum bm_key key, uint32_t unicode)
break;
case BM_KEY_UP:
- if (menu->index > 0) {
- menu->index--;
- } else if (menu->wrap) {
- menu->index = count - 1;
- }
+ menu_prev(menu, count);
break;
case BM_KEY_DOWN:
- if (menu->index < count - 1) {
- menu->index++;
- } else if (menu->wrap) {
- menu->index = 0;
- }
+ menu_next(menu, count);
break;
case BM_KEY_PAGE_UP: