diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/yuzu/configuration/config.cpp | 3 | ||||
-rw-r--r-- | src/yuzu/configuration/configure_general.cpp | 2 | ||||
-rw-r--r-- | src/yuzu/configuration/configure_general.ui | 7 | ||||
-rw-r--r-- | src/yuzu/main.cpp | 54 | ||||
-rw-r--r-- | src/yuzu/main.h | 2 | ||||
-rw-r--r-- | src/yuzu/ui_settings.h | 2 |
6 files changed, 48 insertions, 22 deletions
diff --git a/src/yuzu/configuration/config.cpp b/src/yuzu/configuration/config.cpp index c6079acb8..165d70e9c 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<u16>(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 92a441308..4116b6cd7 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 bf37446c6..dff0ad5d0 100644 --- a/src/yuzu/configuration/configure_general.ui +++ b/src/yuzu/configuration/configure_general.ui @@ -38,6 +38,13 @@ </property> </widget> </item> + <item> + <widget class="QCheckBox" name="toggle_user_on_boot"> + <property name="text"> + <string>Prompt for user on game boot</string> + </property> + </widget> + </item> </layout> </item> </layout> diff --git a/src/yuzu/main.cpp b/src/yuzu/main.cpp index 01a0f94ab..1d5a2b51a 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<s32>(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; @@ -827,31 +843,25 @@ void GMainWindow::OnGameListOpenFolder(u64 program_id, GameListOpenTarget target const std::string nand_dir = FileUtil::GetUserPath(FileUtil::UserPath::NANDDir); ASSERT(program_id != 0); - Service::Account::ProfileManager manager{}; - const auto user_ids = manager.GetAllUsers(); - QStringList list; - for (const auto& user_id : user_ids) { - if (user_id == Service::Account::UUID{}) - continue; - Service::Account::ProfileBase base; - if (!manager.GetProfileBase(user_id, base)) - continue; - - list.push_back(QString::fromStdString(Common::StringFromFixedZeroTerminatedBuffer( - reinterpret_cast<const char*>(base.username.data()), base.username.size()))); - } + const auto select_profile = [this]() -> s32 { + QtProfileSelectionDialog dialog(this); + dialog.setWindowFlags(Qt::Dialog | Qt::CustomizeWindowHint | Qt::WindowTitleHint | + Qt::WindowSystemMenuHint | Qt::WindowCloseButtonHint); + dialog.setWindowModality(Qt::WindowModal); + dialog.exec(); - bool ok = false; - const auto index_string = - QInputDialog::getItem(this, tr("Select User"), - tr("Please select the user's save data you would like to open."), - list, Settings::values.current_user, false, &ok); - if (!ok) - return; + if (!dialog.GetStatus()) { + return -1; + } + + return dialog.GetIndex(); + }; - const auto index = list.indexOf(index_string); - ASSERT(index != -1 && index < 8); + const auto index = select_profile(); + if (index == -1) + return; + Service::Account::ProfileManager manager; const auto user_id = manager.GetUser(index); ASSERT(user_id); path = nand_dir + FileSys::SaveDataFactory::GetFullPath(FileSys::SaveDataSpaceId::NandUser, diff --git a/src/yuzu/main.h b/src/yuzu/main.h index 4e37f6a2d..d560bf75b 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 58ba240fd..82aaeedb0 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; |