aboutsummaryrefslogtreecommitdiffstats
path: root/src/gamepad/qgamepadmanager.cpp
diff options
context:
space:
mode:
authorAndrea Odetti <mariofutire@gmail.com>2017-10-03 18:04:42 +0100
committerAndrea Odetti <mariofutire@gmail.com>2017-10-06 18:23:20 +0000
commit0cea22b644881aaa3edb68267153e334b34d23f7 (patch)
tree18cd7f59993bf7bff9b987356a4a4beb55cbf4f5 /src/gamepad/qgamepadmanager.cpp
parente673d453e7431dc9af5be7394c3cc3cd9da3a9f7 (diff)
Propagate the gamepad name from the backend to QGamepad
Added signals and slots to forward the name to QGamepad. Previously the property name and signal nameChanged in QGamepad were never used. Now the plumbing is done and the 2 linux backends (evdev and SDL2) forward the name. Change-Id: I97261769524ddb23a31789e362e6de7bb30694f3 Reviewed-by: Andy Nichols <andy.nichols@qt.io>
Diffstat (limited to 'src/gamepad/qgamepadmanager.cpp')
-rw-r--r--src/gamepad/qgamepadmanager.cpp27
1 files changed, 24 insertions, 3 deletions
diff --git a/src/gamepad/qgamepadmanager.cpp b/src/gamepad/qgamepadmanager.cpp
index 32d7642..4c86e62 100644
--- a/src/gamepad/qgamepadmanager.cpp
+++ b/src/gamepad/qgamepadmanager.cpp
@@ -60,10 +60,11 @@ public:
void loadBackend();
QGamepadBackend *gamepadBackend;
- QSet<int> connectedGamepads;
+ QMap<int, QString> connectedGamepads;
//private slots
void _q_forwardGamepadConnected(int deviceId);
+ void _q_forwardGamepadNameChanged(int deviceId, const QString &name);
void _q_forwardGamepadDisconnected(int deviceId);
void _q_forwardGamepadAxisEvent(int deviceId, QGamepadManager::GamepadAxis axis, double value);
void _q_forwardGamepadButtonPressEvent(int deviceId, QGamepadManager::GamepadButton button, double value);
@@ -73,11 +74,18 @@ public:
void QGamepadManagerPrivate::_q_forwardGamepadConnected(int deviceId)
{
Q_Q(QGamepadManager);
- connectedGamepads.insert(deviceId);
+ connectedGamepads.insert(deviceId, QString());
emit q->gamepadConnected(deviceId);
emit q->connectedGamepadsChanged();
}
+void QGamepadManagerPrivate::_q_forwardGamepadNameChanged(int deviceId, const QString &name)
+{
+ Q_Q(QGamepadManager);
+ connectedGamepads.insert(deviceId, name);
+ emit q->gamepadNameChanged(deviceId, name);
+}
+
void QGamepadManagerPrivate::_q_forwardGamepadDisconnected(int deviceId)
{
Q_Q(QGamepadManager);
@@ -148,6 +156,7 @@ QGamepadManager::QGamepadManager() :
qRegisterMetaType<QGamepadManager::GamepadAxis>("QGamepadManager::GamepadAxis");
connect(d->gamepadBackend, SIGNAL(gamepadAdded(int)), this, SLOT(_q_forwardGamepadConnected(int)));
+ connect(d->gamepadBackend, SIGNAL(gamepadNamed(int, QString)), this, SLOT(_q_forwardGamepadNameChanged(int, QString)));
connect(d->gamepadBackend, SIGNAL(gamepadRemoved(int)), this, SLOT(_q_forwardGamepadDisconnected(int)));
connect(d->gamepadBackend, SIGNAL(gamepadAxisMoved(int,QGamepadManager::GamepadAxis,double)), this, SLOT(_q_forwardGamepadAxisEvent(int,QGamepadManager::GamepadAxis,double)));
connect(d->gamepadBackend, SIGNAL(gamepadButtonPressed(int,QGamepadManager::GamepadButton,double)), this, SLOT(_q_forwardGamepadButtonPressEvent(int,QGamepadManager::GamepadButton,double)));
@@ -192,13 +201,25 @@ bool QGamepadManager::isGamepadConnected(int deviceId) const
}
/*!
+ Returns the name of the gamepad identified by \a deviceId.
+ If \a deviceId does not identify a connected gamepad, returns an empty string.
+
+ \since 5.11
+*/
+QString QGamepadManager::gamepadName(int deviceId) const
+{
+ Q_D(const QGamepadManager);
+ return d->connectedGamepads.value(deviceId);
+}
+
+/*!
Returns a QList containing the \l {QGamepad::}{deviceId}
values of the connected gamepads.
*/
const QList<int> QGamepadManager::connectedGamepads() const
{
Q_D(const QGamepadManager);
- return d->connectedGamepads.toList();
+ return d->connectedGamepads.keys();
}
/*!