diff options
Diffstat (limited to 'Source/Core/InputCommon/ControllerInterface/ControllerInterface.cpp')
| -rw-r--r-- | Source/Core/InputCommon/ControllerInterface/ControllerInterface.cpp | 14 |
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)); } |
