diff options
author | BogDan Vatra <bogdan@kde.org> | 2015-10-15 11:51:12 +0300 |
---|---|---|
committer | BogDan Vatra <bogdan@kdab.com> | 2015-10-15 09:06:10 +0000 |
commit | ee6ff7f07325edf5979ac02c6bb6e3f41a8d1068 (patch) | |
tree | c3854e7a4d9dd2ba01c93e108ffe89c97d4177e3 /src/plugins | |
parent | 61705b375d2e35d4130390a4929a5e3d8572a98c (diff) |
SDL2: Add all connected controllers at startup
Change-Id: I9555f83f01595ccc74cb5fd9f5e7b6184dd8bcf3
Reviewed-by: Andy Nichols <andy.nichols@theqtcompany.com>
Diffstat (limited to 'src/plugins')
-rw-r--r-- | src/plugins/gamepads/sdl2/qsdlgamepadbackend.cpp | 29 | ||||
-rw-r--r-- | src/plugins/gamepads/sdl2/qsdlgamepadbackend_p.h | 2 |
2 files changed, 22 insertions, 9 deletions
diff --git a/src/plugins/gamepads/sdl2/qsdlgamepadbackend.cpp b/src/plugins/gamepads/sdl2/qsdlgamepadbackend.cpp index 791e383..963676a 100644 --- a/src/plugins/gamepads/sdl2/qsdlgamepadbackend.cpp +++ b/src/plugins/gamepads/sdl2/qsdlgamepadbackend.cpp @@ -103,14 +103,7 @@ void QSdlGamepadBackend::pumpSdlEventLoop() } else if (event.type == SDL_CONTROLLERDEVICEADDED) { SDL_ControllerDeviceEvent deviceEvent = event.cdevice; //qDebug() << deviceEvent.timestamp << "Controller Added: " << deviceEvent.which; - SDL_GameController *controller = SDL_GameControllerOpen(deviceEvent.which); - if (controller) { - m_indexForController.insert(deviceEvent.which, controller); - int instanceID = SDL_JoystickInstanceID(SDL_GameControllerGetJoystick(controller)); - m_instanceIdForIndex.insert(instanceID, deviceEvent.which); - //qDebug() << "Controller " << deviceEvent.which << " added with instanceId: " << instanceID; - emit gamepadAdded(deviceEvent.which); - } + addController(deviceEvent.which); } else if (event.type == SDL_CONTROLLERDEVICEREMOVED) { SDL_ControllerDeviceEvent deviceEvent = event.cdevice; @@ -136,6 +129,9 @@ bool QSdlGamepadBackend::start() } m_eventLoopTimer.start(16); + for (int i = 0; i < SDL_NumJoysticks() ; i++) + addController(i); + return true; } @@ -183,4 +179,21 @@ QGamepadManager::GamepadButton QSdlGamepadBackend::translateButton(int button) } } +void QSdlGamepadBackend::addController(int index) +{ + char GUID[100]; + SDL_JoystickGetGUIDString(SDL_JoystickGetDeviceGUID(index), GUID, 100); + if (!SDL_IsGameController(index)) + return; + + SDL_GameController *controller = SDL_GameControllerOpen(index); + if (controller) { + m_indexForController.insert(index, controller); + int instanceID = SDL_JoystickInstanceID(SDL_GameControllerGetJoystick(controller)); + m_instanceIdForIndex.insert(instanceID, index); + //qDebug() << "Controller " << index << " added with instanceId: " << instanceID; + emit gamepadAdded(index); + } +} + QT_END_NAMESPACE diff --git a/src/plugins/gamepads/sdl2/qsdlgamepadbackend_p.h b/src/plugins/gamepads/sdl2/qsdlgamepadbackend_p.h index 44e81dc..5991ac1 100644 --- a/src/plugins/gamepads/sdl2/qsdlgamepadbackend_p.h +++ b/src/plugins/gamepads/sdl2/qsdlgamepadbackend_p.h @@ -63,7 +63,7 @@ protected: private: QGamepadManager::GamepadButton translateButton(int button); - + void addController(int index); QTimer m_eventLoopTimer; QMap<int, SDL_GameController*> m_indexForController; QMap<int, int> m_instanceIdForIndex; |