mirror of https://github.com/encounter/SDL.git
Fix crash when reading background events for MFi controllers on macOS
Enabling GCController.shouldMonitorBackgroundEvents to read background events
for MFi controllers before receiving the first GCControllerDidConnectNotification
is apparently a no-go on macOS (12.3.1 for me), and would crash on attempt.
Apple's documentation is... not great, and doesn't point this out.
This waits for IOS_AddMFIJoystickDevice() to get called down the chain from GCControllerDidConnectNotification, and enables GCController.shouldMonitorBackgroundEvents
if it hadn't been already.
On iOS and tvOS, GCController.shouldMonitorBackgroundEvents is ignored, so
there's no need to check their versions.
(cherry picked from commit d1a3981bf8
)
This commit is contained in:
parent
f8e14ad25a
commit
09086aefaa
|
@ -180,6 +180,10 @@ IsControllerXbox(GCController *controller)
|
||||||
static BOOL
|
static BOOL
|
||||||
IOS_AddMFIJoystickDevice(SDL_JoystickDeviceItem *device, GCController *controller)
|
IOS_AddMFIJoystickDevice(SDL_JoystickDeviceItem *device, GCController *controller)
|
||||||
{
|
{
|
||||||
|
if ((@available(macOS 11.3, *)) && !GCController.shouldMonitorBackgroundEvents) {
|
||||||
|
GCController.shouldMonitorBackgroundEvents = YES;
|
||||||
|
}
|
||||||
|
|
||||||
Uint16 *guid16 = (Uint16 *)device->guid.data;
|
Uint16 *guid16 = (Uint16 *)device->guid.data;
|
||||||
Uint16 vendor = 0;
|
Uint16 vendor = 0;
|
||||||
Uint16 product = 0;
|
Uint16 product = 0;
|
||||||
|
@ -588,10 +592,6 @@ IOS_JoystickInit(void)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (@available(macOS 11.3, iOS 14.5, tvOS 14.5, *)) {
|
|
||||||
GCController.shouldMonitorBackgroundEvents = YES;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* For whatever reason, this always returns an empty array on
|
/* For whatever reason, this always returns an empty array on
|
||||||
macOS 11.0.1 */
|
macOS 11.0.1 */
|
||||||
for (GCController *controller in [GCController controllers]) {
|
for (GCController *controller in [GCController controllers]) {
|
||||||
|
|
Loading…
Reference in New Issue