From 45054533013444835fee2093b534260a192df973 Mon Sep 17 00:00:00 2001 From: Coxxs <58-coxxs@users.noreply.git.ryujinx.app> Date: Mon, 27 Oct 2025 01:04:34 +0800 Subject: [PATCH 1/2] Account for Avalonia window height delta to save correct height on exit --- src/Ryujinx/UI/Windows/MainWindow.axaml.cs | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/src/Ryujinx/UI/Windows/MainWindow.axaml.cs b/src/Ryujinx/UI/Windows/MainWindow.axaml.cs index e7934f38a..2d2c9c820 100644 --- a/src/Ryujinx/UI/Windows/MainWindow.axaml.cs +++ b/src/Ryujinx/UI/Windows/MainWindow.axaml.cs @@ -72,6 +72,10 @@ namespace Ryujinx.Ava.UI.Windows // Correctly size window when 'TitleBar' is enabled (Nov. 14, 2024) public readonly double TitleBarHeight; + // Avalonia will make the window higher than we set. + // Store the delta between those 2 values to save the correct window height when exiting. + private double _heightCorrection = 0; + public readonly double StatusBarHeight; public readonly double MenuBarHeight; @@ -468,6 +472,16 @@ namespace Ryujinx.Ava.UI.Windows } } + private void SaveHeightCorrection() + { + // Store the delta between the height we set (ViewModel.WindowHeight) and the actual height returned by Avalonia (Height). + _heightCorrection = Height - ViewModel.WindowHeight; + if (Math.Abs(_heightCorrection) > 50) + { + _heightCorrection = 0; + } + } + private void SaveWindowSizePosition() { ConfigurationState.Instance.UI.WindowStartup.WindowMaximized.Value = WindowState == WindowState.Maximized; @@ -477,8 +491,8 @@ namespace Ryujinx.Ava.UI.Windows { // Since scaling is being applied to the loaded settings from disk (see SetWindowSizePosition() above), scaling should be removed from width/height before saving out to disk // as well - otherwise anyone not using a 1.0 scale factor their window will increase in size with every subsequent launch of the program when scaling is applied (Nov. 14, 2024) - ConfigurationState.Instance.UI.WindowStartup.WindowSizeHeight.Value = (int)(Height / Program.WindowScaleFactor); - ConfigurationState.Instance.UI.WindowStartup.WindowSizeWidth.Value = (int)(Width / Program.WindowScaleFactor); + ConfigurationState.Instance.UI.WindowStartup.WindowSizeHeight.Value = (int)Math.Round((Height - _heightCorrection) / Program.WindowScaleFactor); + ConfigurationState.Instance.UI.WindowStartup.WindowSizeWidth.Value = (int)Math.Round(Width / Program.WindowScaleFactor); ConfigurationState.Instance.UI.WindowStartup.WindowPositionX.Value = Position.X; ConfigurationState.Instance.UI.WindowStartup.WindowPositionY.Value = Position.Y; @@ -539,6 +553,8 @@ namespace Ryujinx.Ava.UI.Windows LoadApplications(); } + Dispatcher.UIThread.Post(SaveHeightCorrection, DispatcherPriority.Loaded); + _ = CheckLaunchState(); } From de0a99b699fb4d997e683a4055cef784b5b0d685 Mon Sep 17 00:00:00 2001 From: Coxxs <58-coxxs@users.noreply.git.ryujinx.app> Date: Mon, 27 Oct 2025 01:41:16 +0800 Subject: [PATCH 2/2] Do not calculate height delta when the window is maximized --- src/Ryujinx/UI/Windows/MainWindow.axaml.cs | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/Ryujinx/UI/Windows/MainWindow.axaml.cs b/src/Ryujinx/UI/Windows/MainWindow.axaml.cs index 2d2c9c820..a6393ac25 100644 --- a/src/Ryujinx/UI/Windows/MainWindow.axaml.cs +++ b/src/Ryujinx/UI/Windows/MainWindow.axaml.cs @@ -474,6 +474,11 @@ namespace Ryujinx.Ava.UI.Windows private void SaveHeightCorrection() { + if (WindowState != WindowState.Normal) + { + return; + } + // Store the delta between the height we set (ViewModel.WindowHeight) and the actual height returned by Avalonia (Height). _heightCorrection = Height - ViewModel.WindowHeight; if (Math.Abs(_heightCorrection) > 50)