diff --git a/src/Ryujinx.UI.Common/Configuration/ConfigurationFileFormat.cs b/src/Ryujinx.UI.Common/Configuration/ConfigurationFileFormat.cs
index 0f6c21ef24..64fbe891a4 100644
--- a/src/Ryujinx.UI.Common/Configuration/ConfigurationFileFormat.cs
+++ b/src/Ryujinx.UI.Common/Configuration/ConfigurationFileFormat.cs
@@ -167,6 +167,11 @@ namespace Ryujinx.UI.Common.Configuration
///
public HideCursorMode HideCursor { get; set; }
+ ///
+ /// A time limit when the cursor will hide, if the [HideCursorMode] is [On Idle].
+ ///
+ public int CursorHideIdleTime { get; set; }
+
///
/// Enables or disables Vertical Sync
///
diff --git a/src/Ryujinx.UI.Common/Configuration/ConfigurationState.cs b/src/Ryujinx.UI.Common/Configuration/ConfigurationState.cs
index b7f36087cb..140cfd9280 100644
--- a/src/Ryujinx.UI.Common/Configuration/ConfigurationState.cs
+++ b/src/Ryujinx.UI.Common/Configuration/ConfigurationState.cs
@@ -631,6 +631,11 @@ namespace Ryujinx.UI.Common.Configuration
///
public ReactiveObject HideCursor { get; private set; }
+ ///
+ /// Time Limit for Hide Cursor on Idle
+ ///
+ public ReactiveObject CursorHideIdleTime { get; private set; }
+
private ConfigurationState()
{
UI = new UISection();
@@ -643,6 +648,7 @@ namespace Ryujinx.UI.Common.Configuration
CheckUpdatesOnStart = new ReactiveObject();
ShowConfirmExit = new ReactiveObject();
HideCursor = new ReactiveObject();
+ CursorHideIdleTime = new ReactiveObject();
}
public ConfigurationFileFormat ToFileFormat()
@@ -679,6 +685,7 @@ namespace Ryujinx.UI.Common.Configuration
CheckUpdatesOnStart = CheckUpdatesOnStart,
ShowConfirmExit = ShowConfirmExit,
HideCursor = HideCursor,
+ CursorHideIdleTime = CursorHideIdleTime,
EnableVsync = Graphics.EnableVsync,
EnableShaderCache = Graphics.EnableShaderCache,
EnableTextureRecompression = Graphics.EnableTextureRecompression,
@@ -1077,6 +1084,8 @@ namespace Ryujinx.UI.Common.Configuration
configurationFileFormat.HideCursor = HideCursorMode.Never;
+ configurationFileFormat.CursorHideIdleTime = 5;
+
configurationFileUpdated = true;
}
@@ -1473,6 +1482,7 @@ namespace Ryujinx.UI.Common.Configuration
CheckUpdatesOnStart.Value = configurationFileFormat.CheckUpdatesOnStart;
ShowConfirmExit.Value = configurationFileFormat.ShowConfirmExit;
HideCursor.Value = configurationFileFormat.HideCursor;
+ CursorHideIdleTime.Value = configurationFileFormat.CursorHideIdleTime;
Graphics.EnableVsync.Value = configurationFileFormat.EnableVsync;
Graphics.EnableShaderCache.Value = configurationFileFormat.EnableShaderCache;
Graphics.EnableTextureRecompression.Value = configurationFileFormat.EnableTextureRecompression;
diff --git a/src/Ryujinx/AppHost.cs b/src/Ryujinx/AppHost.cs
index 04cec95798..51ce208b7d 100644
--- a/src/Ryujinx/AppHost.cs
+++ b/src/Ryujinx/AppHost.cs
@@ -65,7 +65,7 @@ namespace Ryujinx.Ava
{
internal class AppHost
{
- private const int CursorHideIdleTime = 5; // Hide Cursor seconds.
+ private readonly int CursorHideIdleTime; // Hide Cursor seconds.
private const float MaxResolutionScale = 4.0f; // Max resolution hotkeys can scale to before wrapping.
private const int TargetFps = 60;
private const float VolumeDelta = 0.05f;
@@ -144,6 +144,8 @@ namespace Ryujinx.Ava
_glLogLevel = ConfigurationState.Instance.Logger.GraphicsDebugLevel;
_topLevel = topLevel;
+ CursorHideIdleTime = ConfigurationState.Instance.CursorHideIdleTime;
+
_inputManager.SetMouseDriver(new AvaloniaMouseDriver(_topLevel, renderer));
_keyboardInterface = (IKeyboard)_inputManager.KeyboardDriver.GetGamepad("0");
diff --git a/src/Ryujinx/Assets/Locales/en_US.json b/src/Ryujinx/Assets/Locales/en_US.json
index 2febf90ec3..675e2eaee1 100644
--- a/src/Ryujinx/Assets/Locales/en_US.json
+++ b/src/Ryujinx/Assets/Locales/en_US.json
@@ -96,6 +96,7 @@
"SettingsTabGeneralHideCursorNever": "Never",
"SettingsTabGeneralHideCursorOnIdle": "On Idle",
"SettingsTabGeneralHideCursorAlways": "Always",
+ "SettingsTabGeneralCursorHideIdleTime": "CursorHideIdleTime",
"SettingsTabGeneralGameDirectories": "Game Directories",
"SettingsTabGeneralAdd": "Add",
"SettingsTabGeneralRemove": "Remove",
diff --git a/src/Ryujinx/UI/ViewModels/SettingsViewModel.cs b/src/Ryujinx/UI/ViewModels/SettingsViewModel.cs
index bcaa086000..699b79d693 100644
--- a/src/Ryujinx/UI/ViewModels/SettingsViewModel.cs
+++ b/src/Ryujinx/UI/ViewModels/SettingsViewModel.cs
@@ -133,6 +133,7 @@ namespace Ryujinx.Ava.UI.ViewModels
public bool CheckUpdatesOnStart { get; set; }
public bool ShowConfirmExit { get; set; }
public int HideCursor { get; set; }
+ public int CursorHideIdleTime { get; set; }
public bool EnableDockedMode { get; set; }
public bool EnableKeyboard { get; set; }
public bool EnableMouse { get; set; }
@@ -406,6 +407,7 @@ namespace Ryujinx.Ava.UI.ViewModels
CheckUpdatesOnStart = config.CheckUpdatesOnStart;
ShowConfirmExit = config.ShowConfirmExit;
HideCursor = (int)config.HideCursor.Value;
+ CursorHideIdleTime = config.CursorHideIdleTime.Value;
GameDirectories.Clear();
GameDirectories.AddRange(config.UI.GameDirs.Value);
@@ -490,6 +492,7 @@ namespace Ryujinx.Ava.UI.ViewModels
config.CheckUpdatesOnStart.Value = CheckUpdatesOnStart;
config.ShowConfirmExit.Value = ShowConfirmExit;
config.HideCursor.Value = (HideCursorMode)HideCursor;
+ config.CursorHideIdleTime.Value = CursorHideIdleTime;
if (_directoryChanged)
{
diff --git a/src/Ryujinx/UI/Views/Settings/SettingsUIView.axaml b/src/Ryujinx/UI/Views/Settings/SettingsUIView.axaml
index 6504637e6c..e9ef71b029 100644
--- a/src/Ryujinx/UI/Views/Settings/SettingsUIView.axaml
+++ b/src/Ryujinx/UI/Views/Settings/SettingsUIView.axaml
@@ -1,10 +1,11 @@
-
@@ -53,6 +54,16 @@
+
+