diff options
Diffstat (limited to 'src/input_common/input_engine.cpp')
| -rw-r--r-- | src/input_common/input_engine.cpp | 135 |
1 files changed, 104 insertions, 31 deletions
diff --git a/src/input_common/input_engine.cpp b/src/input_common/input_engine.cpp index 65ae1b848..61cfd0911 100644 --- a/src/input_common/input_engine.cpp +++ b/src/input_common/input_engine.cpp | |||
| @@ -1,45 +1,43 @@ | |||
| 1 | // Copyright 2021 yuzu Emulator Project | 1 | // SPDX-FileCopyrightText: Copyright 2021 yuzu Emulator Project |
| 2 | // Licensed under GPLv2 or any later version | 2 | // SPDX-License-Identifier: GPL-2.0-or-later |
| 3 | // Refer to the license.txt file included | ||
| 4 | 3 | ||
| 5 | #include "common/logging/log.h" | 4 | #include "common/logging/log.h" |
| 6 | #include "common/param_package.h" | ||
| 7 | #include "input_common/input_engine.h" | 5 | #include "input_common/input_engine.h" |
| 8 | 6 | ||
| 9 | namespace InputCommon { | 7 | namespace InputCommon { |
| 10 | 8 | ||
| 11 | void InputEngine::PreSetController(const PadIdentifier& identifier) { | 9 | void InputEngine::PreSetController(const PadIdentifier& identifier) { |
| 12 | std::lock_guard lock{mutex}; | 10 | std::scoped_lock lock{mutex}; |
| 13 | controller_list.try_emplace(identifier); | 11 | controller_list.try_emplace(identifier); |
| 14 | } | 12 | } |
| 15 | 13 | ||
| 16 | void InputEngine::PreSetButton(const PadIdentifier& identifier, int button) { | 14 | void InputEngine::PreSetButton(const PadIdentifier& identifier, int button) { |
| 17 | std::lock_guard lock{mutex}; | 15 | std::scoped_lock lock{mutex}; |
| 18 | ControllerData& controller = controller_list.at(identifier); | 16 | ControllerData& controller = controller_list.at(identifier); |
| 19 | controller.buttons.try_emplace(button, false); | 17 | controller.buttons.try_emplace(button, false); |
| 20 | } | 18 | } |
| 21 | 19 | ||
| 22 | void InputEngine::PreSetHatButton(const PadIdentifier& identifier, int button) { | 20 | void InputEngine::PreSetHatButton(const PadIdentifier& identifier, int button) { |
| 23 | std::lock_guard lock{mutex}; | 21 | std::scoped_lock lock{mutex}; |
| 24 | ControllerData& controller = controller_list.at(identifier); | 22 | ControllerData& controller = controller_list.at(identifier); |
| 25 | controller.hat_buttons.try_emplace(button, u8{0}); | 23 | controller.hat_buttons.try_emplace(button, u8{0}); |
| 26 | } | 24 | } |
| 27 | 25 | ||
| 28 | void InputEngine::PreSetAxis(const PadIdentifier& identifier, int axis) { | 26 | void InputEngine::PreSetAxis(const PadIdentifier& identifier, int axis) { |
| 29 | std::lock_guard lock{mutex}; | 27 | std::scoped_lock lock{mutex}; |
| 30 | ControllerData& controller = controller_list.at(identifier); | 28 | ControllerData& controller = controller_list.at(identifier); |
| 31 | controller.axes.try_emplace(axis, 0.0f); | 29 | controller.axes.try_emplace(axis, 0.0f); |
| 32 | } | 30 | } |
| 33 | 31 | ||
| 34 | void InputEngine::PreSetMotion(const PadIdentifier& identifier, int motion) { | 32 | void InputEngine::PreSetMotion(const PadIdentifier& identifier, int motion) { |
| 35 | std::lock_guard lock{mutex}; | 33 | std::scoped_lock lock{mutex}; |
| 36 | ControllerData& controller = controller_list.at(identifier); | 34 | ControllerData& controller = controller_list.at(identifier); |
| 37 | controller.motions.try_emplace(motion); | 35 | controller.motions.try_emplace(motion); |
| 38 | } | 36 | } |
| 39 | 37 | ||
| 40 | void InputEngine::SetButton(const PadIdentifier& identifier, int button, bool value) { | 38 | void InputEngine::SetButton(const PadIdentifier& identifier, int button, bool value) { |
| 41 | { | 39 | { |
| 42 | std::lock_guard lock{mutex}; | 40 | std::scoped_lock lock{mutex}; |
| 43 | ControllerData& controller = controller_list.at(identifier); | 41 | ControllerData& controller = controller_list.at(identifier); |
| 44 | if (!configuring) { | 42 | if (!configuring) { |
| 45 | controller.buttons.insert_or_assign(button, value); | 43 | controller.buttons.insert_or_assign(button, value); |
| @@ -50,7 +48,7 @@ void InputEngine::SetButton(const PadIdentifier& identifier, int button, bool va | |||
| 50 | 48 | ||
| 51 | void InputEngine::SetHatButton(const PadIdentifier& identifier, int button, u8 value) { | 49 | void InputEngine::SetHatButton(const PadIdentifier& identifier, int button, u8 value) { |
| 52 | { | 50 | { |
| 53 | std::lock_guard lock{mutex}; | 51 | std::scoped_lock lock{mutex}; |
| 54 | ControllerData& controller = controller_list.at(identifier); | 52 | ControllerData& controller = controller_list.at(identifier); |
| 55 | if (!configuring) { | 53 | if (!configuring) { |
| 56 | controller.hat_buttons.insert_or_assign(button, value); | 54 | controller.hat_buttons.insert_or_assign(button, value); |
| @@ -61,7 +59,7 @@ void InputEngine::SetHatButton(const PadIdentifier& identifier, int button, u8 v | |||
| 61 | 59 | ||
| 62 | void InputEngine::SetAxis(const PadIdentifier& identifier, int axis, f32 value) { | 60 | void InputEngine::SetAxis(const PadIdentifier& identifier, int axis, f32 value) { |
| 63 | { | 61 | { |
| 64 | std::lock_guard lock{mutex}; | 62 | std::scoped_lock lock{mutex}; |
| 65 | ControllerData& controller = controller_list.at(identifier); | 63 | ControllerData& controller = controller_list.at(identifier); |
| 66 | if (!configuring) { | 64 | if (!configuring) { |
| 67 | controller.axes.insert_or_assign(axis, value); | 65 | controller.axes.insert_or_assign(axis, value); |
| @@ -70,9 +68,9 @@ void InputEngine::SetAxis(const PadIdentifier& identifier, int axis, f32 value) | |||
| 70 | TriggerOnAxisChange(identifier, axis, value); | 68 | TriggerOnAxisChange(identifier, axis, value); |
| 71 | } | 69 | } |
| 72 | 70 | ||
| 73 | void InputEngine::SetBattery(const PadIdentifier& identifier, BatteryLevel value) { | 71 | void InputEngine::SetBattery(const PadIdentifier& identifier, Common::Input::BatteryLevel value) { |
| 74 | { | 72 | { |
| 75 | std::lock_guard lock{mutex}; | 73 | std::scoped_lock lock{mutex}; |
| 76 | ControllerData& controller = controller_list.at(identifier); | 74 | ControllerData& controller = controller_list.at(identifier); |
| 77 | if (!configuring) { | 75 | if (!configuring) { |
| 78 | controller.battery = value; | 76 | controller.battery = value; |
| @@ -83,7 +81,7 @@ void InputEngine::SetBattery(const PadIdentifier& identifier, BatteryLevel value | |||
| 83 | 81 | ||
| 84 | void InputEngine::SetMotion(const PadIdentifier& identifier, int motion, const BasicMotion& value) { | 82 | void InputEngine::SetMotion(const PadIdentifier& identifier, int motion, const BasicMotion& value) { |
| 85 | { | 83 | { |
| 86 | std::lock_guard lock{mutex}; | 84 | std::scoped_lock lock{mutex}; |
| 87 | ControllerData& controller = controller_list.at(identifier); | 85 | ControllerData& controller = controller_list.at(identifier); |
| 88 | if (!configuring) { | 86 | if (!configuring) { |
| 89 | controller.motions.insert_or_assign(motion, value); | 87 | controller.motions.insert_or_assign(motion, value); |
| @@ -92,8 +90,31 @@ void InputEngine::SetMotion(const PadIdentifier& identifier, int motion, const B | |||
| 92 | TriggerOnMotionChange(identifier, motion, value); | 90 | TriggerOnMotionChange(identifier, motion, value); |
| 93 | } | 91 | } |
| 94 | 92 | ||
| 93 | void InputEngine::SetCamera(const PadIdentifier& identifier, | ||
| 94 | const Common::Input::CameraStatus& value) { | ||
| 95 | { | ||
| 96 | std::scoped_lock lock{mutex}; | ||
| 97 | ControllerData& controller = controller_list.at(identifier); | ||
| 98 | if (!configuring) { | ||
| 99 | controller.camera = value; | ||
| 100 | } | ||
| 101 | } | ||
| 102 | TriggerOnCameraChange(identifier, value); | ||
| 103 | } | ||
| 104 | |||
| 105 | void InputEngine::SetNfc(const PadIdentifier& identifier, const Common::Input::NfcStatus& value) { | ||
| 106 | { | ||
| 107 | std::scoped_lock lock{mutex}; | ||
| 108 | ControllerData& controller = controller_list.at(identifier); | ||
| 109 | if (!configuring) { | ||
| 110 | controller.nfc = value; | ||
| 111 | } | ||
| 112 | } | ||
| 113 | TriggerOnNfcChange(identifier, value); | ||
| 114 | } | ||
| 115 | |||
| 95 | bool InputEngine::GetButton(const PadIdentifier& identifier, int button) const { | 116 | bool InputEngine::GetButton(const PadIdentifier& identifier, int button) const { |
| 96 | std::lock_guard lock{mutex}; | 117 | std::scoped_lock lock{mutex}; |
| 97 | const auto controller_iter = controller_list.find(identifier); | 118 | const auto controller_iter = controller_list.find(identifier); |
| 98 | if (controller_iter == controller_list.cend()) { | 119 | if (controller_iter == controller_list.cend()) { |
| 99 | LOG_ERROR(Input, "Invalid identifier guid={}, pad={}, port={}", identifier.guid.RawString(), | 120 | LOG_ERROR(Input, "Invalid identifier guid={}, pad={}, port={}", identifier.guid.RawString(), |
| @@ -110,7 +131,7 @@ bool InputEngine::GetButton(const PadIdentifier& identifier, int button) const { | |||
| 110 | } | 131 | } |
| 111 | 132 | ||
| 112 | bool InputEngine::GetHatButton(const PadIdentifier& identifier, int button, u8 direction) const { | 133 | bool InputEngine::GetHatButton(const PadIdentifier& identifier, int button, u8 direction) const { |
| 113 | std::lock_guard lock{mutex}; | 134 | std::scoped_lock lock{mutex}; |
| 114 | const auto controller_iter = controller_list.find(identifier); | 135 | const auto controller_iter = controller_list.find(identifier); |
| 115 | if (controller_iter == controller_list.cend()) { | 136 | if (controller_iter == controller_list.cend()) { |
| 116 | LOG_ERROR(Input, "Invalid identifier guid={}, pad={}, port={}", identifier.guid.RawString(), | 137 | LOG_ERROR(Input, "Invalid identifier guid={}, pad={}, port={}", identifier.guid.RawString(), |
| @@ -127,7 +148,7 @@ bool InputEngine::GetHatButton(const PadIdentifier& identifier, int button, u8 d | |||
| 127 | } | 148 | } |
| 128 | 149 | ||
| 129 | f32 InputEngine::GetAxis(const PadIdentifier& identifier, int axis) const { | 150 | f32 InputEngine::GetAxis(const PadIdentifier& identifier, int axis) const { |
| 130 | std::lock_guard lock{mutex}; | 151 | std::scoped_lock lock{mutex}; |
| 131 | const auto controller_iter = controller_list.find(identifier); | 152 | const auto controller_iter = controller_list.find(identifier); |
| 132 | if (controller_iter == controller_list.cend()) { | 153 | if (controller_iter == controller_list.cend()) { |
| 133 | LOG_ERROR(Input, "Invalid identifier guid={}, pad={}, port={}", identifier.guid.RawString(), | 154 | LOG_ERROR(Input, "Invalid identifier guid={}, pad={}, port={}", identifier.guid.RawString(), |
| @@ -143,20 +164,20 @@ f32 InputEngine::GetAxis(const PadIdentifier& identifier, int axis) const { | |||
| 143 | return axis_iter->second; | 164 | return axis_iter->second; |
| 144 | } | 165 | } |
| 145 | 166 | ||
| 146 | BatteryLevel InputEngine::GetBattery(const PadIdentifier& identifier) const { | 167 | Common::Input::BatteryLevel InputEngine::GetBattery(const PadIdentifier& identifier) const { |
| 147 | std::lock_guard lock{mutex}; | 168 | std::scoped_lock lock{mutex}; |
| 148 | const auto controller_iter = controller_list.find(identifier); | 169 | const auto controller_iter = controller_list.find(identifier); |
| 149 | if (controller_iter == controller_list.cend()) { | 170 | if (controller_iter == controller_list.cend()) { |
| 150 | LOG_ERROR(Input, "Invalid identifier guid={}, pad={}, port={}", identifier.guid.RawString(), | 171 | LOG_ERROR(Input, "Invalid identifier guid={}, pad={}, port={}", identifier.guid.RawString(), |
| 151 | identifier.pad, identifier.port); | 172 | identifier.pad, identifier.port); |
| 152 | return BatteryLevel::Charging; | 173 | return Common::Input::BatteryLevel::Charging; |
| 153 | } | 174 | } |
| 154 | const ControllerData& controller = controller_iter->second; | 175 | const ControllerData& controller = controller_iter->second; |
| 155 | return controller.battery; | 176 | return controller.battery; |
| 156 | } | 177 | } |
| 157 | 178 | ||
| 158 | BasicMotion InputEngine::GetMotion(const PadIdentifier& identifier, int motion) const { | 179 | BasicMotion InputEngine::GetMotion(const PadIdentifier& identifier, int motion) const { |
| 159 | std::lock_guard lock{mutex}; | 180 | std::scoped_lock lock{mutex}; |
| 160 | const auto controller_iter = controller_list.find(identifier); | 181 | const auto controller_iter = controller_list.find(identifier); |
| 161 | if (controller_iter == controller_list.cend()) { | 182 | if (controller_iter == controller_list.cend()) { |
| 162 | LOG_ERROR(Input, "Invalid identifier guid={}, pad={}, port={}", identifier.guid.RawString(), | 183 | LOG_ERROR(Input, "Invalid identifier guid={}, pad={}, port={}", identifier.guid.RawString(), |
| @@ -167,6 +188,30 @@ BasicMotion InputEngine::GetMotion(const PadIdentifier& identifier, int motion) | |||
| 167 | return controller.motions.at(motion); | 188 | return controller.motions.at(motion); |
| 168 | } | 189 | } |
| 169 | 190 | ||
| 191 | Common::Input::CameraStatus InputEngine::GetCamera(const PadIdentifier& identifier) const { | ||
| 192 | std::scoped_lock lock{mutex}; | ||
| 193 | const auto controller_iter = controller_list.find(identifier); | ||
| 194 | if (controller_iter == controller_list.cend()) { | ||
| 195 | LOG_ERROR(Input, "Invalid identifier guid={}, pad={}, port={}", identifier.guid.RawString(), | ||
| 196 | identifier.pad, identifier.port); | ||
| 197 | return {}; | ||
| 198 | } | ||
| 199 | const ControllerData& controller = controller_iter->second; | ||
| 200 | return controller.camera; | ||
| 201 | } | ||
| 202 | |||
| 203 | Common::Input::NfcStatus InputEngine::GetNfc(const PadIdentifier& identifier) const { | ||
| 204 | std::scoped_lock lock{mutex}; | ||
| 205 | const auto controller_iter = controller_list.find(identifier); | ||
| 206 | if (controller_iter == controller_list.cend()) { | ||
| 207 | LOG_ERROR(Input, "Invalid identifier guid={}, pad={}, port={}", identifier.guid.RawString(), | ||
| 208 | identifier.pad, identifier.port); | ||
| 209 | return {}; | ||
| 210 | } | ||
| 211 | const ControllerData& controller = controller_iter->second; | ||
| 212 | return controller.nfc; | ||
| 213 | } | ||
| 214 | |||
| 170 | void InputEngine::ResetButtonState() { | 215 | void InputEngine::ResetButtonState() { |
| 171 | for (const auto& controller : controller_list) { | 216 | for (const auto& controller : controller_list) { |
| 172 | for (const auto& button : controller.second.buttons) { | 217 | for (const auto& button : controller.second.buttons) { |
| @@ -187,7 +232,7 @@ void InputEngine::ResetAnalogState() { | |||
| 187 | } | 232 | } |
| 188 | 233 | ||
| 189 | void InputEngine::TriggerOnButtonChange(const PadIdentifier& identifier, int button, bool value) { | 234 | void InputEngine::TriggerOnButtonChange(const PadIdentifier& identifier, int button, bool value) { |
| 190 | std::lock_guard lock{mutex_callback}; | 235 | std::scoped_lock lock{mutex_callback}; |
| 191 | for (const auto& poller_pair : callback_list) { | 236 | for (const auto& poller_pair : callback_list) { |
| 192 | const InputIdentifier& poller = poller_pair.second; | 237 | const InputIdentifier& poller = poller_pair.second; |
| 193 | if (!IsInputIdentifierEqual(poller, identifier, EngineInputType::Button, button)) { | 238 | if (!IsInputIdentifierEqual(poller, identifier, EngineInputType::Button, button)) { |
| @@ -215,7 +260,7 @@ void InputEngine::TriggerOnButtonChange(const PadIdentifier& identifier, int but | |||
| 215 | } | 260 | } |
| 216 | 261 | ||
| 217 | void InputEngine::TriggerOnHatButtonChange(const PadIdentifier& identifier, int button, u8 value) { | 262 | void InputEngine::TriggerOnHatButtonChange(const PadIdentifier& identifier, int button, u8 value) { |
| 218 | std::lock_guard lock{mutex_callback}; | 263 | std::scoped_lock lock{mutex_callback}; |
| 219 | for (const auto& poller_pair : callback_list) { | 264 | for (const auto& poller_pair : callback_list) { |
| 220 | const InputIdentifier& poller = poller_pair.second; | 265 | const InputIdentifier& poller = poller_pair.second; |
| 221 | if (!IsInputIdentifierEqual(poller, identifier, EngineInputType::HatButton, button)) { | 266 | if (!IsInputIdentifierEqual(poller, identifier, EngineInputType::HatButton, button)) { |
| @@ -244,7 +289,7 @@ void InputEngine::TriggerOnHatButtonChange(const PadIdentifier& identifier, int | |||
| 244 | } | 289 | } |
| 245 | 290 | ||
| 246 | void InputEngine::TriggerOnAxisChange(const PadIdentifier& identifier, int axis, f32 value) { | 291 | void InputEngine::TriggerOnAxisChange(const PadIdentifier& identifier, int axis, f32 value) { |
| 247 | std::lock_guard lock{mutex_callback}; | 292 | std::scoped_lock lock{mutex_callback}; |
| 248 | for (const auto& poller_pair : callback_list) { | 293 | for (const auto& poller_pair : callback_list) { |
| 249 | const InputIdentifier& poller = poller_pair.second; | 294 | const InputIdentifier& poller = poller_pair.second; |
| 250 | if (!IsInputIdentifierEqual(poller, identifier, EngineInputType::Analog, axis)) { | 295 | if (!IsInputIdentifierEqual(poller, identifier, EngineInputType::Analog, axis)) { |
| @@ -270,8 +315,8 @@ void InputEngine::TriggerOnAxisChange(const PadIdentifier& identifier, int axis, | |||
| 270 | } | 315 | } |
| 271 | 316 | ||
| 272 | void InputEngine::TriggerOnBatteryChange(const PadIdentifier& identifier, | 317 | void InputEngine::TriggerOnBatteryChange(const PadIdentifier& identifier, |
| 273 | [[maybe_unused]] BatteryLevel value) { | 318 | [[maybe_unused]] Common::Input::BatteryLevel value) { |
| 274 | std::lock_guard lock{mutex_callback}; | 319 | std::scoped_lock lock{mutex_callback}; |
| 275 | for (const auto& poller_pair : callback_list) { | 320 | for (const auto& poller_pair : callback_list) { |
| 276 | const InputIdentifier& poller = poller_pair.second; | 321 | const InputIdentifier& poller = poller_pair.second; |
| 277 | if (!IsInputIdentifierEqual(poller, identifier, EngineInputType::Battery, 0)) { | 322 | if (!IsInputIdentifierEqual(poller, identifier, EngineInputType::Battery, 0)) { |
| @@ -285,7 +330,7 @@ void InputEngine::TriggerOnBatteryChange(const PadIdentifier& identifier, | |||
| 285 | 330 | ||
| 286 | void InputEngine::TriggerOnMotionChange(const PadIdentifier& identifier, int motion, | 331 | void InputEngine::TriggerOnMotionChange(const PadIdentifier& identifier, int motion, |
| 287 | const BasicMotion& value) { | 332 | const BasicMotion& value) { |
| 288 | std::lock_guard lock{mutex_callback}; | 333 | std::scoped_lock lock{mutex_callback}; |
| 289 | for (const auto& poller_pair : callback_list) { | 334 | for (const auto& poller_pair : callback_list) { |
| 290 | const InputIdentifier& poller = poller_pair.second; | 335 | const InputIdentifier& poller = poller_pair.second; |
| 291 | if (!IsInputIdentifierEqual(poller, identifier, EngineInputType::Motion, motion)) { | 336 | if (!IsInputIdentifierEqual(poller, identifier, EngineInputType::Motion, motion)) { |
| @@ -319,6 +364,34 @@ void InputEngine::TriggerOnMotionChange(const PadIdentifier& identifier, int mot | |||
| 319 | }); | 364 | }); |
| 320 | } | 365 | } |
| 321 | 366 | ||
| 367 | void InputEngine::TriggerOnCameraChange(const PadIdentifier& identifier, | ||
| 368 | [[maybe_unused]] const Common::Input::CameraStatus& value) { | ||
| 369 | std::scoped_lock lock{mutex_callback}; | ||
| 370 | for (const auto& poller_pair : callback_list) { | ||
| 371 | const InputIdentifier& poller = poller_pair.second; | ||
| 372 | if (!IsInputIdentifierEqual(poller, identifier, EngineInputType::Camera, 0)) { | ||
| 373 | continue; | ||
| 374 | } | ||
| 375 | if (poller.callback.on_change) { | ||
| 376 | poller.callback.on_change(); | ||
| 377 | } | ||
| 378 | } | ||
| 379 | } | ||
| 380 | |||
| 381 | void InputEngine::TriggerOnNfcChange(const PadIdentifier& identifier, | ||
| 382 | [[maybe_unused]] const Common::Input::NfcStatus& value) { | ||
| 383 | std::scoped_lock lock{mutex_callback}; | ||
| 384 | for (const auto& poller_pair : callback_list) { | ||
| 385 | const InputIdentifier& poller = poller_pair.second; | ||
| 386 | if (!IsInputIdentifierEqual(poller, identifier, EngineInputType::Nfc, 0)) { | ||
| 387 | continue; | ||
| 388 | } | ||
| 389 | if (poller.callback.on_change) { | ||
| 390 | poller.callback.on_change(); | ||
| 391 | } | ||
| 392 | } | ||
| 393 | } | ||
| 394 | |||
| 322 | bool InputEngine::IsInputIdentifierEqual(const InputIdentifier& input_identifier, | 395 | bool InputEngine::IsInputIdentifierEqual(const InputIdentifier& input_identifier, |
| 323 | const PadIdentifier& identifier, EngineInputType type, | 396 | const PadIdentifier& identifier, EngineInputType type, |
| 324 | int index) const { | 397 | int index) const { |
| @@ -347,18 +420,18 @@ const std::string& InputEngine::GetEngineName() const { | |||
| 347 | } | 420 | } |
| 348 | 421 | ||
| 349 | int InputEngine::SetCallback(InputIdentifier input_identifier) { | 422 | int InputEngine::SetCallback(InputIdentifier input_identifier) { |
| 350 | std::lock_guard lock{mutex_callback}; | 423 | std::scoped_lock lock{mutex_callback}; |
| 351 | callback_list.insert_or_assign(last_callback_key, std::move(input_identifier)); | 424 | callback_list.insert_or_assign(last_callback_key, std::move(input_identifier)); |
| 352 | return last_callback_key++; | 425 | return last_callback_key++; |
| 353 | } | 426 | } |
| 354 | 427 | ||
| 355 | void InputEngine::SetMappingCallback(MappingCallback callback) { | 428 | void InputEngine::SetMappingCallback(MappingCallback callback) { |
| 356 | std::lock_guard lock{mutex_callback}; | 429 | std::scoped_lock lock{mutex_callback}; |
| 357 | mapping_callback = std::move(callback); | 430 | mapping_callback = std::move(callback); |
| 358 | } | 431 | } |
| 359 | 432 | ||
| 360 | void InputEngine::DeleteCallback(int key) { | 433 | void InputEngine::DeleteCallback(int key) { |
| 361 | std::lock_guard lock{mutex_callback}; | 434 | std::scoped_lock lock{mutex_callback}; |
| 362 | const auto& iterator = callback_list.find(key); | 435 | const auto& iterator = callback_list.find(key); |
| 363 | if (iterator == callback_list.end()) { | 436 | if (iterator == callback_list.end()) { |
| 364 | LOG_ERROR(Input, "Tried to delete non-existent callback {}", key); | 437 | LOG_ERROR(Input, "Tried to delete non-existent callback {}", key); |