diff options
author | Jari Vetoniemi <mailroxas@gmail.com> | 2014-04-14 19:25:16 +0300 |
---|---|---|
committer | Jari Vetoniemi <mailroxas@gmail.com> | 2014-04-14 19:25:16 +0300 |
commit | 617c4ab827d9c71a122034594bb1080607f50398 (patch) | |
tree | 188ae4cafafab73e1c34bbacd3e5fdcf99652478 /lib | |
parent | 4f72d188ada1e6ad725dfa9927112ec90c3ddf80 (diff) | |
download | bemenu-617c4ab827d9c71a122034594bb1080607f50398.tar.gz bemenu-617c4ab827d9c71a122034594bb1080607f50398.tar.bz2 bemenu-617c4ab827d9c71a122034594bb1080607f50398.zip |
Add selection wrapping (-w).
Diffstat (limited to 'lib')
-rw-r--r-- | lib/bemenu.h | 16 | ||||
-rw-r--r-- | lib/internal.h | 5 | ||||
-rw-r--r-- | lib/menu.c | 34 |
3 files changed, 53 insertions, 2 deletions
diff --git a/lib/bemenu.h b/lib/bemenu.h index 172c6ed..5457cca 100644 --- a/lib/bemenu.h +++ b/lib/bemenu.h @@ -203,6 +203,22 @@ void bmMenuSetFilterMode(bmMenu *menu, bmFilterMode mode); 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); + +/** + * Get selection wrapping state. + * + * @param menu bmMenu instance where to get selection wrapping state. + * @return int for wrap state. + */ +int bmMenuGetWrap(const bmMenu *menu); + +/** * Set title to bmMenu instance. * * @param menu bmMenu instance where to set title. diff --git a/lib/internal.h b/lib/internal.h index 4f6afbe..2fc9393 100644 --- a/lib/internal.h +++ b/lib/internal.h @@ -141,6 +141,11 @@ struct _bmMenu { * Drawing mode used in menu instance. */ bmDrawMode drawMode; + + /** + * Should selection be wrapped? + */ + char wrap; }; /* draw/curses.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: |