mirror of
https://github.com/glfw/glfw.git
synced 2025-10-03 05:11:01 +00:00
Merge cabd564c4f
into aa5be2dbc3
This commit is contained in:
commit
915bcb81cc
@ -316,8 +316,10 @@ void _glfwInitJoysticks(void)
|
|||||||
|
|
||||||
while ((ioHIDDeviceObject = IOIteratorNext(objectIterator)))
|
while ((ioHIDDeviceObject = IOIteratorNext(objectIterator)))
|
||||||
{
|
{
|
||||||
|
|
||||||
CFMutableDictionaryRef propsRef = NULL;
|
CFMutableDictionaryRef propsRef = NULL;
|
||||||
CFTypeRef valueRef = NULL;
|
CFTypeRef valueRef = NULL;
|
||||||
|
|
||||||
kern_return_t result;
|
kern_return_t result;
|
||||||
|
|
||||||
IOCFPlugInInterface** ppPlugInInterface = NULL;
|
IOCFPlugInInterface** ppPlugInInterface = NULL;
|
||||||
@ -332,12 +334,14 @@ void _glfwInitJoysticks(void)
|
|||||||
kCFAllocatorDefault,
|
kCFAllocatorDefault,
|
||||||
kNilOptions);
|
kNilOptions);
|
||||||
|
|
||||||
if (result != kIOReturnSuccess)
|
if (result != kIOReturnSuccess) continue;
|
||||||
continue;
|
|
||||||
|
CFRetain(propsRef);
|
||||||
|
|
||||||
valueRef = CFDictionaryGetValue(propsRef, CFSTR(kIOHIDPrimaryUsagePageKey));
|
valueRef = CFDictionaryGetValue(propsRef, CFSTR(kIOHIDPrimaryUsagePageKey));
|
||||||
if (valueRef)
|
if (valueRef)
|
||||||
{
|
{
|
||||||
|
CFRetain(valueRef);
|
||||||
CFNumberGetValue(valueRef, kCFNumberLongType, &usagePage);
|
CFNumberGetValue(valueRef, kCFNumberLongType, &usagePage);
|
||||||
if (usagePage != kHIDPage_GenericDesktop)
|
if (usagePage != kHIDPage_GenericDesktop)
|
||||||
{
|
{
|
||||||
@ -346,13 +350,13 @@ void _glfwInitJoysticks(void)
|
|||||||
CFRelease(propsRef);
|
CFRelease(propsRef);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
CFRelease(valueRef);
|
CFRelease(valueRef);
|
||||||
}
|
}
|
||||||
|
|
||||||
valueRef = CFDictionaryGetValue(propsRef, CFSTR(kIOHIDPrimaryUsageKey));
|
valueRef = CFDictionaryGetValue(propsRef, CFSTR(kIOHIDPrimaryUsageKey));
|
||||||
if (valueRef)
|
if (valueRef)
|
||||||
{
|
{
|
||||||
|
CFRetain(valueRef);
|
||||||
CFNumberGetValue(valueRef, kCFNumberLongType, &usage);
|
CFNumberGetValue(valueRef, kCFNumberLongType, &usage);
|
||||||
|
|
||||||
if ((usage != kHIDUsage_GD_Joystick &&
|
if ((usage != kHIDUsage_GD_Joystick &&
|
||||||
@ -364,7 +368,6 @@ void _glfwInitJoysticks(void)
|
|||||||
CFRelease(propsRef);
|
CFRelease(propsRef);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
CFRelease(valueRef);
|
CFRelease(valueRef);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -377,24 +380,14 @@ void _glfwInitJoysticks(void)
|
|||||||
&ppPlugInInterface,
|
&ppPlugInInterface,
|
||||||
&score);
|
&score);
|
||||||
|
|
||||||
if (kIOReturnSuccess != result)
|
if (kIOReturnSuccess != result) return;
|
||||||
{
|
|
||||||
CFRelease(valueRef);
|
|
||||||
CFRelease(propsRef);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
plugInResult = (*ppPlugInInterface)->QueryInterface(
|
plugInResult = (*ppPlugInInterface)->QueryInterface(
|
||||||
ppPlugInInterface,
|
ppPlugInInterface,
|
||||||
CFUUIDGetUUIDBytes(kIOHIDDeviceInterfaceID),
|
CFUUIDGetUUIDBytes(kIOHIDDeviceInterfaceID),
|
||||||
(void *) &(joystick->interface));
|
(void *) &(joystick->interface));
|
||||||
|
|
||||||
if (plugInResult != S_OK)
|
if (plugInResult != S_OK) return;
|
||||||
{
|
|
||||||
CFRelease(valueRef);
|
|
||||||
CFRelease(propsRef);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
(*ppPlugInInterface)->Release(ppPlugInInterface);
|
(*ppPlugInInterface)->Release(ppPlugInInterface);
|
||||||
|
|
||||||
@ -408,6 +401,7 @@ void _glfwInitJoysticks(void)
|
|||||||
valueRef = CFDictionaryGetValue(propsRef, CFSTR(kIOHIDProductKey));
|
valueRef = CFDictionaryGetValue(propsRef, CFSTR(kIOHIDProductKey));
|
||||||
if (valueRef)
|
if (valueRef)
|
||||||
{
|
{
|
||||||
|
CFRetain(valueRef);
|
||||||
CFStringGetCString(valueRef,
|
CFStringGetCString(valueRef,
|
||||||
joystick->name,
|
joystick->name,
|
||||||
sizeof(joystick->name),
|
sizeof(joystick->name),
|
||||||
@ -420,7 +414,7 @@ void _glfwInitJoysticks(void)
|
|||||||
joystick->hatElements = CFArrayCreateMutable(NULL, 0, NULL);
|
joystick->hatElements = CFArrayCreateMutable(NULL, 0, NULL);
|
||||||
|
|
||||||
valueRef = CFDictionaryGetValue(propsRef, CFSTR(kIOHIDElementKey));
|
valueRef = CFDictionaryGetValue(propsRef, CFSTR(kIOHIDElementKey));
|
||||||
if (CFGetTypeID(valueRef) == CFArrayGetTypeID())
|
if (valueRef && (CFGetTypeID(valueRef) == CFArrayGetTypeID()))
|
||||||
{
|
{
|
||||||
CFRange range = { 0, CFArrayGetCount(valueRef) };
|
CFRange range = { 0, CFArrayGetCount(valueRef) };
|
||||||
CFArrayApplyFunction(valueRef,
|
CFArrayApplyFunction(valueRef,
|
||||||
|
Loading…
Reference in New Issue
Block a user