From db639a80c9c4b4cd03f71bfb8cc60f764102afb5 Mon Sep 17 00:00:00 2001 From: Angel Martin <62681612+AM7999@users.noreply.github.com> Date: Fri, 12 Dec 2025 12:39:16 -0800 Subject: [PATCH] Add "Return to Home Menu" button for consoles with broken Home Buttons (#2143) --- sysmodules/rosalina/include/menu.h | 2 +- sysmodules/rosalina/include/menus.h | 1 + sysmodules/rosalina/source/menus.c | 29 +++++++++++++++++++++++++++++ 3 files changed, 31 insertions(+), 1 deletion(-) diff --git a/sysmodules/rosalina/include/menu.h b/sysmodules/rosalina/include/menu.h index 93a76f52..6e5e904e 100644 --- a/sysmodules/rosalina/include/menu.h +++ b/sysmodules/rosalina/include/menu.h @@ -62,7 +62,7 @@ typedef struct MenuItem { typedef struct Menu { const char *title; - MenuItem items[24]; + MenuItem items[25]; } Menu; extern u32 menuCombo; diff --git a/sysmodules/rosalina/include/menus.h b/sysmodules/rosalina/include/menus.h index 59ee509f..1fb5e7ec 100644 --- a/sysmodules/rosalina/include/menus.h +++ b/sysmodules/rosalina/include/menus.h @@ -36,6 +36,7 @@ void RosalinaMenu_TakeScreenshot(void); void RosalinaMenu_ShowCredits(void); void RosalinaMenu_ProcessList(void); void RosalinaMenu_SaveSettings(void); +void RosalinaMenu_HomeMenu(void); void RosalinaMenu_Cheats(void); void RosalinaMenu_PowerOffOrReboot(void); diff --git a/sysmodules/rosalina/source/menus.c b/sysmodules/rosalina/source/menus.c index 4f45492d..fa24915a 100644 --- a/sysmodules/rosalina/source/menus.c +++ b/sysmodules/rosalina/source/menus.c @@ -55,6 +55,7 @@ Menu rosalinaMenu = { { "System configuration...", MENU, .menu = &sysconfigMenu }, { "Miscellaneous options...", MENU, .menu = &miscellaneousMenu }, { "Save settings", METHOD, .method = &RosalinaMenu_SaveSettings }, + { "Return To Home Menu", METHOD, .method = &RosalinaMenu_HomeMenu }, { "Power off / reboot", METHOD, .method = &RosalinaMenu_PowerOffOrReboot }, { "System info", METHOD, .method = &RosalinaMenu_ShowSystemInfo }, { "Credits", METHOD, .method = &RosalinaMenu_ShowCredits }, @@ -301,6 +302,34 @@ static Result RosalinaMenu_WriteScreenshot(IFile *file, u32 width, bool top, boo return res; } +void RosalinaMenu_HomeMenu(void) { + Draw_Lock(); + Draw_ClearFramebuffer(); + Draw_FlushFramebuffer(); + Draw_Unlock(); + + do { + Draw_DrawString(10, 10, COLOR_TITLE, "Rosalina -- Return to Home"); + + srvPublishToSubscriber(0x204, 0); + + Draw_Lock(); + Draw_ClearFramebuffer(); + Draw_DrawString(10, 30, COLOR_WHITE, "Exit Rosalina to get back to the Home Menu."); + Draw_DrawString(10, 40, COLOR_WHITE, "Press A to confirm"); + Draw_FlushFramebuffer(); + Draw_Unlock(); + + u32 pressed = waitInputWithTimeout(1000); + + if(pressed & KEY_A) + return; + else if(pressed & KEY_B) + return; + } + while(!menuShouldExit); +} + void RosalinaMenu_TakeScreenshot(void) { IFile file = {0};