From fec6f187d1558358db714cf9633714c0d13c0e36 Mon Sep 17 00:00:00 2001 From: Aaron Jacobs Date: Tue, 23 Jun 2015 13:14:07 -0700 Subject: [PATCH] Do not recurse over IOHIDElement children. --- src/iokit_joystick.m | 92 +++++++++++++++++++------------------------- 1 file changed, 40 insertions(+), 52 deletions(-) diff --git a/src/iokit_joystick.m b/src/iokit_joystick.m index 06e90c3a..86d1f969 100644 --- a/src/iokit_joystick.m +++ b/src/iokit_joystick.m @@ -67,65 +67,53 @@ static void addJoystickElement(_GLFWjoydevice* joystick, IOHIDElementRef element usagePage = IOHIDElementGetUsagePage(elementRef); usage = IOHIDElementGetUsage(elementRef); - if ((elementType == kIOHIDElementTypeInput_Axis) || - (elementType == kIOHIDElementTypeInput_Button) || - (elementType == kIOHIDElementTypeInput_Misc)) - { - switch (usagePage) - { - case kHIDPage_GenericDesktop: - { - switch (usage) - { - case kHIDUsage_GD_X: - case kHIDUsage_GD_Y: - case kHIDUsage_GD_Z: - case kHIDUsage_GD_Rx: - case kHIDUsage_GD_Ry: - case kHIDUsage_GD_Rz: - case kHIDUsage_GD_Slider: - case kHIDUsage_GD_Dial: - case kHIDUsage_GD_Wheel: - elementsArray = joystick->axisElements; - break; - case kHIDUsage_GD_Hatswitch: - elementsArray = joystick->hatElements; - break; - } + if ((elementType != kIOHIDElementTypeInput_Axis) && + (elementType != kIOHIDElementTypeInput_Button) && + (elementType != kIOHIDElementTypeInput_Misc)) + return; - break; + switch (usagePage) + { + case kHIDPage_GenericDesktop: + { + switch (usage) + { + case kHIDUsage_GD_X: + case kHIDUsage_GD_Y: + case kHIDUsage_GD_Z: + case kHIDUsage_GD_Rx: + case kHIDUsage_GD_Ry: + case kHIDUsage_GD_Rz: + case kHIDUsage_GD_Slider: + case kHIDUsage_GD_Dial: + case kHIDUsage_GD_Wheel: + elementsArray = joystick->axisElements; + break; + case kHIDUsage_GD_Hatswitch: + elementsArray = joystick->hatElements; + break; } - case kHIDPage_Button: - elementsArray = joystick->buttonElements; - break; - default: - break; + break; } - if (elementsArray) - { - _GLFWjoyelement* element = calloc(1, sizeof(_GLFWjoyelement)); - - CFArrayAppendValue(elementsArray, element); - - element->elementRef = elementRef; - - element->minReport = IOHIDElementGetLogicalMin(elementRef); - element->maxReport = IOHIDElementGetLogicalMax(elementRef); - } + case kHIDPage_Button: + elementsArray = joystick->buttonElements; + break; + default: + break; } - else + + if (elementsArray) { - CFArrayRef array = IOHIDElementGetChildren(elementRef); - if (array) - { - if (CFGetTypeID(array) == CFArrayGetTypeID()) - { - CFRange range = { 0, CFArrayGetCount(array) }; - CFArrayApplyFunction(array, range, getElementsCFArrayHandler, joystick); - } - } + _GLFWjoyelement* element = calloc(1, sizeof(_GLFWjoyelement)); + + CFArrayAppendValue(elementsArray, element); + + element->elementRef = elementRef; + + element->minReport = IOHIDElementGetLogicalMin(elementRef); + element->maxReport = IOHIDElementGetLogicalMax(elementRef); } }