From 812c4fa059263c042a26562fbcca782a7a0a6167 Mon Sep 17 00:00:00 2001
From: Vitor K <vitor-kiguchi@hotmail.com>
Date: Sat, 17 Dec 2022 12:04:31 -0300
Subject: [PATCH] Per-Game Settings: options to reset game settings (#6219)

---
 .../configuration/configure_general.cpp       |  4 +++-
 .../configuration/configure_per_game.cpp      | 21 +++++++++++++++++++
 .../configuration/configure_per_game.h        |  3 +++
 .../configuration/configure_per_game.ui       |  7 +++++++
 4 files changed, 34 insertions(+), 1 deletion(-)

diff --git a/src/citra_qt/configuration/configure_general.cpp b/src/citra_qt/configuration/configure_general.cpp
index daaa44821..4bb9627e3 100644
--- a/src/citra_qt/configuration/configure_general.cpp
+++ b/src/citra_qt/configuration/configure_general.cpp
@@ -141,10 +141,12 @@ void ConfigureGeneral::ResetDefaults() {
         tr("Are you sure you want to <b>reset your settings</b> and close Citra?"),
         QMessageBox::Yes | QMessageBox::No, QMessageBox::No);
 
-    if (answer == QMessageBox::No)
+    if (answer == QMessageBox::No) {
         return;
+    }
 
     FileUtil::Delete(FileUtil::GetUserPath(FileUtil::UserPath::ConfigDir) + "qt-config.ini");
+    FileUtil::DeleteDirRecursively(FileUtil::GetUserPath(FileUtil::UserPath::ConfigDir) + "custom");
     std::exit(0);
 }
 
diff --git a/src/citra_qt/configuration/configure_per_game.cpp b/src/citra_qt/configuration/configure_per_game.cpp
index 63421550c..19760fba6 100644
--- a/src/citra_qt/configuration/configure_per_game.cpp
+++ b/src/citra_qt/configuration/configure_per_game.cpp
@@ -3,6 +3,7 @@
 
 #include <utility>
 #include <vector>
+#include <QMessageBox>
 #include <QPushButton>
 #include <QString>
 #include <fmt/format.h>
@@ -13,6 +14,7 @@
 #include "citra_qt/configuration/configure_per_game.h"
 #include "citra_qt/configuration/configure_system.h"
 #include "citra_qt/util/util.h"
+#include "common/file_util.h"
 #include "core/core.h"
 #include "core/loader/loader.h"
 #include "core/loader/smdh.h"
@@ -51,11 +53,30 @@ ConfigurePerGame::ConfigurePerGame(QWidget* parent, u64 title_id_, const QString
                 &ConfigurePerGame::HandleApplyButtonClicked);
     }
 
+    connect(ui->button_reset_per_game, &QPushButton::clicked, this,
+            &ConfigurePerGame::ResetDefaults);
+
     LoadConfiguration();
 }
 
 ConfigurePerGame::~ConfigurePerGame() = default;
 
+void ConfigurePerGame::ResetDefaults() {
+    const auto config_file_name = title_id == 0 ? filename : fmt::format("{:016X}", title_id);
+    QMessageBox::StandardButton answer = QMessageBox::question(
+        this, tr("Citra"), tr("Are you sure you want to <b>reset your settings for this game</b>?"),
+        QMessageBox::Yes | QMessageBox::No, QMessageBox::No);
+
+    if (answer == QMessageBox::No) {
+        return;
+    }
+
+    FileUtil::Delete(fmt::format("{}/custom/{}.ini",
+                                 FileUtil::GetUserPath(FileUtil::UserPath::ConfigDir),
+                                 config_file_name));
+    close();
+}
+
 void ConfigurePerGame::ApplyConfiguration() {
     general_tab->ApplyConfiguration();
     system_tab->ApplyConfiguration();
diff --git a/src/citra_qt/configuration/configure_per_game.h b/src/citra_qt/configuration/configure_per_game.h
index 9b1b14306..3bc2564b4 100644
--- a/src/citra_qt/configuration/configure_per_game.h
+++ b/src/citra_qt/configuration/configure_per_game.h
@@ -43,6 +43,9 @@ public:
     /// Save all button configurations to settings file
     void ApplyConfiguration();
 
+    /// Reset the settings for this game
+    void ResetDefaults();
+
 private:
     void changeEvent(QEvent* event) override;
     void RetranslateUI();
diff --git a/src/citra_qt/configuration/configure_per_game.ui b/src/citra_qt/configuration/configure_per_game.ui
index a193afd65..cd5de38c7 100644
--- a/src/citra_qt/configuration/configure_per_game.ui
+++ b/src/citra_qt/configuration/configure_per_game.ui
@@ -177,6 +177,13 @@
           </property>
          </spacer>
         </item>
+        <item>
+         <widget class="QPushButton" name="button_reset_per_game">
+          <property name="text">
+           <string>Reset Game Settings</string>
+          </property>
+         </widget>
+        </item>
        </layout>
       </widget>
      </item>