summaryrefslogtreecommitdiff
path: root/lib/menu.c
diff options
context:
space:
mode:
authorJari Vetoniemi <mailroxas@gmail.com>2014-04-12 18:42:30 +0300
committerJari Vetoniemi <mailroxas@gmail.com>2014-04-12 18:42:30 +0300
commitad4e0425a6860803e5f31a08c349cd99e02e2847 (patch)
treeb6a250c795a2f7331b79e69268ffac2c347ede3d /lib/menu.c
parentfc08cb9cffce6cdb0ca3aa9f77953e86b2cf1290 (diff)
downloadbemenu-ad4e0425a6860803e5f31a08c349cd99e02e2847.tar.gz
bemenu-ad4e0425a6860803e5f31a08c349cd99e02e2847.tar.bz2
bemenu-ad4e0425a6860803e5f31a08c349cd99e02e2847.zip
Make page scrolling work like it should. (Shfit+pgup/pgdwn for old
behaviour)
Diffstat (limited to 'lib/menu.c')
-rw-r--r--lib/menu.c17
1 files changed, 16 insertions, 1 deletions
diff --git a/lib/menu.c b/lib/menu.c
index 0457da8..e819dd5 100644
--- a/lib/menu.c
+++ b/lib/menu.c
@@ -532,6 +532,13 @@ bmRunResult bmMenuRunWithKey(bmMenu *menu, bmKey key, unsigned int unicode)
unsigned int itemsCount;
bmMenuGetFilteredItems(menu, &itemsCount);
+ unsigned int displayed = 0;
+ if (menu->renderApi.displayedCount)
+ displayed = menu->renderApi.displayedCount(menu);
+
+ if (!displayed)
+ displayed = itemsCount;
+
switch (key) {
case BM_KEY_LEFT:
{
@@ -569,10 +576,18 @@ bmRunResult bmMenuRunWithKey(bmMenu *menu, bmKey key, unsigned int unicode)
break;
case BM_KEY_PAGE_UP:
- menu->index = 0;
+ menu->index = (menu->index < displayed ? 0 : menu->index - (displayed - 1));
break;
case BM_KEY_PAGE_DOWN:
+ menu->index = (menu->index + displayed >= itemsCount ? itemsCount - 1 : menu->index + (displayed - 1));
+ break;
+
+ case BM_KEY_SHIFT_PAGE_UP:
+ menu->index = 0;
+ break;
+
+ case BM_KEY_SHIFT_PAGE_DOWN:
menu->index = itemsCount - 1;
break;