Fix WUP-028 on Catalina, make controller configuration compatible between macOS versions
This commit is contained in:
parent
40562b1c54
commit
5da80062d9
@ -41,6 +41,24 @@
|
|||||||
IOHIDElementRef parent = IOHIDElementGetParent(element);
|
IOHIDElementRef parent = IOHIDElementGetParent(element);
|
||||||
_parentID = parent? (uint32_t)IOHIDElementGetCookie(parent) : -1;
|
_parentID = parent? (uint32_t)IOHIDElementGetCookie(parent) : -1;
|
||||||
_device = IOHIDElementGetDevice(element);
|
_device = IOHIDElementGetDevice(element);
|
||||||
|
|
||||||
|
/* Catalina added a new input type in a way that breaks cookie consistency across macOS versions,
|
||||||
|
we shall adjust our cookies to to compensate */
|
||||||
|
unsigned cookieShift = 0, parentCookieShift = 0;
|
||||||
|
NSArray *nones = CFBridgingRelease(IOHIDDeviceCopyMatchingElements(IOHIDElementGetDevice(element),
|
||||||
|
(__bridge CFDictionaryRef)@{@(kIOHIDElementTypeKey): @(kIOHIDElementTypeInput_NULL)},
|
||||||
|
0));
|
||||||
|
for (id none in nones) {
|
||||||
|
if (IOHIDElementGetCookie((__bridge IOHIDElementRef) none) < _uniqueID) {
|
||||||
|
cookieShift++;
|
||||||
|
}
|
||||||
|
if (IOHIDElementGetCookie((__bridge IOHIDElementRef) none) < (int32_t)_parentID) {
|
||||||
|
parentCookieShift++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
_uniqueID -= cookieShift;
|
||||||
|
_parentID -= parentCookieShift;
|
||||||
}
|
}
|
||||||
return self;
|
return self;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user