ControllerInterface: Add a way to register callbacks

This adds RegisterHotplugCallback() to register a callback which will
be invoked by the input backends' hotplug threads when there is a new
device, so that Core (GCKeyboard, GCPad, Wiimote, Hotkey) can reload
the configuration without adding a dependency to Core from InputCommon.
This commit is contained in:
Léo Lam 2016-06-13 11:11:47 +02:00
parent 2304d76914
commit 0d783f0869
6 changed files with 30 additions and 0 deletions

View File

@ -36,6 +36,7 @@ void Initialize(void* const hwnd)
} }
g_controller_interface.Initialize(hwnd); g_controller_interface.Initialize(hwnd);
g_controller_interface.RegisterHotplugCallback(LoadConfig);
// Load the saved controller config // Load the saved controller config
s_config.LoadConfig(true); s_config.LoadConfig(true);

View File

@ -35,6 +35,7 @@ void Initialize(void* const hwnd)
} }
g_controller_interface.Initialize(hwnd); g_controller_interface.Initialize(hwnd);
g_controller_interface.RegisterHotplugCallback(LoadConfig);
// Load the saved controller config // Load the saved controller config
s_config.LoadConfig(true); s_config.LoadConfig(true);

View File

@ -37,6 +37,7 @@ void Initialize(void* const hwnd, InitializeMode init_mode)
} }
g_controller_interface.Initialize(hwnd); g_controller_interface.Initialize(hwnd);
g_controller_interface.RegisterHotplugCallback(LoadConfig);
s_config.LoadConfig(false); s_config.LoadConfig(false);

View File

@ -186,6 +186,7 @@ void Initialize(void* const hwnd)
s_config.CreateController<HotkeyManager>(); s_config.CreateController<HotkeyManager>();
g_controller_interface.Initialize(hwnd); g_controller_interface.Initialize(hwnd);
g_controller_interface.RegisterHotplugCallback(LoadConfig);
// load the saved controller config // load the saved controller config
s_config.LoadConfig(true); s_config.LoadConfig(true);

View File

@ -172,6 +172,28 @@ void ControllerInterface::UpdateInput()
d->UpdateInput(); d->UpdateInput();
} }
//
// RegisterHotplugCallback
//
// Register a callback to be called from the input backends' hotplug thread
// when there is a new device
//
void ControllerInterface::RegisterHotplugCallback(std::function<void()> callback)
{
m_hotplug_callbacks.emplace_back(std::move(callback));
}
//
// InvokeHotplugCallbacks
//
// Invoke all callbacks that were registered
//
void ControllerInterface::InvokeHotplugCallbacks() const
{
for (const auto& callback : m_hotplug_callbacks)
callback();
}
// //
// InputReference :: State // InputReference :: State
// //

View File

@ -127,7 +127,11 @@ public:
const ciface::Core::DeviceQualifier& default_device) const; const ciface::Core::DeviceQualifier& default_device) const;
void UpdateInput(); void UpdateInput();
void RegisterHotplugCallback(std::function<void(void)> callback);
void InvokeHotplugCallbacks() const;
private: private:
std::vector<std::function<void()>> m_hotplug_callbacks;
bool m_is_init; bool m_is_init;
void* m_hwnd; void* m_hwnd;
}; };