diff --git a/source/arm11/menu/menu_func.c b/source/arm11/menu/menu_func.c index 3522472..0032ec7 100644 --- a/source/arm11/menu/menu_func.c +++ b/source/arm11/menu/menu_func.c @@ -594,8 +594,14 @@ } // check for user cancel request - // cancel is forbidden(!) here - userCancelHandler(false); + // cancel is forbidden(!) here, but we need to handle force poweroff + if (userCancelHandler(false)) + { + fFinalizeRawAccess(devHandle); + fFreeDeviceBuffer(dbufHandle); + fClose(fHandle); + return 1; + } } // NAND access finalized @@ -884,6 +890,7 @@ consoleSelect(term_con); consoleClear(); + ee_printf("Config has changed: %s\n", configHasChanged() ? "true" : "false"); ee_printf("Write config: %s\n", writeConfigFile() ? "success" : "failed"); ee_printf("Load config: %s\n", loadConfigFile() ? "success" : "failed"); diff --git a/source/arm11/menu/menu_util.c b/source/arm11/menu/menu_util.c index bac4f6e..4d290e7 100644 --- a/source/arm11/menu/menu_util.c +++ b/source/arm11/menu/menu_util.c @@ -279,12 +279,17 @@ { hidScanInput(); u32 kDown = hidKeysDown(); + u32 powerHeld = hidGetPowerButton(false); + + // detect force poweroff + if (powerHeld & (1<<1)) + return true; if (kDown & KEY_SHELL) { sleepmode(); } - else if (kDown & (KEY_HOME|KEY_B) || hidGetPowerButton(false)) + else if (kDown & (KEY_HOME|KEY_B) || powerHeld) { if (cancelAllowed) { @@ -296,9 +301,11 @@ hidScanInput(); kDown = hidKeysDown(); + powerHeld = hidGetPowerButton(false); if (kDown & KEY_SHELL) sleepmode(); if (kDown & KEY_A) return true; + if (powerHeld & (1<<1)) return true; } while (!(kDown & KEY_B)); }