From 58a20b610940dd559581dedf794578b185484098 Mon Sep 17 00:00:00 2001 From: Nikita Tsukanov Date: Fri, 3 Apr 2020 17:23:06 +0300 Subject: [PATCH] [X11] Emulate synchronous resize/move events until window is mapped for the first time --- src/Avalonia.X11/X11Window.cs | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/Avalonia.X11/X11Window.cs b/src/Avalonia.X11/X11Window.cs index 8419e7dab2..a24042184c 100644 --- a/src/Avalonia.X11/X11Window.cs +++ b/src/Avalonia.X11/X11Window.cs @@ -41,6 +41,7 @@ namespace Avalonia.X11 private IntPtr _xic; private IntPtr _renderHandle; private bool _mapped; + private bool _wasMappedAtLeastOnce = false; private HashSet _transientChildren = new HashSet(); private X11Window _transientParent; private double? _scalingOverride; @@ -769,6 +770,7 @@ namespace Avalonia.X11 void ShowCore() { + _wasMappedAtLeastOnce = true; XMapWindow(_x11.Display, _handle); XFlush(_x11.Display); } @@ -816,7 +818,7 @@ namespace Avalonia.X11 XConfigureResizeWindow(_x11.Display, _renderHandle, pixelSize); XFlush(_x11.Display); - if (force || (_popup && needImmediatePopupResize)) + if (force || !_wasMappedAtLeastOnce || (_popup && needImmediatePopupResize)) { _realSize = pixelSize; Resized?.Invoke(ClientSize); @@ -857,6 +859,11 @@ namespace Avalonia.X11 XConfigureWindow(_x11.Display, _handle, ChangeWindowFlags.CWX | ChangeWindowFlags.CWY, ref changes); XFlush(_x11.Display); + if (!_wasMappedAtLeastOnce) + { + _position = value; + PositionChanged?.Invoke(value); + } } }