diff --git a/src/yuzu/configuration/configure_gamelist.cpp b/src/yuzu/configuration/configure_gamelist.cpp index 8743ce982d..0112bd9505 100644 --- a/src/yuzu/configuration/configure_gamelist.cpp +++ b/src/yuzu/configuration/configure_gamelist.cpp @@ -36,6 +36,16 @@ ConfigureGameList::ConfigureGameList(QWidget* parent) InitializeRowComboBoxes(); this->setConfiguration(); + + // Force game list reload if any of the relevant settings are changed. + connect(ui->show_unknown, &QCheckBox::stateChanged, this, + &ConfigureGameList::RequestGameListUpdate); + connect(ui->icon_size_combobox, QOverload::of(&QComboBox::currentIndexChanged), this, + &ConfigureGameList::RequestGameListUpdate); + connect(ui->row_1_text_combobox, QOverload::of(&QComboBox::currentIndexChanged), this, + &ConfigureGameList::RequestGameListUpdate); + connect(ui->row_2_text_combobox, QOverload::of(&QComboBox::currentIndexChanged), this, + &ConfigureGameList::RequestGameListUpdate); } ConfigureGameList::~ConfigureGameList() = default; @@ -48,6 +58,10 @@ void ConfigureGameList::applyConfiguration() { Settings::Apply(); } +void ConfigureGameList::RequestGameListUpdate() { + UISettings::values.is_game_list_reload_pending.exchange(true); +} + void ConfigureGameList::setConfiguration() { ui->show_unknown->setChecked(UISettings::values.show_unknown); ui->icon_size_combobox->setCurrentIndex( diff --git a/src/yuzu/configuration/configure_gamelist.h b/src/yuzu/configuration/configure_gamelist.h index ff7406c601..d058c695f4 100644 --- a/src/yuzu/configuration/configure_gamelist.h +++ b/src/yuzu/configuration/configure_gamelist.h @@ -20,6 +20,9 @@ public: void applyConfiguration(); +public slots: + void RequestGameListUpdate(); + private: void setConfiguration(); diff --git a/src/yuzu/configuration/configure_general.cpp b/src/yuzu/configuration/configure_general.cpp index 19c74693c0..2b0425c9e4 100644 --- a/src/yuzu/configuration/configure_general.cpp +++ b/src/yuzu/configuration/configure_general.cpp @@ -21,6 +21,9 @@ ConfigureGeneral::ConfigureGeneral(QWidget* parent) ui->use_cpu_jit->setEnabled(!Core::System::GetInstance().IsPoweredOn()); ui->use_docked_mode->setEnabled(!Core::System::GetInstance().IsPoweredOn()); + + connect(ui->toggle_deepscan, &QCheckBox::stateChanged, this, + []() { UISettings::values.is_game_list_reload_pending.exchange(true); }); } ConfigureGeneral::~ConfigureGeneral() = default; diff --git a/src/yuzu/configuration/configure_per_general.cpp b/src/yuzu/configuration/configure_per_general.cpp index 6d2781abda..f7ddc39912 100644 --- a/src/yuzu/configuration/configure_per_general.cpp +++ b/src/yuzu/configuration/configure_per_general.cpp @@ -21,6 +21,7 @@ #include "yuzu/configuration/config.h" #include "yuzu/configuration/configure_input.h" #include "yuzu/configuration/configure_per_general.h" +#include "yuzu/ui_settings.h" ConfigurePerGameGeneral::ConfigurePerGameGeneral(QWidget* parent) : QWidget(parent), ui(std::make_unique()) { @@ -59,6 +60,9 @@ ConfigurePerGameGeneral::ConfigurePerGameGeneral(QWidget* parent) ui->icon_view->setScene(scene); this->loadConfiguration(); + + connect(item_model, &QStandardItemModel::itemChanged, this, + []() { UISettings::values.is_game_list_reload_pending.exchange(true); }); } ConfigurePerGameGeneral::~ConfigurePerGameGeneral() = default; diff --git a/src/yuzu/main.cpp b/src/yuzu/main.cpp index d25e9a5e23..2c2edf7c46 100644 --- a/src/yuzu/main.cpp +++ b/src/yuzu/main.cpp @@ -984,7 +984,9 @@ void GMainWindow::OnGameListOpenProperties(FileSys::VirtualFile file) { config->SetPerGameSettingsDelta(title_id, dialog.applyConfiguration()); config->Save(); - game_list->PopulateAsync(UISettings::values.gamedir, UISettings::values.gamedir_deepscan); + const auto reload = UISettings::values.is_game_list_reload_pending.exchange(false); + if (reload) + game_list->PopulateAsync(UISettings::values.gamedir, UISettings::values.gamedir_deepscan); } void GMainWindow::OnMenuLoadFile() { @@ -1355,7 +1357,11 @@ void GMainWindow::OnConfigure() { UpdateUITheme(); if (UISettings::values.enable_discord_presence != old_discord_presence) SetDiscordEnabled(UISettings::values.enable_discord_presence); - game_list->PopulateAsync(UISettings::values.gamedir, UISettings::values.gamedir_deepscan); + const auto reload = UISettings::values.is_game_list_reload_pending.exchange(false); + if (reload) { + game_list->PopulateAsync(UISettings::values.gamedir, + UISettings::values.gamedir_deepscan); + } config->Save(); } } diff --git a/src/yuzu/ui_settings.h b/src/yuzu/ui_settings.h index 2e617d52ad..af1c9432f4 100644 --- a/src/yuzu/ui_settings.h +++ b/src/yuzu/ui_settings.h @@ -5,6 +5,7 @@ #pragma once #include +#include #include #include #include @@ -62,6 +63,7 @@ struct Values { uint32_t icon_size; uint8_t row_1_text_id; uint8_t row_2_text_id; + std::atomic_bool is_game_list_reload_pending{false}; }; extern Values values;