From 90848971ad4b15a36f84fbd24a00d5b002417938 Mon Sep 17 00:00:00 2001 From: "Daniel K. O. (dkosmari)" Date: Tue, 27 Aug 2024 08:44:33 -0300 Subject: [PATCH] Added `WUPSConfigAPI_IsMenuOpen()` to allow plugins to check if the menu is open. --- source/config/WUPSConfigAPI.cpp | 5 +++++ source/globals.cpp | 4 +++- source/globals.h | 4 +++- source/patcher/hooks_patcher_static.cpp | 15 +++++++-------- 4 files changed, 18 insertions(+), 10 deletions(-) diff --git a/source/config/WUPSConfigAPI.cpp b/source/config/WUPSConfigAPI.cpp index fb9254c..a49eae4 100644 --- a/source/config/WUPSConfigAPI.cpp +++ b/source/config/WUPSConfigAPI.cpp @@ -311,7 +311,12 @@ namespace WUPSConfigAPIBackend { return WUPSCONFIG_API_RESULT_SUCCESS; } + BOOL WUPSConfigAPI_IsMenuOpen(void) { + return gConfigMenuOpened; + } + WUMS_EXPORT_FUNCTION(WUPSConfigAPI_GetVersion); + WUMS_EXPORT_FUNCTION(WUPSConfigAPI_IsMenuOpen); WUMS_EXPORT_FUNCTION_EX(WUPSConfigAPIBackend::InitEx, WUPSConfigAPI_InitEx); WUMS_EXPORT_FUNCTION_EX(WUPSConfigAPIBackend::Category::Create, WUPSConfigAPI_Category_CreateEx); diff --git a/source/globals.cpp b/source/globals.cpp index 7c16568..676071b 100644 --- a/source/globals.cpp +++ b/source/globals.cpp @@ -16,4 +16,6 @@ bool gNotificationModuleLoaded = false; OSThread *gOnlyAcceptFromThread = nullptr; -bool gConfigMenuShouldClose = false; \ No newline at end of file +bool gConfigMenuShouldClose = false; + +bool gConfigMenuOpened = false; diff --git a/source/globals.h b/source/globals.h index 7a5bba2..43e754e 100644 --- a/source/globals.h +++ b/source/globals.h @@ -29,4 +29,6 @@ extern bool gNotificationModuleLoaded; extern OSThread *gOnlyAcceptFromThread; -extern bool gConfigMenuShouldClose; \ No newline at end of file +extern bool gConfigMenuShouldClose; + +extern bool gConfigMenuOpened; diff --git a/source/patcher/hooks_patcher_static.cpp b/source/patcher/hooks_patcher_static.cpp index 08f2236..77a13ed 100644 --- a/source/patcher/hooks_patcher_static.cpp +++ b/source/patcher/hooks_patcher_static.cpp @@ -8,16 +8,15 @@ #include "../hooks.h" static uint8_t sVpadPressCooldown = 0xFF; -static bool sConfigMenuOpened = false; static bool sWantsToOpenConfigMenu = false; DECL_FUNCTION(void, GX2SwapScanBuffers, void) { real_GX2SwapScanBuffers(); - if (sWantsToOpenConfigMenu && !sConfigMenuOpened) { - sConfigMenuOpened = true; + if (sWantsToOpenConfigMenu && !gConfigMenuOpened) { + gConfigMenuOpened = true; ConfigUtils::openConfigMenu(); - sConfigMenuOpened = false; + gConfigMenuOpened = false; sWantsToOpenConfigMenu = false; } } @@ -46,7 +45,7 @@ static uint32_t lastData0 = 0; DECL_FUNCTION(BOOL, OSSendMessage, OSMessageQueue *queue, OSMessage *message, OSMessageFlags flags) { - if (sConfigMenuOpened && queue == OSGetSystemMessageQueue()) { + if (gConfigMenuOpened && queue == OSGetSystemMessageQueue()) { if (message != nullptr) { if (message->args[0] == 0xfacebacc) { // Release foreground gConfigMenuShouldClose = true; @@ -81,7 +80,7 @@ DECL_FUNCTION(void, OSReleaseForeground) { } DECL_FUNCTION(int32_t, VPADRead, int32_t chan, VPADStatus *buffer, uint32_t buffer_size, VPADReadError *error) { - if (sConfigMenuOpened) { + if (gConfigMenuOpened) { // Ignore reading vpad input only from other threads if the config menu is opened if (OSGetCurrentThread() != gOnlyAcceptFromThread) { return 0; @@ -90,7 +89,7 @@ DECL_FUNCTION(int32_t, VPADRead, int32_t chan, VPADStatus *buffer, uint32_t buff VPADReadError real_error = VPAD_READ_SUCCESS; int32_t result = real_VPADRead(chan, buffer, buffer_size, &real_error); - if (result > 0 && real_error == VPAD_READ_SUCCESS && buffer && ((buffer[0].hold & 0xFFFFF) == (VPAD_BUTTON_L | VPAD_BUTTON_DOWN | VPAD_BUTTON_MINUS)) && sVpadPressCooldown == 0 && !sConfigMenuOpened) { + if (result > 0 && real_error == VPAD_READ_SUCCESS && buffer && ((buffer[0].hold & 0xFFFFF) == (VPAD_BUTTON_L | VPAD_BUTTON_DOWN | VPAD_BUTTON_MINUS)) && sVpadPressCooldown == 0 && !gConfigMenuOpened) { sWantsToOpenConfigMenu = true; sVpadPressCooldown = 0x3C; @@ -109,7 +108,7 @@ DECL_FUNCTION(int32_t, VPADRead, int32_t chan, VPADStatus *buffer, uint32_t buff DECL_FUNCTION(void, WPADRead, WPADChan chan, WPADStatusProController *data) { real_WPADRead(chan, data); - if (!sConfigMenuOpened && data && data[0].err == 0) { + if (!gConfigMenuOpened && data && data[0].err == 0) { if (data[0].extensionType != 0xFF) { if (data[0].extensionType == WPAD_EXT_CORE || data[0].extensionType == WPAD_EXT_NUNCHUK || data[0].extensionType == WPAD_EXT_MPLUS || data[0].extensionType == WPAD_EXT_MPLUS_NUNCHUK) {