diff --git a/src/feature/gui/gui-runner.c b/src/feature/gui/gui-runner.c index 3ba09a415..ca4168d9f 100644 --- a/src/feature/gui/gui-runner.c +++ b/src/feature/gui/gui-runner.c @@ -18,10 +18,6 @@ #include #include -#ifdef _3DS -#include <3ds.h> -#endif - #include mLOG_DECLARE_CATEGORY(GUI_RUNNER); @@ -334,13 +330,13 @@ void mGUIRun(struct mGUIRunner* runner, const char* path) { gettimeofday(&tv, 0); runner->lastFpsCheck = 1000000LL * tv.tv_sec + tv.tv_usec; - while (true) { -#ifdef _3DS - running = aptMainLoop(); - if (!running) { - break; + while (running) { + if (runner->running) { + running = runner->running(runner); + if (!running) { + break; + } } -#endif uint32_t guiKeys; uint32_t heldKeys; GUIPollInput(&runner->params, &guiKeys, &heldKeys); diff --git a/src/feature/gui/gui-runner.h b/src/feature/gui/gui-runner.h index 0a288951f..daa3c6690 100644 --- a/src/feature/gui/gui-runner.h +++ b/src/feature/gui/gui-runner.h @@ -70,6 +70,7 @@ struct mGUIRunner { void (*incrementScreenMode)(struct mGUIRunner*); void (*setFrameLimiter)(struct mGUIRunner*, bool limit); uint16_t (*pollGameInput)(struct mGUIRunner*); + bool (*running)(struct mGUIRunner*); }; void mGUIInit(struct mGUIRunner*, const char* port); diff --git a/src/platform/3ds/main.c b/src/platform/3ds/main.c index 3377b3be9..b04cf5a27 100644 --- a/src/platform/3ds/main.c +++ b/src/platform/3ds/main.c @@ -678,6 +678,10 @@ static void _setFrameLimiter(struct mGUIRunner* runner, bool limit) { tickCounter = svcGetSystemTick(); } +static bool _running(struct mGUIRunner* runner) { + return aptMainLoop(); +} + static uint32_t _pollInput(const struct mInputMap* map) { hidScanInput(); int activeKeys = hidKeysHeld(); @@ -1020,7 +1024,8 @@ int main() { .unpaused = _gameLoaded, .incrementScreenMode = _incrementScreenMode, .setFrameLimiter = _setFrameLimiter, - .pollGameInput = _pollGameInput + .pollGameInput = _pollGameInput, + .running = _running }; mGUIInit(&runner, "3ds");