diff options
-rw-r--r-- | src/yuzu/configuration/config.cpp | 6 | ||||
-rw-r--r-- | src/yuzu/configuration/config.h | 1 | ||||
-rw-r--r-- | src/yuzu/configuration/configure_dialog.cpp | 6 | ||||
-rw-r--r-- | src/yuzu/configuration/configure_general.cpp | 23 | ||||
-rw-r--r-- | src/yuzu/configuration/configure_general.h | 6 | ||||
-rw-r--r-- | src/yuzu/configuration/configure_general.ui | 48 | ||||
-rw-r--r-- | src/yuzu/main.cpp | 43 | ||||
-rw-r--r-- | src/yuzu/uisettings.h | 1 |
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; |