diff options
| author | ManoloFLTK <41016272+ManoloFLTK@users.noreply.github.com> | 2024-06-25 13:23:49 +0200 |
|---|---|---|
| committer | ManoloFLTK <41016272+ManoloFLTK@users.noreply.github.com> | 2024-06-25 13:23:49 +0200 |
| commit | fe4c94b4dc5d3ddcd396748816f37efb1913ce42 (patch) | |
| tree | f8299dad5027fc86349a30fa4f8d2014ee391abd /src/Fl_Menu.cxx | |
| parent | f44c163234c5d08f38104b86fdaa44f783b246f6 (diff) | |
Navigation in menubar: wrap around when using arrow past end or start of menubar.
Fix some border cases.
Diffstat (limited to 'src/Fl_Menu.cxx')
| -rw-r--r-- | src/Fl_Menu.cxx | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/src/Fl_Menu.cxx b/src/Fl_Menu.cxx index 8d7e7a4c5..41f36490e 100644 --- a/src/Fl_Menu.cxx +++ b/src/Fl_Menu.cxx @@ -699,13 +699,14 @@ static int forward(int menu) { // go to next item in menu menu if possible menu = 0; menuwindow &m = *(pp.p[menu]); int item = (menu == pp.menu_number) ? pp.item_number : m.selected; - while (m.numitems >= 2) { + do { while (++item < m.numitems) { const Fl_Menu_Item* m1 = m.menu->next(item); if (m1->activevisible()) {setitem(m1, menu, item); return 1;} } item = -1; } + while (pp.menubar && pp.menu_number <= 0 && (!m.menu || m.menu->submenu())); return 0; } @@ -716,13 +717,14 @@ static int backward(int menu) { // previous item in menu menu if possible menustate &pp = *p; menuwindow &m = *(pp.p[menu]); int item = (menu == pp.menu_number) ? pp.item_number : m.selected; - while (m.numitems >= 2) { + do { while (--item >= 0) { const Fl_Menu_Item* m1 = m.menu->next(item); if (m1->activevisible()) {setitem(m1, menu, item); return 1;} } item = m.numitems; } + while (pp.menubar && (!m.menu || m.menu->submenu())); return 0; } |
