summaryrefslogtreecommitdiff
path: root/Source/Core/InputCommon/ControllerInterface/ControllerInterface.cpp
diff options
context:
space:
mode:
authorPierre Bourdon <delroth@gmail.com>2016-07-14 23:13:30 +0200
committerGitHub <noreply@github.com>2016-07-14 23:13:30 +0200
commita9d8a7decd510aecbc0492709ecd347e0f7b56de (patch)
tree63cdec11183166eeb2bb5440537965b19dbe1593 /Source/Core/InputCommon/ControllerInterface/ControllerInterface.cpp
parenta97a546bd667438a98ec2d9c698ab7958280693d (diff)
parent788e19f54d86ba45cdc83d39c0488b17aa1d00dd (diff)
Merge pull request #4009 from leoetlino/common-id-assign
ControllerInterface: Make the ID assigning code common
Diffstat (limited to 'Source/Core/InputCommon/ControllerInterface/ControllerInterface.cpp')
-rw-r--r--Source/Core/InputCommon/ControllerInterface/ControllerInterface.cpp14
1 files changed, 14 insertions, 0 deletions
diff --git a/Source/Core/InputCommon/ControllerInterface/ControllerInterface.cpp b/Source/Core/InputCommon/ControllerInterface/ControllerInterface.cpp
index cbf2c4dfbb..700d390b92 100644
--- a/Source/Core/InputCommon/ControllerInterface/ControllerInterface.cpp
+++ b/Source/Core/InputCommon/ControllerInterface/ControllerInterface.cpp
@@ -143,6 +143,20 @@ void ControllerInterface::Shutdown()
void ControllerInterface::AddDevice(std::shared_ptr<ciface::Core::Device> device)
{
std::lock_guard<std::mutex> lk(m_devices_mutex);
+ // Try to find an ID for this device
+ int id = 0;
+ while (true)
+ {
+ const auto it = std::find_if(m_devices.begin(), m_devices.end(), [&device, &id](const auto& d) {
+ return d->GetSource() == device->GetSource() && d->GetName() == device->GetName() &&
+ d->GetId() == id;
+ });
+ if (it == m_devices.end()) // no device with the same name with this ID, so we can use it
+ break;
+ else
+ id++;
+ }
+ device->SetId(id);
m_devices.emplace_back(std::move(device));
}