From 5115c75f8850e9b9cdcbbffadf14c2a034de0a3f Mon Sep 17 00:00:00 2001 From: Connor McLaughlin Date: Sun, 23 Aug 2020 19:38:37 +1000 Subject: [PATCH] CommonHostInterface: Clear input map before changing interface Should hopefully fix the crash when changing controller backends. --- src/frontend-common/common_host_interface.cpp | 16 +++++++++++----- src/frontend-common/common_host_interface.h | 1 + 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/src/frontend-common/common_host_interface.cpp b/src/frontend-common/common_host_interface.cpp index b29b205fb..73b7a87d3 100644 --- a/src/frontend-common/common_host_interface.cpp +++ b/src/frontend-common/common_host_interface.cpp @@ -461,6 +461,7 @@ void CommonHostInterface::UpdateControllerInterface() if (m_controller_interface) { + ClearInputMap(); m_controller_interface->Shutdown(); m_controller_interface.reset(); } @@ -939,15 +940,20 @@ bool CommonHostInterface::HandleHostMouseEvent(HostMouseButton button, bool pres void CommonHostInterface::UpdateInputMap(SettingsInterface& si) { - m_keyboard_input_handlers.clear(); - m_mouse_input_handlers.clear(); - if (m_controller_interface) - m_controller_interface->ClearBindings(); - + ClearInputMap(); UpdateControllerInputMap(si); UpdateHotkeyInputMap(si); } +void CommonHostInterface::ClearInputMap() +{ + m_keyboard_input_handlers.clear(); + m_mouse_input_handlers.clear(); + m_controller_vibration_motors.clear(); + if (m_controller_interface) + m_controller_interface->ClearBindings(); +} + void CommonHostInterface::AddControllerRumble(u32 controller_index, u32 num_motors, ControllerRumbleCallback callback) { ControllerRumbleState rumble; diff --git a/src/frontend-common/common_host_interface.h b/src/frontend-common/common_host_interface.h index 0c110dac5..78007c3f3 100644 --- a/src/frontend-common/common_host_interface.h +++ b/src/frontend-common/common_host_interface.h @@ -217,6 +217,7 @@ protected: bool HandleHostKeyEvent(HostKeyCode code, bool pressed); bool HandleHostMouseEvent(HostMouseButton button, bool pressed); void UpdateInputMap(SettingsInterface& si); + void ClearInputMap(); void AddControllerRumble(u32 controller_index, u32 num_motors, ControllerRumbleCallback callback); void UpdateControllerRumble();