Merge pull request #9536 from Filoppi/config_fixes

Don't call OnConfigChanged() unless config actually changed
This commit is contained in:
Léo Lam 2021-02-26 01:56:01 +01:00 committed by GitHub
commit 9d0983c9c9
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
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()