Common: don't call OnConfigChanged() unless it has actually changed

DualShock UDP Client is the only place in the code that assumed OnConfigChanged()
is called at least once on startup or it won't load up the setting, so I took care of that
This commit is contained in:
Filoppi 2021-02-26 01:14:00 +02:00
parent 1fe0953bd5
commit e020b2e8ea
3 changed files with 11 additions and 8 deletions

View File

@ -94,8 +94,8 @@ LayerType GetActiveLayerForConfig(const Info<T>& info)
template <typename T>
void Set(LayerType layer, const Info<T>& info, const std::common_type_t<T>& value)
{
GetLayer(layer)->Set(info, value);
OnConfigChanged();
if (GetLayer(layer)->Set(info, value))
OnConfigChanged();
}
template <typename T>

View File

@ -118,24 +118,25 @@ public:
}
template <typename T>
void Set(const Info<T>& config_info, const std::common_type_t<T>& value)
bool Set(const Info<T>& config_info, const std::common_type_t<T>& value)
{
Set(config_info.GetLocation(), value);
return Set(config_info.GetLocation(), value);
}
template <typename T>
void Set(const Location& location, const T& value)
bool Set(const Location& location, const T& value)
{
Set(location, ValueToString(value));
return Set(location, ValueToString(value));
}
void Set(const Location& location, std::string new_value)
bool Set(const Location& location, std::string new_value)
{
const auto iter = m_map.find(location);
if (iter != m_map.end() && iter->second == new_value)
return;
return false;
m_is_dirty = true;
m_map.insert_or_assign(location, std::move(new_value));
return true;
}
void MarkAsDirty() { m_is_dirty = true; }

View File

@ -381,7 +381,9 @@ void Init()
Config::SetBase(Settings::SERVER_PORT, 0);
}
// It would be much better to unbind from this callback on DeInit but it's not possible as of now
Config::AddConfigChangedCallback(ConfigChanged);
ConfigChanged(); // Call it immediately to load settings
}
void PopulateDevices()