From 05c8063ac131ef5087f645c57b649157099f786b Mon Sep 17 00:00:00 2001
From: lat9nq <22451773+lat9nq@users.noreply.github.com>
Date: Sat, 29 Jul 2023 13:23:06 -0400
Subject: [PATCH] config(qt): Fix generic read setting

Previously was not respecting whether the setting was default.
---
 src/yuzu/configuration/config.cpp | 18 +++++++++++-------
 1 file changed, 11 insertions(+), 7 deletions(-)

diff --git a/src/yuzu/configuration/config.cpp b/src/yuzu/configuration/config.cpp
index f2ef34cbca..7857167359 100644
--- a/src/yuzu/configuration/config.cpp
+++ b/src/yuzu/configuration/config.cpp
@@ -1256,23 +1256,27 @@ void Config::WriteCategory(Settings::Category category) {
 }
 
 void Config::ReadSettingGeneric(Settings::BasicSetting* const setting) {
-    if (!setting->Save()) {
+    if (!setting->Save() || (!setting->Switchable() && !global)) {
         return;
     }
     const QString name = QString::fromStdString(setting->GetLabel());
     const auto default_value =
         QVariant::fromValue<QString>(QString::fromStdString(setting->DefaultToString()));
 
-    if (setting->Switchable()) {
-        const bool use_global =
-            qt_config->value(name + QStringLiteral("/use_global"), true).value<bool>();
+    bool use_global = true;
+    if (setting->Switchable() && !global) {
+        use_global = qt_config->value(name + QStringLiteral("/use_global"), true).value<bool>();
         setting->SetGlobal(use_global);
+    }
 
-        if (global || !use_global) {
+    if (global || !use_global) {
+        const bool is_default = ReadSetting(name + QStringLiteral("/default"), true).value<bool>();
+        if (!is_default) {
             setting->LoadString(ReadSetting(name, default_value).value<QString>().toStdString());
+        } else {
+            // Empty string resets the Setting to default
+            setting->LoadString("");
         }
-    } else if (global) {
-        setting->LoadString(ReadSetting(name, default_value).value<QString>().toStdString());
     }
 }