diff --git a/sysmodules/rosalina/include/menu.h b/sysmodules/rosalina/include/menu.h index 6e5e904e..ad1e3f83 100644 --- a/sysmodules/rosalina/include/menu.h +++ b/sysmodules/rosalina/include/menu.h @@ -94,6 +94,7 @@ u32 menuCountItems(const Menu *menu); MyThread *menuCreateThread(void); void menuEnter(void); void menuLeave(void); +void menuRequestClose(void); void menuThreadMain(void); void menuShow(Menu *root); void DispMessage(const char *title, const char *message); diff --git a/sysmodules/rosalina/source/menu.c b/sysmodules/rosalina/source/menu.c index f172a94c..ca7dd454 100644 --- a/sysmodules/rosalina/source/menu.c +++ b/sysmodules/rosalina/source/menu.c @@ -196,6 +196,7 @@ u32 waitCombo(void) static MyThread menuThread; static u8 CTR_ALIGN(8) menuThreadStack[0x3000]; +static bool menuCloseRequested = false; static float batteryPercentage; static float batteryVoltage; @@ -400,6 +401,7 @@ void menuEnter(void) Draw_Lock(); if(!menuShouldExit && menuRefCount == 0) { + menuCloseRequested = false; menuRefCount++; svcKernelSetState(0x10000, 2 | 1); svcSleepThread(5 * 1000 * 100LL); @@ -430,6 +432,11 @@ void menuLeave(void) Draw_Unlock(); } +void menuRequestClose(void) +{ + menuCloseRequested = true; +} + static void menuDraw(Menu *menu, u32 selected) { char versionString[16]; @@ -517,6 +524,8 @@ void menuShow(Menu *root) if (menuItemIsHidden(¤tMenu->items[selectedItem])) selectedItem = menuAdvanceCursor(selectedItem, numItems, 1); + menuCloseRequested = false; + Draw_Lock(); Draw_ClearFramebuffer(); Draw_FlushFramebuffer(); @@ -563,6 +572,9 @@ void menuShow(Menu *root) break; } + if (menuCloseRequested) + break; + Draw_Lock(); Draw_ClearFramebuffer(); Draw_FlushFramebuffer(); @@ -597,5 +609,5 @@ void menuShow(Menu *root) menuDraw(currentMenu, selectedItem); Draw_Unlock(); } - while(!menuShouldExit); + while(!menuShouldExit && !menuCloseRequested); } diff --git a/sysmodules/rosalina/source/menus.c b/sysmodules/rosalina/source/menus.c index 16e0a8ca..7fd0c930 100644 --- a/sysmodules/rosalina/source/menus.c +++ b/sysmodules/rosalina/source/menus.c @@ -321,8 +321,8 @@ void RosalinaMenu_ReturnToHomeMenu(void) if(pressed & KEY_A) { - menuLeave(); srvPublishToSubscriber(0x204, 0); + menuRequestClose(); return; } else if(pressed & KEY_B)