From 696e3997dca6911e7c48044ef0fac24b8863680a Mon Sep 17 00:00:00 2001 From: cancel <cancel@cancel.fm> Date: Mon, 6 Jan 2020 02:19:25 +0900 Subject: [PATCH] Add additional protection against bad menu cycling --- term_util.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/term_util.c b/term_util.c index 1077f85..d6b2d44 100644 --- a/term_util.c +++ b/term_util.c @@ -507,26 +507,34 @@ bool qmenu_drive(Qmenu* qm, int key, Qmenu_action* out_action) { case KEY_UP: { ITEM* starting = current_item(qm->ncurses_menu); menu_driver(qm->ncurses_menu, REQ_UP_ITEM); + ITEM* cur = current_item(qm->ncurses_menu); for (;;) { - ITEM* cur = current_item(qm->ncurses_menu); if (!cur || cur == starting) break; if (!qmenu_itemextra(extras, cur)->is_spacer) break; + ITEM* prev = cur; menu_driver(qm->ncurses_menu, REQ_UP_ITEM); + cur = current_item(qm->ncurses_menu); + if (cur == prev) + break; } return false; } case KEY_DOWN: { ITEM* starting = current_item(qm->ncurses_menu); menu_driver(qm->ncurses_menu, REQ_DOWN_ITEM); + ITEM* cur = current_item(qm->ncurses_menu); for (;;) { - ITEM* cur = current_item(qm->ncurses_menu); if (!cur || cur == starting) break; if (!qmenu_itemextra(extras, cur)->is_spacer) break; + ITEM* prev = cur; menu_driver(qm->ncurses_menu, REQ_DOWN_ITEM); + cur = current_item(qm->ncurses_menu); + if (cur == prev) + break; } return false; }