summaryrefslogtreecommitdiff
path: root/lib/menu.c
diff options
context:
space:
mode:
authorJari Vetoniemi <mailroxas@gmail.com>2014-04-14 19:25:16 +0300
committerJari Vetoniemi <mailroxas@gmail.com>2014-04-14 19:25:16 +0300
commit617c4ab827d9c71a122034594bb1080607f50398 (patch)
tree188ae4cafafab73e1c34bbacd3e5fdcf99652478 /lib/menu.c
parent4f72d188ada1e6ad725dfa9927112ec90c3ddf80 (diff)
downloadbemenu-617c4ab827d9c71a122034594bb1080607f50398.tar.gz
bemenu-617c4ab827d9c71a122034594bb1080607f50398.tar.bz2
bemenu-617c4ab827d9c71a122034594bb1080607f50398.zip
Add selection wrapping (-w).
Diffstat (limited to 'lib/menu.c')
-rw-r--r--lib/menu.c34
1 files changed, 32 insertions, 2 deletions
diff --git a/lib/menu.c b/lib/menu.c
index 5d2b37b..d949430 100644
--- a/lib/menu.c
+++ b/lib/menu.c
@@ -173,6 +173,30 @@ bmFilterMode bmMenuGetFilterMode(const bmMenu *menu)
}
/**
+ * Set selection wrapping on/off.
+ *
+ * @param menu bmMenu instance where to toggle selection wrapping.
+ * @param int 1 == on, 0 == off.
+ */
+void bmMenuSetWrap(bmMenu *menu, int wrap)
+{
+ assert(menu);
+ menu->wrap = (wrap ? 1 : 0);
+}
+
+/**
+ * Get selection wrapping state.
+ *
+ * @param menu bmMenu instance where to get selection wrapping state.
+ * @return int for wrap state.
+ */
+int bmMenuGetWrap(const bmMenu *menu)
+{
+ assert(menu);
+ return menu->wrap;
+}
+
+/**
* Set title to bmMenu instance.
*
* @param menu bmMenu instance where to set title.
@@ -572,13 +596,19 @@ bmRunResult bmMenuRunWithKey(bmMenu *menu, bmKey key, unsigned int unicode)
break;
case BM_KEY_UP:
- if (menu->index > 0)
+ if (menu->index > 0) {
menu->index--;
+ } else if (menu->wrap) {
+ menu->index = itemsCount - 1;
+ }
break;
case BM_KEY_DOWN:
- if (menu->index < itemsCount - 1)
+ if (menu->index < itemsCount - 1) {
menu->index++;
+ } else if (menu->wrap) {
+ menu->index = 0;
+ }
break;
case BM_KEY_PAGE_UP: