From c5ec10b7792820e505bb06063c48363470bccaf1 Mon Sep 17 00:00:00 2001 From: Vova Date: Thu, 20 Mar 2025 19:24:35 +1000 Subject: [PATCH] Added the ability to skip "Profile Manager Users" during gameplay in Settings > Systems. --- src/Ryujinx/Assets/locales.json | 50 +++++++++++++++++++ src/Ryujinx/Headless/Options.cs | 8 ++- .../Configuration/ConfigurationFileFormat.cs | 5 ++ .../ConfigurationState.Migration.cs | 10 ++-- .../Configuration/ConfigurationState.Model.cs | 7 +++ .../Configuration/ConfigurationState.cs | 2 + .../UI/Applet/ProfileSelectorDialog.axaml.cs | 8 +++ .../UI/ViewModels/SettingsViewModel.cs | 3 ++ .../Views/Settings/SettingsSystemView.axaml | 5 ++ 9 files changed, 94 insertions(+), 4 deletions(-) diff --git a/src/Ryujinx/Assets/locales.json b/src/Ryujinx/Assets/locales.json index 2605490b1..9db28b414 100644 --- a/src/Ryujinx/Assets/locales.json +++ b/src/Ryujinx/Assets/locales.json @@ -5297,6 +5297,31 @@ "zh_TW": "忽略控制器小程式" } }, + { + "ID": "SettingsTabSystemSkipUserProfilesManager", + "Translations": { + "ar_SA": "", + "de_DE": "", + "el_GR": "", + "en_US": "Skip dialog 'User Profiles Manager'", + "es_ES": "", + "fr_FR": "", + "he_IL": "", + "it_IT": "", + "ja_JP": "", + "ko_KR": "", + "no_NO": "", + "pl_PL": "", + "pt_BR": "", + "ru_RU": "", + "sv_SE": "", + "th_TH": "", + "tr_TR": "", + "uk_UA": "", + "zh_CN": "", + "zh_TW": "" + } + }, { "ID": "SettingsTabGraphics", "Translations": { @@ -16697,6 +16722,31 @@ "zh_TW": "在模擬應用程式時如果遊戲手柄中斷連線則不會顯示控制器小程式。\n\n如果不確定,請保持關閉狀態。" } }, + { + "ID": "SkipUserProfilesTooltip", + "Translations": { + "ar_SA": "", + "de_DE": "", + "el_GR": "", + "en_US": "This option skips the 'User Profile Manager' dialog during gameplay, using a pre-selected profile.\n\nProfile switching is found in 'Options' - 'Manager User Profiles'. Select the desired profile before loading the game.", + "es_ES": "", + "fr_FR": "", + "he_IL": "", + "it_IT": "", + "ja_JP": "", + "ko_KR": "", + "no_NO": "", + "pl_PL": "", + "pt_BR": "", + "ru_RU": "", + "sv_SE": "", + "th_TH": "", + "tr_TR": "", + "uk_UA": "", + "zh_CN": "", + "zh_TW": "" + } + }, { "ID": "GraphicsBackendThreadingTooltip", "Translations": { diff --git a/src/Ryujinx/Headless/Options.cs b/src/Ryujinx/Headless/Options.cs index 8305cd311..539df2568 100644 --- a/src/Ryujinx/Headless/Options.cs +++ b/src/Ryujinx/Headless/Options.cs @@ -150,7 +150,10 @@ namespace Ryujinx.Headless if (NeedsOverride(nameof(IgnoreControllerApplet))) IgnoreControllerApplet = configurationState.System.IgnoreControllerApplet; - + + if (NeedsOverride(nameof(SkipUserProfilesManager))) + SkipUserProfilesManager = configurationState.System.SkipUserProfilesManager; + return; bool NeedsOverride(string argKey) => originalArgs.None(arg => arg.TrimStart('-').EqualsIgnoreCase(OptionName(argKey))); @@ -414,6 +417,9 @@ namespace Ryujinx.Headless [Option("ignore-controller-applet", Required = false, Default = false, HelpText = "Enable ignoring the controller applet when your game loses connection to your controller.")] public bool IgnoreControllerApplet { get; set; } + [Option("skip-User-Profiles-Manager", Required = false, Default = false, HelpText = "Enable...")] + public bool SkipUserProfilesManager { get; set; } + // Values [Value(0, MetaName = "input", HelpText = "Input to load.", Required = true)] diff --git a/src/Ryujinx/Systems/Configuration/ConfigurationFileFormat.cs b/src/Ryujinx/Systems/Configuration/ConfigurationFileFormat.cs index c5315ab12..c19fb9d67 100644 --- a/src/Ryujinx/Systems/Configuration/ConfigurationFileFormat.cs +++ b/src/Ryujinx/Systems/Configuration/ConfigurationFileFormat.cs @@ -187,6 +187,11 @@ namespace Ryujinx.Ava.Systems.Configuration /// public bool IgnoreApplet { get; set; } + /// + /// Skip user profiles manager dialog during gameplay(the used profile in the configuration will be selected) + /// + public bool SkipUserProfiles { get; set; } + /// /// Enables or disables save window size, position and state on close. /// diff --git a/src/Ryujinx/Systems/Configuration/ConfigurationState.Migration.cs b/src/Ryujinx/Systems/Configuration/ConfigurationState.Migration.cs index b10cc3926..11f83e716 100644 --- a/src/Ryujinx/Systems/Configuration/ConfigurationState.Migration.cs +++ b/src/Ryujinx/Systems/Configuration/ConfigurationState.Migration.cs @@ -102,6 +102,7 @@ namespace Ryujinx.Ava.Systems.Configuration System.DramSize.Value = cff.DramSize; System.IgnoreMissingServices.Value = cff.IgnoreMissingServices; System.IgnoreControllerApplet.Value = cff.IgnoreApplet; + System.SkipUserProfilesManager.Value = cff.SkipUserProfiles; System.UseHypervisor.Value = cff.UseHypervisor; UI.GuiColumns.FavColumn.Value = shouldLoadFromFile ? cff.GuiColumns.FavColumn : UI.GuiColumns.FavColumn.Value; @@ -438,9 +439,12 @@ namespace Ryujinx.Ava.Systems.Configuration (64, static cff => cff.LoggingEnableAvalonia = false), (65, static cff => cff.UpdateCheckerType = cff.CheckUpdatesOnStart ? UpdaterType.PromptAtStartup : UpdaterType.Off), (66, static cff => cff.DisableInputWhenOutOfFocus = false), - (67, static cff => cff.FocusLostActionType = cff.DisableInputWhenOutOfFocus ? FocusLostType.BlockInput : FocusLostType.DoNothing) - // 68 was the version that added per-game configs; the file structure did not change - // the version was increased so external tools could know that your Ryujinx version has per-game config capabilities. + (67, static cff => cff.FocusLostActionType = cff.DisableInputWhenOutOfFocus ? FocusLostType.BlockInput : FocusLostType.DoNothing), + + // 68 was the version that added per-game configs; the file structure did not change + // the version was increased so external tools could know that your Ryujinx version has per-game config capabilities. + (69, static cff => cff.SkipUserProfiles = false) + ); } } diff --git a/src/Ryujinx/Systems/Configuration/ConfigurationState.Model.cs b/src/Ryujinx/Systems/Configuration/ConfigurationState.Model.cs index b52c624e3..fec543d5b 100644 --- a/src/Ryujinx/Systems/Configuration/ConfigurationState.Model.cs +++ b/src/Ryujinx/Systems/Configuration/ConfigurationState.Model.cs @@ -390,6 +390,11 @@ namespace Ryujinx.Ava.Systems.Configuration /// public ReactiveObject IgnoreControllerApplet { get; private set; } + /// + /// Skip User Profiles Manager + /// + public ReactiveObject SkipUserProfilesManager { get; private set; } + /// /// Uses Hypervisor over JIT if available /// @@ -431,6 +436,8 @@ namespace Ryujinx.Ava.Systems.Configuration IgnoreMissingServices.LogChangesToValue(nameof(IgnoreMissingServices)); IgnoreControllerApplet = new ReactiveObject(); IgnoreControllerApplet.LogChangesToValue(nameof(IgnoreControllerApplet)); + SkipUserProfilesManager = new ReactiveObject(); + SkipUserProfilesManager.LogChangesToValue(nameof(SkipUserProfilesManager)); AudioVolume = new ReactiveObject(); AudioVolume.LogChangesToValue(nameof(AudioVolume)); UseHypervisor = new ReactiveObject(); diff --git a/src/Ryujinx/Systems/Configuration/ConfigurationState.cs b/src/Ryujinx/Systems/Configuration/ConfigurationState.cs index 6fe35c744..ac660107b 100644 --- a/src/Ryujinx/Systems/Configuration/ConfigurationState.cs +++ b/src/Ryujinx/Systems/Configuration/ConfigurationState.cs @@ -81,6 +81,7 @@ namespace Ryujinx.Ava.Systems.Configuration DramSize = System.DramSize, IgnoreMissingServices = System.IgnoreMissingServices, IgnoreApplet = System.IgnoreControllerApplet, + SkipUserProfiles = System.SkipUserProfilesManager, UseHypervisor = System.UseHypervisor, GuiColumns = new GuiColumns { @@ -205,6 +206,7 @@ namespace Ryujinx.Ava.Systems.Configuration System.DramSize.Value = MemoryConfiguration.MemoryConfiguration4GiB; System.IgnoreMissingServices.Value = false; System.IgnoreControllerApplet.Value = false; + System.SkipUserProfilesManager.Value = false; System.UseHypervisor.Value = true; Multiplayer.LanInterfaceId.Value = "0"; Multiplayer.Mode.Value = MultiplayerMode.Disabled; diff --git a/src/Ryujinx/UI/Applet/ProfileSelectorDialog.axaml.cs b/src/Ryujinx/UI/Applet/ProfileSelectorDialog.axaml.cs index babd8e5ee..606a865a1 100644 --- a/src/Ryujinx/UI/Applet/ProfileSelectorDialog.axaml.cs +++ b/src/Ryujinx/UI/Applet/ProfileSelectorDialog.axaml.cs @@ -3,6 +3,7 @@ using Avalonia.Controls; using Avalonia.Input; using FluentAvalonia.UI.Controls; using Ryujinx.Ava.Common.Locale; +using Ryujinx.Ava.Systems.Configuration; using Ryujinx.Ava.UI.Controls; using Ryujinx.Ava.UI.Helpers; using Ryujinx.Ava.UI.ViewModels; @@ -78,6 +79,13 @@ namespace Ryujinx.Ava.UI.Applet public static async Task<(UserId Id, bool Result)> ShowInputDialog(ProfileSelectorDialogViewModel viewModel) { + + if (ConfigurationState.Instance.System.SkipUserProfilesManager) + { + UserId defaultId = viewModel.SelectedUserId; + return (defaultId, true); + } + ContentDialog contentDialog = new() { Title = LocaleManager.Instance[LocaleKeys.UserProfileWindowTitle], diff --git a/src/Ryujinx/UI/ViewModels/SettingsViewModel.cs b/src/Ryujinx/UI/ViewModels/SettingsViewModel.cs index a092e97f2..55507f3d8 100644 --- a/src/Ryujinx/UI/ViewModels/SettingsViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/SettingsViewModel.cs @@ -132,6 +132,7 @@ namespace Ryujinx.Ava.UI.ViewModels public bool EnableDiscordIntegration { get; set; } public bool ShowConfirmExit { get; set; } public bool IgnoreApplet { get; set; } + public bool SkipUserProfiles { get; set; } public bool RememberWindowState { get; set; } public bool ShowOldUI { get; set; } public int HideCursor { get; set; } @@ -586,6 +587,7 @@ namespace Ryujinx.Ava.UI.ViewModels DramSize = config.System.DramSize; IgnoreMissingServices = config.System.IgnoreMissingServices; IgnoreApplet = config.System.IgnoreControllerApplet; + SkipUserProfiles = config.System.SkipUserProfilesManager; // CPU EnablePptc = config.System.EnablePtc; @@ -688,6 +690,7 @@ namespace Ryujinx.Ava.UI.ViewModels config.System.DramSize.Value = DramSize; config.System.IgnoreMissingServices.Value = IgnoreMissingServices; config.System.IgnoreControllerApplet.Value = IgnoreApplet; + config.System.SkipUserProfilesManager.Value = SkipUserProfiles; // CPU config.System.EnablePtc.Value = EnablePptc; diff --git a/src/Ryujinx/UI/Views/Settings/SettingsSystemView.axaml b/src/Ryujinx/UI/Views/Settings/SettingsSystemView.axaml index a52fe5fbe..dbe4433dd 100644 --- a/src/Ryujinx/UI/Views/Settings/SettingsSystemView.axaml +++ b/src/Ryujinx/UI/Views/Settings/SettingsSystemView.axaml @@ -328,6 +328,11 @@ ToolTip.Tip="{ext:Locale SettingsTabSystemEnableCustomVSyncIntervalTooltip}"> + + +