From e29257c52bdd22371de5588c302630f64d23d566 Mon Sep 17 00:00:00 2001 From: Michal Tomecki Date: Sun, 11 Dec 2022 23:15:57 +0100 Subject: [PATCH 1/3] Fixed incorrect startup window position on Linux --- src/Avalonia.X11/X11Window.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Avalonia.X11/X11Window.cs b/src/Avalonia.X11/X11Window.cs index 160401c5fc..955096e18a 100644 --- a/src/Avalonia.X11/X11Window.cs +++ b/src/Avalonia.X11/X11Window.cs @@ -298,7 +298,7 @@ namespace Avalonia.X11 min_height = min.Height }; hints.height_inc = hints.width_inc = 1; - var flags = XSizeHintsFlags.PMinSize | XSizeHintsFlags.PResizeInc | XSizeHintsFlags.PPosition | XSizeHintsFlags.PSize; + var flags = XSizeHintsFlags.PMinSize | XSizeHintsFlags.PResizeInc; // People might be passing double.MaxValue if (max.Width < 100000 && max.Height < 100000) { From 07e9bad0aed1b26f70dd952051261038f11f3a4c Mon Sep 17 00:00:00 2001 From: Michal Tomecki Date: Mon, 12 Dec 2022 12:11:35 +0100 Subject: [PATCH 2/3] Updated Window startup positioning behaviour on Linux to be more consistent with WPF behaviour --- src/Avalonia.X11/X11Window.cs | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/Avalonia.X11/X11Window.cs b/src/Avalonia.X11/X11Window.cs index 955096e18a..62e4441066 100644 --- a/src/Avalonia.X11/X11Window.cs +++ b/src/Avalonia.X11/X11Window.cs @@ -57,6 +57,7 @@ namespace Avalonia.X11 private TransparencyHelper _transparencyHelper; private RawEventGrouper _rawEventGrouper; private bool _useRenderWindow = false; + private bool _usePositioningFlags = false; enum XSyncState { @@ -299,6 +300,9 @@ namespace Avalonia.X11 }; hints.height_inc = hints.width_inc = 1; var flags = XSizeHintsFlags.PMinSize | XSizeHintsFlags.PResizeInc; + if (_usePositioningFlags) + flags |= XSizeHintsFlags.PPosition | XSizeHintsFlags.PSize; + // People might be passing double.MaxValue if (max.Width < 100000 && max.Height < 100000) { @@ -958,6 +962,9 @@ namespace Avalonia.X11 get => _position ?? default; set { + _usePositioningFlags = true; + UpdateSizeHints(null); + var changes = new XWindowChanges { x = (int)value.X, From a5e018f77957d50f6ace60b034f7bf24c0092af0 Mon Sep 17 00:00:00 2001 From: Michal Tomecki Date: Fri, 16 Dec 2022 20:39:43 +0100 Subject: [PATCH 3/3] Changed X11Window/Position UpdateSizeHints to only fire if it's not already set --- src/Avalonia.X11/X11Window.cs | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/Avalonia.X11/X11Window.cs b/src/Avalonia.X11/X11Window.cs index 62e4441066..890b49344c 100644 --- a/src/Avalonia.X11/X11Window.cs +++ b/src/Avalonia.X11/X11Window.cs @@ -962,8 +962,11 @@ namespace Avalonia.X11 get => _position ?? default; set { - _usePositioningFlags = true; - UpdateSizeHints(null); + if(!_usePositioningFlags) + { + _usePositioningFlags = true; + UpdateSizeHints(null); + } var changes = new XWindowChanges {