From b0c846388e6129e7bd32d3ed28b06a625acdbf25 Mon Sep 17 00:00:00 2001 From: Connor McLaughlin Date: Sun, 16 Feb 2020 00:14:42 +0900 Subject: [PATCH] SDL: Only save settings when changes have been made --- src/duckstation-sdl/sdl_settings_interface.cpp | 17 ++++++++++++++--- src/duckstation-sdl/sdl_settings_interface.h | 1 + 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/src/duckstation-sdl/sdl_settings_interface.cpp b/src/duckstation-sdl/sdl_settings_interface.cpp index 2d0ad2d6a..90292a920 100644 --- a/src/duckstation-sdl/sdl_settings_interface.cpp +++ b/src/duckstation-sdl/sdl_settings_interface.cpp @@ -12,9 +12,12 @@ SDLSettingsInterface::SDLSettingsInterface(const char* filename) : m_filename(fi SDLSettingsInterface::~SDLSettingsInterface() { - SI_Error err = m_ini.SaveFile(m_filename.c_str(), false); - if (err != SI_OK) - Log_WarningPrintf("Failed to save settings to '%s'.", m_filename.c_str()); + if (m_dirty) + { + SI_Error err = m_ini.SaveFile(m_filename.c_str(), false); + if (err != SI_OK) + Log_WarningPrintf("Failed to save settings to '%s'.", m_filename.c_str()); + } } int SDLSettingsInterface::GetIntValue(const char* section, const char* key, int default_value /*= 0*/) @@ -40,26 +43,31 @@ std::string SDLSettingsInterface::GetStringValue(const char* section, const char void SDLSettingsInterface::SetIntValue(const char* section, const char* key, int value) { + m_dirty = true; m_ini.SetLongValue(section, key, static_cast(value), nullptr, false, true); } void SDLSettingsInterface::SetFloatValue(const char* section, const char* key, float value) { + m_dirty = true; m_ini.SetDoubleValue(section, key, static_cast(value), nullptr, true); } void SDLSettingsInterface::SetBoolValue(const char* section, const char* key, bool value) { + m_dirty = true; m_ini.SetBoolValue(section, key, value, nullptr, true); } void SDLSettingsInterface::SetStringValue(const char* section, const char* key, const char* value) { + m_dirty = true; m_ini.SetValue(section, key, value, nullptr, true); } void SDLSettingsInterface::DeleteValue(const char* section, const char* key) { + m_dirty = true; m_ini.Delete(section, key); } @@ -79,6 +87,7 @@ std::vector SDLSettingsInterface::GetStringList(const char* section void SDLSettingsInterface::SetStringList(const char* section, const char* key, const std::vector& items) { + m_dirty = true; m_ini.Delete(section, key); for (const std::string_view& sv : items) @@ -87,6 +96,7 @@ void SDLSettingsInterface::SetStringList(const char* section, const char* key, bool SDLSettingsInterface::RemoveFromStringList(const char* section, const char* key, const char* item) { + m_dirty = true; return m_ini.DeleteValue(section, key, item, true); } @@ -100,6 +110,7 @@ bool SDLSettingsInterface::AddToStringList(const char* section, const char* key, return false; } + m_dirty = true; m_ini.SetValue(section, key, item, nullptr, false); return true; } diff --git a/src/duckstation-sdl/sdl_settings_interface.h b/src/duckstation-sdl/sdl_settings_interface.h index 64159f918..3a51ebc55 100644 --- a/src/duckstation-sdl/sdl_settings_interface.h +++ b/src/duckstation-sdl/sdl_settings_interface.h @@ -28,4 +28,5 @@ public: private: std::string m_filename; CSimpleIniA m_ini; + bool m_dirty = false; };