From 167618a89ed0639b8df61ca0c298280fb0388373 Mon Sep 17 00:00:00 2001 From: Marco Antognini Date: Sun, 25 Dec 2011 01:41:18 +0100 Subject: [PATCH] sf::Joystick now handles controllers designated as "Gamepad" (Fix #138) --- src/SFML/Window/OSX/HIDJoystickManager.cpp | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/src/SFML/Window/OSX/HIDJoystickManager.cpp b/src/SFML/Window/OSX/HIDJoystickManager.cpp index fcb97309..0b6bb68f 100644 --- a/src/SFML/Window/OSX/HIDJoystickManager.cpp +++ b/src/SFML/Window/OSX/HIDJoystickManager.cpp @@ -75,10 +75,23 @@ HIDJoystickManager::HIDJoystickManager() { myHIDManager = IOHIDManagerCreate(kCFAllocatorDefault, kIOHIDOptionsTypeNone); - CFDictionaryRef mask = HIDInputManager::CopyDevicesMask(kHIDPage_GenericDesktop, - kHIDUsage_GD_Joystick); - IOHIDManagerSetDeviceMatching(myHIDManager, mask); + CFDictionaryRef mask0 = HIDInputManager::CopyDevicesMask(kHIDPage_GenericDesktop, + kHIDUsage_GD_Joystick); + + CFDictionaryRef mask1 = HIDInputManager::CopyDevicesMask(kHIDPage_GenericDesktop, + kHIDUsage_GD_GamePad); + + CFDictionaryRef maskArray[2]; + maskArray[0] = mask0; + maskArray[1] = mask1; + + CFArrayRef mask = CFArrayCreate(NULL, (const void**)maskArray, 2, NULL); + + IOHIDManagerSetDeviceMatchingMultiple(myHIDManager, mask); CFRelease(mask); + CFRelease(mask1); + CFRelease(mask0); + IOHIDManagerRegisterDeviceMatchingCallback(myHIDManager, pluggedIn, this); IOHIDManagerRegisterDeviceRemovalCallback(myHIDManager, pluggedOut, this);