summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/yuzu/configuration/config.cpp6
-rw-r--r--src/yuzu/configuration/config.h1
-rw-r--r--src/yuzu/configuration/configure_dialog.cpp6
-rw-r--r--src/yuzu/configuration/configure_general.cpp23
-rw-r--r--src/yuzu/configuration/configure_general.h6
-rw-r--r--src/yuzu/configuration/configure_general.ui48
-rw-r--r--src/yuzu/main.cpp43
-rw-r--r--src/yuzu/uisettings.h1
8 files changed, 111 insertions, 23 deletions
diff --git a/src/yuzu/configuration/config.cpp b/src/yuzu/configuration/config.cpp
index 0ea508acd..eb58bfa5b 100644
--- a/src/yuzu/configuration/config.cpp
+++ b/src/yuzu/configuration/config.cpp
@@ -1632,12 +1632,6 @@ void Config::Save() {
SaveValues();
}
-void Config::ResetDefaults() {
- FS::Delete(qt_config_loc);
- FS::CreateFullPath(qt_config_loc);
- Reload();
-}
-
void Config::ReadControlPlayerValue(std::size_t player_index) {
qt_config->beginGroup(QStringLiteral("Controls"));
ReadPlayerValue(player_index);
diff --git a/src/yuzu/configuration/config.h b/src/yuzu/configuration/config.h
index cd68d7b4d..ce3355588 100644
--- a/src/yuzu/configuration/config.h
+++ b/src/yuzu/configuration/config.h
@@ -28,7 +28,6 @@ public:
void Reload();
void Save();
- void ResetDefaults();
void ReadControlPlayerValue(std::size_t player_index);
void SaveControlPlayerValue(std::size_t player_index);
diff --git a/src/yuzu/configuration/configure_dialog.cpp b/src/yuzu/configuration/configure_dialog.cpp
index 6028135c5..167323831 100644
--- a/src/yuzu/configuration/configure_dialog.cpp
+++ b/src/yuzu/configuration/configure_dialog.cpp
@@ -16,6 +16,10 @@
#include "yuzu/configuration/configure_input_player.h"
#include "yuzu/hotkeys.h"
+static void CloseDialog(ConfigureDialog *dialog) {
+ dialog->close();
+}
+
ConfigureDialog::ConfigureDialog(QWidget* parent, HotkeyRegistry& registry,
InputCommon::InputSubsystem* input_subsystem)
: QDialog(parent), ui(new Ui::ConfigureDialog), registry(registry) {
@@ -27,6 +31,8 @@ ConfigureDialog::ConfigureDialog(QWidget* parent, HotkeyRegistry& registry,
ui->inputTab->Initialize(input_subsystem);
+ ui->generalTab->SetResetCallback(&CloseDialog, this);
+
SetConfiguration();
PopulateSelectionList();
diff --git a/src/yuzu/configuration/configure_general.cpp b/src/yuzu/configuration/configure_general.cpp
index a107cd3e1..28aaf47be 100644
--- a/src/yuzu/configuration/configure_general.cpp
+++ b/src/yuzu/configuration/configure_general.cpp
@@ -3,14 +3,14 @@
// Refer to the license.txt file included.
#include <QCheckBox>
-#include <QSpinBox>
#include <QMessageBox>
+#include <QSpinBox>
#include "common/settings.h"
#include "core/core.h"
#include "ui_configure_general.h"
+#include "yuzu/configuration/config.h"
#include "yuzu/configuration/configuration_shared.h"
#include "yuzu/configuration/configure_general.h"
-#include "yuzu/configuration/config.h"
#include "yuzu/uisettings.h"
ConfigureGeneral::ConfigureGeneral(QWidget* parent)
@@ -46,6 +46,8 @@ void ConfigureGeneral::SetConfiguration() {
ui->toggle_frame_limit->setChecked(Settings::values.use_frame_limit.GetValue());
ui->frame_limit->setValue(Settings::values.frame_limit.GetValue());
+ ui->button_reset_defaults->setEnabled(runtime_lock);
+
if (Settings::IsConfiguringGlobal()) {
ui->frame_limit->setEnabled(Settings::values.use_frame_limit.GetValue());
} else {
@@ -54,13 +56,24 @@ void ConfigureGeneral::SetConfiguration() {
}
}
+// Called to set the callback when resetting settings to defaults
+void ConfigureGeneral::SetResetCallback(void (*callback)(ConfigureDialog*),
+ ConfigureDialog* param) {
+ ResetCallback = callback;
+ reset_callback_param = param;
+}
+
void ConfigureGeneral::ResetDefaults() {
QMessageBox::StandardButton answer = QMessageBox::question(
- this, tr("yuzu"), tr("Are you sure you want to <b>reset your settings</b>?"),
+ this, tr("yuzu"),
+ tr("This reset all settings and remove all per-game configurations. This will not delete "
+ "game directories, profiles, or input profiles. Proceed?"),
QMessageBox::Yes | QMessageBox::No, QMessageBox::No);
if (answer == QMessageBox::No)
return;
- UISettings::values.
+ UISettings::values.reset_to_defaults = true;
+ UISettings::values.is_game_list_reload_pending.exchange(true);
+ (*ResetCallback)(reset_callback_param);
}
void ConfigureGeneral::ApplyConfiguration() {
@@ -119,6 +132,8 @@ void ConfigureGeneral::SetupPerGameUI() {
ui->toggle_background_pause->setVisible(false);
ui->toggle_hide_mouse->setVisible(false);
+ ui->button_reset_defaults->setVisible(false);
+
ConfigurationShared::SetColoredTristate(ui->toggle_frame_limit,
Settings::values.use_frame_limit, use_frame_limit);
ConfigurationShared::SetColoredTristate(ui->use_multi_core, Settings::values.use_multi_core,
diff --git a/src/yuzu/configuration/configure_general.h b/src/yuzu/configuration/configure_general.h
index 3d8a1dae0..2a7741ad9 100644
--- a/src/yuzu/configuration/configure_general.h
+++ b/src/yuzu/configuration/configure_general.h
@@ -7,6 +7,8 @@
#include <memory>
#include <QWidget>
+class ConfigureDialog;
+
namespace ConfigurationShared {
enum class CheckState;
}
@@ -24,6 +26,7 @@ public:
explicit ConfigureGeneral(QWidget* parent = nullptr);
~ConfigureGeneral() override;
+ void SetResetCallback(void (*callback)(ConfigureDialog*), ConfigureDialog *param);
void ResetDefaults();
void ApplyConfiguration();
@@ -35,6 +38,9 @@ private:
void SetupPerGameUI();
+ void (*ResetCallback)(ConfigureDialog*);
+ ConfigureDialog *reset_callback_param;
+
std::unique_ptr<Ui::ConfigureGeneral> ui;
ConfigurationShared::CheckState use_frame_limit;
diff --git a/src/yuzu/configuration/configure_general.ui b/src/yuzu/configuration/configure_general.ui
index ae8ed5ca5..bc7041090 100644
--- a/src/yuzu/configuration/configure_general.ui
+++ b/src/yuzu/configuration/configure_general.ui
@@ -6,7 +6,7 @@
<rect>
<x>0</x>
<y>0</y>
- <width>300</width>
+ <width>329</width>
<height>407</height>
</rect>
</property>
@@ -91,13 +91,6 @@
</layout>
</widget>
</item>
- <item alignment="Qt::AlignRight">
- <widget class="QPushButton" name="button_reset_defaults">
- <property name="text">
- <string>Reset All Settings</string>
- </property>
- </widget>
- </item>
<item>
<spacer name="verticalSpacer">
<property name="orientation">
@@ -111,6 +104,45 @@
</property>
</spacer>
</item>
+ <item>
+ <layout class="QHBoxLayout" name="layout_reset">
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <property name="leftMargin">
+ <number>5</number>
+ </property>
+ <property name="topMargin">
+ <number>5</number>
+ </property>
+ <property name="rightMargin">
+ <number>5</number>
+ </property>
+ <property name="bottomMargin">
+ <number>5</number>
+ </property>
+ <item>
+ <widget class="QPushButton" name="button_reset_defaults">
+ <property name="text">
+ <string>Reset All Settings</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <spacer name="spacer_reset">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>40</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ </layout>
+ </item>
</layout>
</item>
</layout>
diff --git a/src/yuzu/main.cpp b/src/yuzu/main.cpp
index 838bb6926..e5a2fdf8c 100644
--- a/src/yuzu/main.cpp
+++ b/src/yuzu/main.cpp
@@ -2587,14 +2587,49 @@ void GMainWindow::OnConfigure() {
&GMainWindow::OnLanguageChanged);
const auto result = configure_dialog.exec();
- if (result != QDialog::Accepted && !UISettings::values.configuration_applied) {
+ if (result != QDialog::Accepted && !UISettings::values.configuration_applied &&
+ !UISettings::values.reset_to_defaults) {
+ // Runs if the user hit Cancel or closed the window, and did not ever press the Apply button
+ // or `Reset to Defaults` button
return;
} else if (result == QDialog::Accepted) {
+ // Only apply new changes if user hit Okay
+ // This is here to avoid applying changes if the user hit Apply, made some changes, then hit
+ // Cancel
configure_dialog.ApplyConfiguration();
- controller_dialog->refreshConfiguration();
- }
+ } else if (UISettings::values.reset_to_defaults) {
+ LOG_INFO(Frontend, "Resetting all settings to defaults");
+ if (!Common::FS::RemoveFile(config->GetConfigFilePath())) {
+ LOG_WARNING(Frontend, "Failed to remove configuration file");
+ }
+ if (!Common::FS::RemoveDirContentsRecursively(
+ Common::FS::GetYuzuPath(Common::FS::YuzuPath::ConfigDir) / "custom")) {
+ LOG_WARNING(Frontend, "Failed to remove custom configuration files");
+ }
+ if (!Common::FS::RemoveDirRecursively(
+ Common::FS::GetYuzuPath(Common::FS::YuzuPath::CacheDir) / "game_list")) {
+ LOG_WARNING(Frontend, "Failed to remove game metadata cache files");
+ }
+
+ // Explicitly save the game directories, since reinitializing config does not do so.
+ QVector<UISettings::GameDir> old_game_dirs = UISettings::values.game_dirs;
+ QVector<u64> old_favorited_ids = UISettings::values.favorited_ids;
- configure_dialog.ApplyConfiguration();
+ Settings::values.disabled_addons.clear();
+
+ config = std::make_unique<Config>();
+ UISettings::values.reset_to_defaults = false;
+
+ UISettings::values.game_dirs = old_game_dirs;
+ UISettings::values.favorited_ids = old_favorited_ids;
+
+ InitializeRecentFileMenuActions();
+
+ SetDefaultUIGeometry();
+ RestoreUIState();
+
+ ShowTelemetryCallout();
+ }
controller_dialog->refreshConfiguration();
InitializeHotkeys();
diff --git a/src/yuzu/uisettings.h b/src/yuzu/uisettings.h
index 49122ec32..cdcb83f9f 100644
--- a/src/yuzu/uisettings.h
+++ b/src/yuzu/uisettings.h
@@ -97,6 +97,7 @@ struct Values {
bool cache_game_list;
bool configuration_applied;
+ bool reset_to_defaults;
};
extern Values values;