From faead1c7339a9fb20dd18e26608ddb05ff8855ae Mon Sep 17 00:00:00 2001 From: Chris Cowan Date: Sat, 10 Aug 2024 20:27:12 -0700 Subject: [PATCH] Fix bug where down arrow does nothing after clicking the main menu This issue was previously fixed in 0c2ed71cdd2676af6aecf6e26b0ab1a692e66d71, but that change added a bug that would trigger an infinite loop on scrolling in a list without any selectable items. Then 4fdbe81a132c472532985d31143c0dc26605283a restored the old behavior, reintroducing the issue. This new fix does handle lists without any selectable items correctly. --- wadsrc/static/zscript/engine/ui/menu/listmenu.zs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/wadsrc/static/zscript/engine/ui/menu/listmenu.zs b/wadsrc/static/zscript/engine/ui/menu/listmenu.zs index ed3c2ef16..2489e41a4 100644 --- a/wadsrc/static/zscript/engine/ui/menu/listmenu.zs +++ b/wadsrc/static/zscript/engine/ui/menu/listmenu.zs @@ -188,11 +188,12 @@ class ListMenu : Menu override bool MenuEvent (int mkey, bool fromcontroller) { int oldSelect = mDesc.mSelectedItem; - int startedAt = max(0, mDesc.mSelectedItem); + int startedAt; switch (mkey) { case MKEY_Up: + startedAt = mDesc.mSelectedItem < 0 ? 0 : mDesc.mSelectedItem; do { if (--mDesc.mSelectedItem < 0) mDesc.mSelectedItem = mDesc.mItems.Size()-1; @@ -203,6 +204,7 @@ class ListMenu : Menu return true; case MKEY_Down: + startedAt = mDesc.mSelectedItem < 0 ? mDesc.mItems.Size()-1 : mDesc.mSelectedItem; do { if (++mDesc.mSelectedItem >= mDesc.mItems.Size()) mDesc.mSelectedItem = 0;