summaryrefslogtreecommitdiff
path: root/Source/Core/InputCommon/ControllerInterface/ControllerInterface.cpp
diff options
context:
space:
mode:
authorMichael M <mchtly@gmail.com>2017-11-09 12:14:21 -0800
committerMichael M <mchtly@gmail.com>2017-11-10 13:37:41 -0800
commit7355b5f70d2bdf68c356873f2311025a81c7972a (patch)
tree248e15120149e7077dcdcc3eb1b2acdd2e275815 /Source/Core/InputCommon/ControllerInterface/ControllerInterface.cpp
parent126b7ea01caa6fd4eb884cda053ebb938f156c7f (diff)
ControllerInterface: invoke callbacks in AddDevice/RemoveDevice
Some backends already cause this to happen, so make it consistent across systems.
Diffstat (limited to 'Source/Core/InputCommon/ControllerInterface/ControllerInterface.cpp')
-rw-r--r--Source/Core/InputCommon/ControllerInterface/ControllerInterface.cpp55
1 files changed, 36 insertions, 19 deletions
diff --git a/Source/Core/InputCommon/ControllerInterface/ControllerInterface.cpp b/Source/Core/InputCommon/ControllerInterface/ControllerInterface.cpp
index 1a72fa172c..4f35c4a989 100644
--- a/Source/Core/InputCommon/ControllerInterface/ControllerInterface.cpp
+++ b/Source/Core/InputCommon/ControllerInterface/ControllerInterface.cpp
@@ -2,9 +2,11 @@
// Licensed under GPLv2+
// Refer to the license.txt file included.
+#include "InputCommon/ControllerInterface/ControllerInterface.h"
+
#include <mutex>
-#include "InputCommon/ControllerInterface/ControllerInterface.h"
+#include "Common/Logging/Log.h"
#ifdef CIFACE_USE_XINPUT
#include "InputCommon/ControllerInterface/XInput/XInput.h"
@@ -165,30 +167,45 @@ 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++;
+ 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);
+
+ NOTICE_LOG(SERIALINTERFACE, "Added device: %s", device->GetQualifiedName().c_str());
+ m_devices.emplace_back(std::move(device));
}
- device->SetId(id);
- m_devices.emplace_back(std::move(device));
+ InvokeHotplugCallbacks();
}
void ControllerInterface::RemoveDevice(std::function<bool(const ciface::Core::Device*)> callback)
{
- std::lock_guard<std::mutex> lk(m_devices_mutex);
- m_devices.erase(std::remove_if(m_devices.begin(), m_devices.end(),
- [&callback](const auto& dev) { return callback(dev.get()); }),
- m_devices.end());
+ {
+ std::lock_guard<std::mutex> lk(m_devices_mutex);
+ auto it = std::remove_if(m_devices.begin(), m_devices.end(), [&callback](const auto& dev) {
+ if (callback(dev.get()))
+ {
+ NOTICE_LOG(SERIALINTERFACE, "Removed device: %s", dev->GetQualifiedName().c_str());
+ return true;
+ }
+ return false;
+ });
+ m_devices.erase(it, m_devices.end());
+ }
+ InvokeHotplugCallbacks();
}
//