From 4d61ac08aa0a5a65512f92a52b7a986080b20f74 Mon Sep 17 00:00:00 2001 From: Zach Hilman Date: Tue, 25 Dec 2018 10:42:02 -0500 Subject: [PATCH] qt: Add setting to prompt for user on game boot Using the QtProfileSelectorDialog, this implementation is trivial. This mimics the real switch behavior of asking which user on every game boot, but it is default disabled as that might get inconvenient. --- src/yuzu/configuration/config.cpp | 3 +++ src/yuzu/configuration/configure_general.cpp | 2 ++ src/yuzu/configuration/configure_general.ui | 7 +++++++ src/yuzu/main.cpp | 16 ++++++++++++++++ src/yuzu/main.h | 2 ++ src/yuzu/ui_settings.h | 2 ++ 6 files changed, 32 insertions(+) diff --git a/src/yuzu/configuration/config.cpp b/src/yuzu/configuration/config.cpp index c4349ccc8e..9ced6e0e2d 100644 --- a/src/yuzu/configuration/config.cpp +++ b/src/yuzu/configuration/config.cpp @@ -470,6 +470,8 @@ void Config::ReadValues() { qt_config->value("enable_discord_presence", true).toBool(); UISettings::values.screenshot_resolution_factor = static_cast(qt_config->value("screenshot_resolution_factor", 0).toUInt()); + UISettings::values.select_user_on_boot = + qt_config->value("select_user_on_boot", false).toBool(); qt_config->beginGroup("UIGameList"); UISettings::values.show_unknown = qt_config->value("show_unknown", true).toBool(); @@ -693,6 +695,7 @@ void Config::SaveValues() { qt_config->setValue("enable_discord_presence", UISettings::values.enable_discord_presence); qt_config->setValue("screenshot_resolution_factor", UISettings::values.screenshot_resolution_factor); + qt_config->setValue("select_user_on_boot", UISettings::values.select_user_on_boot); qt_config->beginGroup("UIGameList"); qt_config->setValue("show_unknown", UISettings::values.show_unknown); diff --git a/src/yuzu/configuration/configure_general.cpp b/src/yuzu/configuration/configure_general.cpp index 92a4413085..4116b6cd74 100644 --- a/src/yuzu/configuration/configure_general.cpp +++ b/src/yuzu/configuration/configure_general.cpp @@ -30,6 +30,7 @@ ConfigureGeneral::~ConfigureGeneral() = default; void ConfigureGeneral::setConfiguration() { ui->toggle_deepscan->setChecked(UISettings::values.gamedir_deepscan); ui->toggle_check_exit->setChecked(UISettings::values.confirm_before_closing); + ui->toggle_user_on_boot->setChecked(UISettings::values.select_user_on_boot); ui->theme_combobox->setCurrentIndex(ui->theme_combobox->findData(UISettings::values.theme)); ui->use_cpu_jit->setChecked(Settings::values.use_cpu_jit); ui->enable_nfc->setChecked(Settings::values.enable_nfc); @@ -42,6 +43,7 @@ void ConfigureGeneral::PopulateHotkeyList(const HotkeyRegistry& registry) { void ConfigureGeneral::applyConfiguration() { UISettings::values.gamedir_deepscan = ui->toggle_deepscan->isChecked(); UISettings::values.confirm_before_closing = ui->toggle_check_exit->isChecked(); + UISettings::values.select_user_on_boot = ui->toggle_user_on_boot->isChecked(); UISettings::values.theme = ui->theme_combobox->itemData(ui->theme_combobox->currentIndex()).toString(); diff --git a/src/yuzu/configuration/configure_general.ui b/src/yuzu/configuration/configure_general.ui index bf37446c6d..dff0ad5d0d 100644 --- a/src/yuzu/configuration/configure_general.ui +++ b/src/yuzu/configuration/configure_general.ui @@ -38,6 +38,13 @@ + + + + Prompt for user on game boot + + + diff --git a/src/yuzu/main.cpp b/src/yuzu/main.cpp index 01a0f94ab6..8c1d132f56 100644 --- a/src/yuzu/main.cpp +++ b/src/yuzu/main.cpp @@ -687,10 +687,26 @@ bool GMainWindow::LoadROM(const QString& filename) { return true; } +void GMainWindow::SelectAndSetCurrentUser() { + QtProfileSelectionDialog dialog(this); + dialog.setWindowFlags(Qt::Dialog | Qt::CustomizeWindowHint | Qt::WindowTitleHint | + Qt::WindowSystemMenuHint | Qt::WindowCloseButtonHint); + dialog.setWindowModality(Qt::WindowModal); + dialog.exec(); + + if (dialog.GetStatus()) { + Settings::values.current_user = static_cast(dialog.GetIndex()); + } +} + void GMainWindow::BootGame(const QString& filename) { LOG_INFO(Frontend, "yuzu starting..."); StoreRecentFile(filename); // Put the filename on top of the list + if (UISettings::values.select_user_on_boot) { + SelectAndSetCurrentUser(); + } + if (!LoadROM(filename)) return; diff --git a/src/yuzu/main.h b/src/yuzu/main.h index 4e37f6a2d4..d560bf75b1 100644 --- a/src/yuzu/main.h +++ b/src/yuzu/main.h @@ -128,6 +128,8 @@ private: void ShowTelemetryCallout(); void SetDiscordEnabled(bool state); + void SelectAndSetCurrentUser(); + /** * Stores the filename in the recently loaded files list. * The new filename is stored at the beginning of the recently loaded files list. diff --git a/src/yuzu/ui_settings.h b/src/yuzu/ui_settings.h index 58ba240fd7..82aaeedb0a 100644 --- a/src/yuzu/ui_settings.h +++ b/src/yuzu/ui_settings.h @@ -40,6 +40,8 @@ struct Values { bool confirm_before_closing; bool first_start; + bool select_user_on_boot; + // Discord RPC bool enable_discord_presence;