From 0bdf4f95bfc51de21ff6444ee1e1fdb7f6ad2661 Mon Sep 17 00:00:00 2001 From: Sam Lantinga Date: Mon, 22 Mar 2021 19:19:01 -0700 Subject: [PATCH] Disable system gestures on MFi controllers while they're open, so we get access to the back button, etc. --- src/joystick/iphoneos/SDL_mfijoystick.m | 26 ++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/src/joystick/iphoneos/SDL_mfijoystick.m b/src/joystick/iphoneos/SDL_mfijoystick.m index 0930f62d4..dd70f5c88 100644 --- a/src/joystick/iphoneos/SDL_mfijoystick.m +++ b/src/joystick/iphoneos/SDL_mfijoystick.m @@ -89,6 +89,7 @@ static id disconnectObserver = nil; #define ENABLE_MFI_RUMBLE #define ENABLE_MFI_LIGHT #define ENABLE_MFI_SENSORS +#define ENABLE_MFI_SYSTEM_GESTURE_STATE #define ENABLE_PHYSICAL_INPUT_PROFILE #endif @@ -656,6 +657,18 @@ IOS_JoystickOpen(SDL_Joystick *joystick, int device_index) } #endif /* ENABLE_MFI_SENSORS */ +#ifdef ENABLE_MFI_SYSTEM_GESTURE_STATE + if (@available(macOS 11.0, iOS 14.0, tvOS 14.0, *)) { + GCController *controller = joystick->hwdata->controller; + if (controller.extendedGamepad) { + GCExtendedGamepad *gamepad = controller.extendedGamepad; + if ([gamepad.buttonOptions isBoundToSystemGesture]) { + gamepad.buttonOptions.preferredSystemGestureState = GCSystemGestureStateDisabled; + } + } + } +#endif /* ENABLE_MFI_SYSTEM_GESTURE_STATE */ + #endif /* SDL_JOYSTICK_MFI */ } } @@ -1331,7 +1344,18 @@ IOS_JoystickClose(SDL_Joystick *joystick) GCController *controller = device->controller; controller.controllerPausedHandler = nil; controller.playerIndex = -1; -#endif + +#ifdef ENABLE_MFI_SYSTEM_GESTURE_STATE + if (@available(macOS 11.0, iOS 14.0, tvOS 14.0, *)) { + GCController *controller = joystick->hwdata->controller; + if (controller.extendedGamepad) { + GCExtendedGamepad *gamepad = controller.extendedGamepad; + gamepad.buttonOptions.preferredSystemGestureState = GCSystemGestureStateEnabled; + } + } +#endif /* ENABLE_MFI_SYSTEM_GESTURE_STATE */ + +#endif /* SDL_JOYSTICK_MFI */ } } if (device->remote) {