From 2ae3c4d4ce4f6710504eb31e66976fb4f9056489 Mon Sep 17 00:00:00 2001 From: TuxSH <1922548+TuxSH@users.noreply.github.com> Date: Sun, 22 Sep 2024 01:20:53 +0200 Subject: [PATCH] rosalina: fix handling of more than 1 hidden option in a row Reported by @cooolgamer --- sysmodules/rosalina/source/menu.c | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) diff --git a/sysmodules/rosalina/source/menu.c b/sysmodules/rosalina/source/menu.c index 5811b332..ef6c1bde 100644 --- a/sysmodules/rosalina/source/menu.c +++ b/sysmodules/rosalina/source/menu.c @@ -576,17 +576,12 @@ void menuShow(Menu *root) else break; } - else if(pressed & KEY_DOWN) + else if(pressed & (KEY_DOWN | KEY_UP)) { - selectedItem = menuAdvanceCursor(selectedItem, numItems, 1); - if (menuItemIsHidden(¤tMenu->items[selectedItem])) - selectedItem = menuAdvanceCursor(selectedItem, numItems, 1); - } - else if(pressed & KEY_UP) - { - selectedItem = menuAdvanceCursor(selectedItem, numItems, -1); - if (menuItemIsHidden(¤tMenu->items[selectedItem])) - selectedItem = menuAdvanceCursor(selectedItem, numItems, -1); + s32 n = (pressed & KEY_DOWN) != 0 ? 1 : -1; + do { + selectedItem = menuAdvanceCursor(selectedItem, numItems, n); + } while (menuItemIsHidden(¤tMenu->items[selectedItem])); // assume at least one item is visible } Draw_Lock();