From 58ae11778aa7ce50d07ec0acae14f41a24733595 Mon Sep 17 00:00:00 2001 From: Camilla Berglund Date: Thu, 2 May 2013 18:02:52 +0200 Subject: [PATCH] Replaced expensive IOKit function. --- src/cocoa_joystick.m | 32 ++++++++++++++++++-------------- 1 file changed, 18 insertions(+), 14 deletions(-) diff --git a/src/cocoa_joystick.m b/src/cocoa_joystick.m index c218cc0d..22a9521e 100644 --- a/src/cocoa_joystick.m +++ b/src/cocoa_joystick.m @@ -317,7 +317,6 @@ void _glfwInitJoysticks(void) while ((ioHIDDeviceObject = IOIteratorNext(objectIterator))) { - CFMutableDictionaryRef hidProperties = 0; kern_return_t result; CFTypeRef refCF = 0; @@ -327,16 +326,11 @@ void _glfwInitJoysticks(void) long usagePage, usage; - result = IORegistryEntryCreateCFProperties(ioHIDDeviceObject, - &hidProperties, - kCFAllocatorDefault, - kNilOptions); - - if (result != kIOReturnSuccess) - continue; - // Check device type - refCF = CFDictionaryGetValue(hidProperties, CFSTR(kIOHIDPrimaryUsagePageKey)); + refCF = IORegistryEntryCreateCFProperty(ioHIDDeviceObject, + CFSTR(kIOHIDPrimaryUsagePageKey), + kCFAllocatorDefault, + kNilOptions); if (refCF) { CFNumberGetValue(refCF, kCFNumberLongType, &usagePage); @@ -347,7 +341,10 @@ void _glfwInitJoysticks(void) } } - refCF = CFDictionaryGetValue(hidProperties, CFSTR(kIOHIDPrimaryUsageKey)); + refCF = IORegistryEntryCreateCFProperty(ioHIDDeviceObject, + CFSTR(kIOHIDPrimaryUsageKey), + kCFAllocatorDefault, + kNilOptions); if (refCF) { CFNumberGetValue(refCF, kCFNumberLongType, &usage); @@ -391,7 +388,10 @@ void _glfwInitJoysticks(void) joystick); // Get product string - refCF = CFDictionaryGetValue(hidProperties, CFSTR(kIOHIDProductKey)); + refCF = IORegistryEntryCreateCFProperty(ioHIDDeviceObject, + CFSTR(kIOHIDProductKey), + kCFAllocatorDefault, + kNilOptions); if (refCF) { CFStringGetCString(refCF, @@ -407,8 +407,12 @@ void _glfwInitJoysticks(void) joystick->buttons = CFArrayCreateMutable(NULL, 0, NULL); joystick->hats = CFArrayCreateMutable(NULL, 0, NULL); - CFTypeRef refTopElement = CFDictionaryGetValue(hidProperties, - CFSTR(kIOHIDElementKey)); + CFTypeRef refTopElement; + + refTopElement = IORegistryEntryCreateCFProperty(ioHIDDeviceObject, + CFSTR(kIOHIDElementKey), + kCFAllocatorDefault, + kNilOptions); CFTypeID type = CFGetTypeID(refTopElement); if (type == CFArrayGetTypeID()) {