From a71795a91537a267eb0e555816df8a91634967c6 Mon Sep 17 00:00:00 2001 From: NullVector Date: Sun, 11 Oct 2026 22:09:54 +1030 Subject: [PATCH] ui: so refreshing the device combo box no longer wipes the user's mappings back to defaults. (#406) --- .../settings/input_config_player.cpp | 19 +++++++++++++++++-- .../settings/input_config_player.h | 1 + 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/src/nxemu/user_interface/settings/input_config_player.cpp b/src/nxemu/user_interface/settings/input_config_player.cpp index 84433ca2..59b73043 100644 --- a/src/nxemu/user_interface/settings/input_config_player.cpp +++ b/src/nxemu/user_interface/settings/input_config_player.cpp @@ -716,7 +716,10 @@ bool InputConfigPlayer::OnStateChange(SCITER_ELEMENT elem, uint32_t /*eventReaso } else if (m_page.GetElementByID("comboDevices") == elem) { - UpdateMappingWithDefaults(); + if (!m_suppressDeviceAutomap) + { + UpdateMappingWithDefaults(); + } } else if (m_analogMapDeadzoneSlider[0] == elem) { @@ -1046,6 +1049,18 @@ void InputConfigPlayer::UpdateInputDeviceCombobox(void) { return; } + struct SuppressDeviceAutomap + { + bool & flag; + explicit SuppressDeviceAutomap(bool & flag_) : flag(flag_) + { + flag = true; + } + ~SuppressDeviceAutomap() + { + flag = false; + } + } suppress(m_suppressDeviceAutomap); // Skip input device persistence if "Input Devices" is set to "Any". if (m_comboDevices->CurrentIndex() == 0) @@ -1561,7 +1576,7 @@ void InputConfigPlayer::UpdateMappingWithDefaults() for (int i = 0, n = (uint32_t)NativeMotionValues::NumMotions; i < n; i++) { - if (m_motionMap[i].IsValid()) + if (!m_motionMap[i].IsValid()) { continue; } diff --git a/src/nxemu/user_interface/settings/input_config_player.h b/src/nxemu/user_interface/settings/input_config_player.h index 92c0636a..0aa4c63d 100644 --- a/src/nxemu/user_interface/settings/input_config_player.h +++ b/src/nxemu/user_interface/settings/input_config_player.h @@ -130,4 +130,5 @@ private: std::chrono::steady_clock::time_point m_motionUiThrottleLast; NpadStyleIndex m_displayedControllerLayout; bool m_callbackEnabled; + bool m_suppressDeviceAutomap{}; };