InputCommon: fix InputConfig::LoadConfig() not always replacing emu controllers values

If InputConfig::LoadConfig() was called once with a non empty/customized config,
then called again after manually deleting the config (dolphin calls LoadConfig() every time it opens the mapping widget),
the second load would fail to clear the values on any non first EmulatedController and would instead keep the
previous config values despite it being deleted (while it would instead correctly default the first EmulatedController).

This is not a big bug though the code is better now.
This commit is contained in:
Filoppi 2021-11-30 00:33:11 +02:00
parent 57d251c2f0
commit 689545a795
1 changed files with 6 additions and 10 deletions

View File

@ -150,22 +150,18 @@ bool InputConfig::LoadConfig(InputClass type)
} }
else else
{ {
// Only load the default profile for the first controller, // Only load the default profile for the first controller and clear the others,
// otherwise they would all share the same mappings and default device // otherwise they would all share the same mappings on the same (default) device
if (m_controllers.size() > 0) if (m_controllers.size() > 0)
{ {
m_controllers[0]->LoadDefaults(g_controller_interface); m_controllers[0]->LoadDefaults(g_controller_interface);
m_controllers[0]->UpdateReferences(g_controller_interface); m_controllers[0]->UpdateReferences(g_controller_interface);
} }
// Set the "default" default device for all other controllers, or they would end up
// having no default device (which is fine, but might be confusing for some users)
const std::string& default_device_string = g_controller_interface.GetDefaultDeviceString();
if (!default_device_string.empty())
{
for (size_t i = 1; i < m_controllers.size(); ++i) for (size_t i = 1; i < m_controllers.size(); ++i)
{ {
m_controllers[i]->SetDefaultDevice(default_device_string); // Calling the base version just clears all settings without overwriting them with a default
} m_controllers[i]->EmulatedController::LoadDefaults(g_controller_interface);
m_controllers[i]->UpdateReferences(g_controller_interface);
} }
return false; return false;
} }