aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins
diff options
context:
space:
mode:
authorBogDan Vatra <bogdan@kde.org>2015-10-15 11:51:12 +0300
committerBogDan Vatra <bogdan@kdab.com>2015-10-15 09:06:10 +0000
commitee6ff7f07325edf5979ac02c6bb6e3f41a8d1068 (patch)
treec3854e7a4d9dd2ba01c93e108ffe89c97d4177e3 /src/plugins
parent61705b375d2e35d4130390a4929a5e3d8572a98c (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.cpp29
-rw-r--r--src/plugins/gamepads/sdl2/qsdlgamepadbackend_p.h2
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;