Fix SDL_mfijoystick build issues

Add missing guards around use of physicalInputProfile.

Add explicit import of Foundation which seems to be needed on some
systems to get the NSArray definition.

Add __unsafe_unretained to ObjC types in struct so the compiler doesn't
complain about that not being allowed with ARC.

Closes: #8979
(cherry picked from commit e0158f68e4)
This commit is contained in:
Joshua Root
2024-02-03 15:33:53 +11:00
committed by Sam Lantinga
parent fc787a41dc
commit c53c351921
2 changed files with 11 additions and 5 deletions

View File

@@ -378,6 +378,7 @@ static BOOL IOS_AddMFIJoystickDevice(SDL_JoystickDeviceItem *device, GCControlle
NSLog(@"Product name: %@\n", controller.vendorName);
NSLog(@"Product category: %@\n", controller.productCategory);
NSLog(@"Elements available:\n");
#ifdef ENABLE_PHYSICAL_INPUT_PROFILE
if (@available(macOS 10.16, iOS 14.0, tvOS 14.0, *)) {
NSDictionary<NSString *, GCControllerElement *> *elements = controller.physicalInputProfile.elements;
for (id key in controller.physicalInputProfile.buttons) {
@@ -390,6 +391,7 @@ static BOOL IOS_AddMFIJoystickDevice(SDL_JoystickDeviceItem *device, GCControlle
NSLog(@"\tHat: %@\n", key);
}
}
#endif
#endif
device->is_xbox = IsControllerXbox(controller);
@@ -1109,7 +1111,7 @@ static void IOS_MFIJoystickUpdate(SDL_Joystick *joystick)
Uint8 hatstate = SDL_HAT_CENTERED;
int i;
#ifdef DEBUG_CONTROLLER_STATE
#if defined(DEBUG_CONTROLLER_STATE) && defined(ENABLE_PHYSICAL_INPUT_PROFILE)
if (@available(macOS 10.16, iOS 14.0, tvOS 14.0, *)) {
if (controller.physicalInputProfile) {
for (id key in controller.physicalInputProfile.buttons) {
@@ -1136,6 +1138,7 @@ static void IOS_MFIJoystickUpdate(SDL_Joystick *joystick)
}
#endif /* DEBUG_CONTROLLER_STATE */
#ifdef ENABLE_PHYSICAL_INPUT_PROFILE
if (@available(macOS 10.16, iOS 14.0, tvOS 14.0, *)) {
NSDictionary<NSString *, GCControllerElement *> *elements = controller.physicalInputProfile.elements;
NSDictionary<NSString *, GCControllerButtonInput *> *buttons = controller.physicalInputProfile.buttons;
@@ -1162,7 +1165,9 @@ static void IOS_MFIJoystickUpdate(SDL_Joystick *joystick)
}
SDL_PrivateJoystickButton(joystick, button++, value);
}
} else if (controller.extendedGamepad) {
} else
#endif
if (controller.extendedGamepad) {
SDL_bool isstack;
GCExtendedGamepad *gamepad = controller.extendedGamepad;

View File

@@ -26,7 +26,8 @@
#include "SDL_stdinc.h"
#include "../SDL_sysjoystick.h"
#include <CoreFoundation/CoreFoundation.h>
#import <CoreFoundation/CoreFoundation.h>
#import <Foundation/Foundation.h>
@class GCController;
@@ -59,8 +60,8 @@ typedef struct joystick_hwdata
SDL_bool is_backbone_one;
int is_siri_remote;
NSArray *axes;
NSArray *buttons;
NSArray __unsafe_unretained *axes;
NSArray __unsafe_unretained *buttons;
SDL_bool has_dualshock_touchpad;
SDL_bool has_xbox_paddles;