Fix blocking and add aptIsHomePressed

This commit is contained in:
Oreo639 2019-04-23 19:33:55 -07:00
parent 115607d671
commit 0109837270
2 changed files with 27 additions and 4 deletions

View File

@ -170,6 +170,12 @@ bool aptIsHomeAllowed(void);
*/ */
void aptSetHomeAllowed(bool allowed); void aptSetHomeAllowed(bool allowed);
/**
* @brief Returns when the HOME button is pressed.
* @return Whether the HOME button is being pressed.
*/
bool aptIsHomePressed(void);
/** /**
* @brief Processes the current APT status. Generally used within a main loop. * @brief Processes the current APT status. Generally used within a main loop.
* @return Whether the application should continue running. * @return Whether the application should continue running.

View File

@ -40,8 +40,9 @@ enum
}; };
static u8 aptHomeButtonState; static u8 aptHomeButtonState;
static u8 aptRecentHomeButtonState;
static u32 aptFlags = FLAG_ALLOWSLEEP; static u32 aptFlags = FLAG_ALLOWSLEEP;
static bool aptHomeAllowed = false; static bool aptHomeAllowed = true;
static u32 aptParameters[0x1000/4]; static u32 aptParameters[0x1000/4];
static u64 aptChainloadTid; static u64 aptChainloadTid;
static u8 aptChainloadMediatype; static u8 aptChainloadMediatype;
@ -278,6 +279,11 @@ void aptSetHomeAllowed(bool allowed)
aptHomeAllowed = allowed; aptHomeAllowed = allowed;
} }
bool aptIsHomePressed(void)
{
return aptRecentHomeButtonState;
}
void aptSetChainloader(u64 programID, u8 mediatype) void aptSetChainloader(u64 programID, u8 mediatype)
{ {
aptChainloadTid = programID; aptChainloadTid = programID;
@ -349,10 +355,10 @@ void aptEventHandler(void *arg)
switch (signal) switch (signal)
{ {
case APTSIGNAL_HOMEBUTTON: case APTSIGNAL_HOMEBUTTON:
if (!aptHomeButtonState && aptIsHomeAllowed()) aptHomeButtonState = 1; if (!aptHomeButtonState) aptHomeButtonState = 1;
break; break;
case APTSIGNAL_HOMEBUTTON2: case APTSIGNAL_HOMEBUTTON2:
if (!aptHomeButtonState && aptIsHomeAllowed()) aptHomeButtonState = 2; if (!aptHomeButtonState) aptHomeButtonState = 2;
break; break;
case APTSIGNAL_SLEEP_QUERY: case APTSIGNAL_SLEEP_QUERY:
APT_ReplySleepQuery(envGetAptAppId(), aptIsSleepAllowed() ? APTREPLY_ACCEPT : APTREPLY_REJECT); APT_ReplySleepQuery(envGetAptAppId(), aptIsSleepAllowed() ? APTREPLY_ACCEPT : APTREPLY_REJECT);
@ -512,6 +518,8 @@ bool aptMainLoop(void)
if (aptIsCrippled()) return true; if (aptIsCrippled()) return true;
if (aptFlags & FLAG_EXITED) return false; if (aptFlags & FLAG_EXITED) return false;
if (aptRecentHomeButtonState) aptRecentHomeButtonState = 0;
if (aptFlags & FLAG_WANTSTOSLEEP) if (aptFlags & FLAG_WANTSTOSLEEP)
{ {
aptFlags = (aptFlags &~ FLAG_WANTSTOSLEEP) | FLAG_SLEEPING; aptFlags = (aptFlags &~ FLAG_WANTSTOSLEEP) | FLAG_SLEEPING;
@ -525,7 +533,16 @@ bool aptMainLoop(void)
aptCallHook(APTHOOK_ONWAKEUP); aptCallHook(APTHOOK_ONWAKEUP);
} }
else if ((aptFlags & FLAG_POWERBUTTON) || aptHomeButtonState) else if ((aptFlags & FLAG_POWERBUTTON) || aptHomeButtonState)
aptProcessJumpToMenu(); {
if (aptHomeAllowed || (aptFlags & FLAG_POWERBUTTON))
aptProcessJumpToMenu();
else
{
aptRecentHomeButtonState = aptHomeButtonState;
aptHomeButtonState = 0;
APT_UnlockTransition(0x01);
}
}
if (aptFlags & (FLAG_ORDERTOCLOSE|FLAG_WKUPBYCANCEL)) if (aptFlags & (FLAG_ORDERTOCLOSE|FLAG_WKUPBYCANCEL))
{ {