Added WUPSConfigAPI_IsMenuOpen() to allow plugins to check if the menu is open.

This commit is contained in:
Daniel K. O. (dkosmari) 2024-08-27 08:44:33 -03:00
parent 5893ac2f18
commit 90848971ad
4 changed files with 18 additions and 10 deletions

View File

@ -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);

View File

@ -16,4 +16,6 @@ bool gNotificationModuleLoaded = false;
OSThread *gOnlyAcceptFromThread = nullptr;
bool gConfigMenuShouldClose = false;
bool gConfigMenuShouldClose = false;
bool gConfigMenuOpened = false;

View File

@ -29,4 +29,6 @@ extern bool gNotificationModuleLoaded;
extern OSThread *gOnlyAcceptFromThread;
extern bool gConfigMenuShouldClose;
extern bool gConfigMenuShouldClose;
extern bool gConfigMenuOpened;

View File

@ -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) {