mirror of
https://github.com/ZDoom/qzdoom.git
synced 2024-11-12 07:34:50 +00:00
Fixed hanging on startup in native OS X backend when Xbox 360 gamepad is connected
Apple's HID Utilities has a issue with device elements enumeration while using unofficial drivers from here: http://tattiebogle.net/index.php/ProjectRoot/Xbox360Controller/OsxDriver
This commit is contained in:
parent
24f1bfae99
commit
08cd03dbb7
1 changed files with 25 additions and 15 deletions
|
@ -152,10 +152,20 @@ IOKitJoystick::IOKitJoystick( IOHIDDeviceRef device )
|
|||
: m_device( device )
|
||||
, m_sensitivity( DEFAULT_SENSITIVITY )
|
||||
{
|
||||
IOHIDElementRef element = HIDGetFirstDeviceElement( device, kHIDElementTypeInput );
|
||||
assert(NULL != device);
|
||||
assert(IOHIDDeviceGetTypeID() == CFGetTypeID(device));
|
||||
|
||||
while ( NULL != element )
|
||||
CFArrayRef elements = IOHIDDeviceCopyMatchingElements(device, NULL, kIOHIDOptionsTypeNone);
|
||||
assert(NULL != elements);
|
||||
assert(CFArrayGetTypeID() == CFGetTypeID(elements));
|
||||
|
||||
for (CFIndex i = 0, count = CFArrayGetCount(elements); i < count; ++i)
|
||||
{
|
||||
const IOHIDElementRef element =
|
||||
static_cast<IOHIDElementRef>(const_cast<void*>(CFArrayGetValueAtIndex(elements, i)));
|
||||
assert(NULL != element);
|
||||
assert(IOHIDElementGetTypeID() == CFGetTypeID(element));
|
||||
|
||||
const uint32_t usagePage = IOHIDElementGetUsagePage( element );
|
||||
|
||||
if ( kHIDPage_GenericDesktop == usagePage )
|
||||
|
@ -200,10 +210,10 @@ IOKitJoystick::IOKitJoystick( IOHIDDeviceRef device )
|
|||
|
||||
HIDQueueElement( m_device, element );
|
||||
}
|
||||
|
||||
element = HIDGetNextDeviceElement( element, kHIDElementTypeInput );
|
||||
}
|
||||
|
||||
CFRelease(elements);
|
||||
|
||||
SetDefaultConfig();
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue