diff options
author | merry <git@mary.rs> | 2022-03-15 01:35:41 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-03-15 02:35:41 +0100 |
commit | 223172ac0babc7dc272a5489ac2e91062a12a0c2 (patch) | |
tree | 86fb90cac1258ab769e5822d0f530f38e401160b | |
parent | 8c9633d72fbe49ff022d907a7fdd813be95f176e (diff) |
Ui: Add option to show/hide console window (Windows-only) (#3170)1.1.72
* Ui: Add option to show/hide console window (Windows-only)
* Ui: Only display Show Console menu item on Windows
* ConsoleHelper: Handle NULL case
This will never happen
* Address nits
* Address comments
* Address comments 2
-rw-r--r-- | Ryujinx/Configuration/ConfigurationFileFormat.cs | 7 | ||||
-rw-r--r-- | Ryujinx/Configuration/ConfigurationState.cs | 24 | ||||
-rw-r--r-- | Ryujinx/Ui/Helper/ConsoleHelper.cs | 49 | ||||
-rw-r--r-- | Ryujinx/Ui/MainWindow.cs | 11 | ||||
-rw-r--r-- | Ryujinx/Ui/MainWindow.glade | 9 |
5 files changed, 97 insertions, 3 deletions
diff --git a/Ryujinx/Configuration/ConfigurationFileFormat.cs b/Ryujinx/Configuration/ConfigurationFileFormat.cs index 8e64aa08..27b0c362 100644 --- a/Ryujinx/Configuration/ConfigurationFileFormat.cs +++ b/Ryujinx/Configuration/ConfigurationFileFormat.cs @@ -14,7 +14,7 @@ namespace Ryujinx.Configuration /// <summary> /// The current version of the file format /// </summary> - public const int CurrentVersion = 36; + public const int CurrentVersion = 37; /// <summary> /// Version of the configuration file format @@ -237,6 +237,11 @@ namespace Ryujinx.Configuration public bool StartFullscreen { get; set; } /// <summary> + /// Show console window + /// </summary> + public bool ShowConsole { get; set; } + + /// <summary> /// Enable or disable keyboard support (Independent from controllers binding) /// </summary> public bool EnableKeyboard { get; set; } diff --git a/Ryujinx/Configuration/ConfigurationState.cs b/Ryujinx/Configuration/ConfigurationState.cs index 0b495ab7..1200fb52 100644 --- a/Ryujinx/Configuration/ConfigurationState.cs +++ b/Ryujinx/Configuration/ConfigurationState.cs @@ -6,6 +6,7 @@ using Ryujinx.Common.Configuration.Hid.Keyboard; using Ryujinx.Common.Logging; using Ryujinx.Configuration.System; using Ryujinx.Configuration.Ui; +using Ryujinx.Ui.Helper; using System; using System.Collections.Generic; @@ -88,6 +89,11 @@ namespace Ryujinx.Configuration /// </summary> public ReactiveObject<bool> StartFullscreen { get; private set; } + /// <summary> + /// Hide / Show Console Window + /// </summary> + public ReactiveObject<bool> ShowConsole { get; private set; } + public UiSection() { GuiColumns = new Columns(); @@ -96,6 +102,8 @@ namespace Ryujinx.Configuration EnableCustomTheme = new ReactiveObject<bool>(); CustomThemePath = new ReactiveObject<string>(); StartFullscreen = new ReactiveObject<bool>(); + ShowConsole = new ReactiveObject<bool>(); + ShowConsole.Event += static (s, e) => { ConsoleHelper.SetConsoleWindowState(e.NewValue); }; } } @@ -508,6 +516,7 @@ namespace Ryujinx.Configuration EnableCustomTheme = Ui.EnableCustomTheme, CustomThemePath = Ui.CustomThemePath, StartFullscreen = Ui.StartFullscreen, + ShowConsole = Ui.ShowConsole, EnableKeyboard = Hid.EnableKeyboard, EnableMouse = Hid.EnableMouse, Hotkeys = Hid.Hotkeys, @@ -574,6 +583,7 @@ namespace Ryujinx.Configuration Ui.EnableCustomTheme.Value = false; Ui.CustomThemePath.Value = ""; Ui.StartFullscreen.Value = false; + Ui.ShowConsole.Value = true; Hid.EnableKeyboard.Value = false; Hid.EnableMouse.Value = false; Hid.Hotkeys.Value = new KeyboardHotkeys @@ -995,7 +1005,7 @@ namespace Ryujinx.Configuration controllerConfig.RangeRight = 1.0f; } } - + configurationFileUpdated = true; } @@ -1007,7 +1017,16 @@ namespace Ryujinx.Configuration configurationFileUpdated = true; } - + + if (configurationFileFormat.Version < 37) + { + Common.Logging.Logger.Warning?.Print(LogClass.Application, $"Outdated configuration version {configurationFileFormat.Version}, migrating to version 37."); + + configurationFileFormat.ShowConsole = true; + + configurationFileUpdated = true; + } + Logger.EnableFileLog.Value = configurationFileFormat.EnableFileLog; Graphics.BackendThreading.Value = configurationFileFormat.BackendThreading; Graphics.ResScale.Value = configurationFileFormat.ResScale; @@ -1061,6 +1080,7 @@ namespace Ryujinx.Configuration Ui.EnableCustomTheme.Value = configurationFileFormat.EnableCustomTheme; Ui.CustomThemePath.Value = configurationFileFormat.CustomThemePath; Ui.StartFullscreen.Value = configurationFileFormat.StartFullscreen; + Ui.ShowConsole.Value = configurationFileFormat.ShowConsole; Hid.EnableKeyboard.Value = configurationFileFormat.EnableKeyboard; Hid.EnableMouse.Value = configurationFileFormat.EnableMouse; Hid.Hotkeys.Value = configurationFileFormat.Hotkeys; diff --git a/Ryujinx/Ui/Helper/ConsoleHelper.cs b/Ryujinx/Ui/Helper/ConsoleHelper.cs new file mode 100644 index 00000000..6f89df02 --- /dev/null +++ b/Ryujinx/Ui/Helper/ConsoleHelper.cs @@ -0,0 +1,49 @@ +using Ryujinx.Common.Logging; +using System; +using System.Runtime.InteropServices; +using System.Runtime.Versioning; + +namespace Ryujinx.Ui.Helper +{ + public static class ConsoleHelper + { + public static bool SetConsoleWindowStateSupported => OperatingSystem.IsWindows(); + + public static void SetConsoleWindowState(bool show) + { + if (OperatingSystem.IsWindows()) + { + SetConsoleWindowStateWindows(show); + } + else if (show == false) + { + Logger.Warning?.Print(LogClass.Application, "OS doesn't support hiding console window"); + } + } + + [SupportedOSPlatform("windows")] + private static void SetConsoleWindowStateWindows(bool show) + { + const int SW_HIDE = 0; + const int SW_SHOW = 5; + + IntPtr hWnd = GetConsoleWindow(); + + if (hWnd == IntPtr.Zero) + { + Logger.Warning?.Print(LogClass.Application, "Attempted to show/hide console window but console window does not exist"); + return; + } + + ShowWindow(hWnd, show ? SW_SHOW : SW_HIDE); + } + + [SupportedOSPlatform("windows")] + [DllImport("kernel32")] + static extern IntPtr GetConsoleWindow(); + + [SupportedOSPlatform("windows")] + [DllImport("user32")] + static extern bool ShowWindow(IntPtr hWnd, int nCmdShow); + } +}
\ No newline at end of file diff --git a/Ryujinx/Ui/MainWindow.cs b/Ryujinx/Ui/MainWindow.cs index 5ab3cf61..32e66ee4 100644 --- a/Ryujinx/Ui/MainWindow.cs +++ b/Ryujinx/Ui/MainWindow.cs @@ -107,6 +107,7 @@ namespace Ryujinx.Ui [GUI] MenuItem _hideUi; [GUI] MenuItem _fullScreen; [GUI] CheckMenuItem _startFullScreen; + [GUI] CheckMenuItem _showConsole; [GUI] CheckMenuItem _favToggle; [GUI] MenuItem _firmwareInstallDirectory; [GUI] MenuItem _firmwareInstallFile; @@ -213,6 +214,9 @@ namespace Ryujinx.Ui _startFullScreen.Active = true; } + _showConsole.Active = ConfigurationState.Instance.Ui.ShowConsole.Value; + _showConsole.Visible = ConsoleHelper.SetConsoleWindowStateSupported; + _actionMenu.Sensitive = false; _pauseEmulation.Sensitive = false; _resumeEmulation.Sensitive = false; @@ -1535,6 +1539,13 @@ namespace Ryujinx.Ui SaveConfig(); } + private void ShowConsole_Toggled(object sender, EventArgs args) + { + ConfigurationState.Instance.Ui.ShowConsole.Value = _showConsole.Active; + + SaveConfig(); + } + private void OptionMenu_StateChanged(object o, StateChangedArgs args) { _manageUserProfiles.Sensitive = _emulationContext == null; diff --git a/Ryujinx/Ui/MainWindow.glade b/Ryujinx/Ui/MainWindow.glade index 595786a3..b7d93e9b 100644 --- a/Ryujinx/Ui/MainWindow.glade +++ b/Ryujinx/Ui/MainWindow.glade @@ -143,6 +143,15 @@ </object> </child> <child> + <object class="GtkCheckMenuItem" id="_showConsole"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes">Show Log Console</property> + <property name="use_underline">True</property> + <signal name="toggled" handler="ShowConsole_Toggled" swapped="no"/> + </object> + </child> + <child> <object class="GtkSeparatorMenuItem"> <property name="visible">True</property> <property name="can_focus">False</property> |