input: add mutex for raw mice

This commit is contained in:
Megamouse 2024-05-21 23:19:12 +02:00
parent 9c2e6a8f31
commit c78e717ef6
2 changed files with 15 additions and 3 deletions

View File

@ -259,10 +259,15 @@ void raw_mouse_handler::Init(const u32 max_connect)
// Get max device index // Get max device index
u32 now_connect = 0; u32 now_connect = 0;
std::set<u32> connected_mice{}; std::set<u32> connected_mice{};
for (const auto& [handle, mouse] : m_raw_mice)
{ {
now_connect = std::max(now_connect, mouse.index() + 1); std::lock_guard lock(m_raw_mutex);
connected_mice.insert(mouse.index());
for (const auto& [handle, mouse] : m_raw_mice)
{
now_connect = std::max(now_connect, mouse.index() + 1);
connected_mice.insert(mouse.index());
}
} }
for (u32 i = 0; i < max_connect; i++) for (u32 i = 0; i < max_connect; i++)
@ -294,6 +299,8 @@ void raw_mouse_handler::Init(const u32 max_connect)
#ifdef _WIN32 #ifdef _WIN32
void raw_mouse_handler::register_raw_input_devices() void raw_mouse_handler::register_raw_input_devices()
{ {
std::lock_guard lock(m_raw_mutex);
if (m_registered_raw_input_devices || !m_info.max_connect || m_raw_mice.empty()) if (m_registered_raw_input_devices || !m_info.max_connect || m_raw_mice.empty())
{ {
return; return;
@ -331,6 +338,8 @@ void raw_mouse_handler::enumerate_devices(u32 max_connect)
{ {
input_log.notice("raw_mouse_handler: enumerating devices (max_connect=%d)", max_connect); input_log.notice("raw_mouse_handler: enumerating devices (max_connect=%d)", max_connect);
std::lock_guard lock(m_raw_mutex);
m_raw_mice.clear(); m_raw_mice.clear();
if (max_connect == 0) if (max_connect == 0)
@ -448,6 +457,8 @@ void raw_mouse_handler::handle_native_event(const MSG& msg)
{ {
case RIM_TYPEMOUSE: case RIM_TYPEMOUSE:
{ {
std::lock_guard lock(m_raw_mutex);
if (auto it = m_raw_mice.find(raw_input.header.hDevice); it != m_raw_mice.end()) if (auto it = m_raw_mice.find(raw_input.header.hDevice); it != m_raw_mice.end())
{ {
it->second.update_values(raw_input.data.mouse); it->second.update_values(raw_input.data.mouse);

View File

@ -95,6 +95,7 @@ private:
#endif #endif
bool m_ignore_config = false; bool m_ignore_config = false;
std::mutex m_raw_mutex;
std::map<void*, raw_mouse> m_raw_mice; std::map<void*, raw_mouse> m_raw_mice;
std::function<void(const std::string&, s32, bool)> m_mouse_press_callback; std::function<void(const std::string&, s32, bool)> m_mouse_press_callback;
}; };