Browse Source

Add additional protection against bad menu cycling

master
cancel 5 years ago
parent
commit
696e3997dc
  1. 12
      term_util.c

12
term_util.c

@ -507,26 +507,34 @@ bool qmenu_drive(Qmenu* qm, int key, Qmenu_action* out_action) {
case KEY_UP: { case KEY_UP: {
ITEM* starting = current_item(qm->ncurses_menu); ITEM* starting = current_item(qm->ncurses_menu);
menu_driver(qm->ncurses_menu, REQ_UP_ITEM); menu_driver(qm->ncurses_menu, REQ_UP_ITEM);
ITEM* cur = current_item(qm->ncurses_menu);
for (;;) { for (;;) {
ITEM* cur = current_item(qm->ncurses_menu);
if (!cur || cur == starting) if (!cur || cur == starting)
break; break;
if (!qmenu_itemextra(extras, cur)->is_spacer) if (!qmenu_itemextra(extras, cur)->is_spacer)
break; break;
ITEM* prev = cur;
menu_driver(qm->ncurses_menu, REQ_UP_ITEM); menu_driver(qm->ncurses_menu, REQ_UP_ITEM);
cur = current_item(qm->ncurses_menu);
if (cur == prev)
break;
} }
return false; return false;
} }
case KEY_DOWN: { case KEY_DOWN: {
ITEM* starting = current_item(qm->ncurses_menu); ITEM* starting = current_item(qm->ncurses_menu);
menu_driver(qm->ncurses_menu, REQ_DOWN_ITEM); menu_driver(qm->ncurses_menu, REQ_DOWN_ITEM);
ITEM* cur = current_item(qm->ncurses_menu);
for (;;) { for (;;) {
ITEM* cur = current_item(qm->ncurses_menu);
if (!cur || cur == starting) if (!cur || cur == starting)
break; break;
if (!qmenu_itemextra(extras, cur)->is_spacer) if (!qmenu_itemextra(extras, cur)->is_spacer)
break; break;
ITEM* prev = cur;
menu_driver(qm->ncurses_menu, REQ_DOWN_ITEM); menu_driver(qm->ncurses_menu, REQ_DOWN_ITEM);
cur = current_item(qm->ncurses_menu);
if (cur == prev)
break;
} }
return false; return false;
} }

Loading…
Cancel
Save