diff --git a/src/Avalonia.Controls/Presenters/ScrollContentPresenter.cs b/src/Avalonia.Controls/Presenters/ScrollContentPresenter.cs index 327cfb7736..5fcb14c858 100644 --- a/src/Avalonia.Controls/Presenters/ScrollContentPresenter.cs +++ b/src/Avalonia.Controls/Presenters/ScrollContentPresenter.cs @@ -257,15 +257,7 @@ namespace Avalonia.Controls.Presenters return base.ArrangeOverride(finalSize); } - try - { - _arranging = true; - return ArrangeWithAnchoring(finalSize); - } - finally - { - _arranging = false; - } + return ArrangeWithAnchoring(finalSize); } private Size ArrangeWithAnchoring(Size finalSize) @@ -316,7 +308,17 @@ namespace Avalonia.Controls.Presenters } Extent = newExtent; - Offset = newOffset; + + try + { + _arranging = true; + Offset = newOffset; + } + finally + { + _arranging = false; + } + ArrangeOverrideImpl(size, -Offset); } diff --git a/src/Avalonia.Native/ScreenImpl.cs b/src/Avalonia.Native/ScreenImpl.cs index 0d593bc2f6..f28be52dd5 100644 --- a/src/Avalonia.Native/ScreenImpl.cs +++ b/src/Avalonia.Native/ScreenImpl.cs @@ -20,21 +20,26 @@ namespace Avalonia.Native { get { - var count = ScreenCount; - var result = new Screen[count]; - - for(int i = 0; i < count; i++) + if (_native != null) { - var screen = _native.GetScreen(i); + var count = ScreenCount; + var result = new Screen[count]; + + for (int i = 0; i < count; i++) + { + var screen = _native.GetScreen(i); + + result[i] = new Screen( + screen.PixelDensity, + screen.Bounds.ToAvaloniaPixelRect(), + screen.WorkingArea.ToAvaloniaPixelRect(), + screen.Primary); + } - result[i] = new Screen( - screen.PixelDensity, - screen.Bounds.ToAvaloniaPixelRect(), - screen.WorkingArea.ToAvaloniaPixelRect(), - screen.Primary); + return result; } - return result; + return Array.Empty(); } } diff --git a/src/Avalonia.Native/WindowImplBase.cs b/src/Avalonia.Native/WindowImplBase.cs index 08c5d51ea0..56cf544d9d 100644 --- a/src/Avalonia.Native/WindowImplBase.cs +++ b/src/Avalonia.Native/WindowImplBase.cs @@ -94,8 +94,13 @@ namespace Avalonia.Native { get { - var s = _native.GetClientSize(); - return new Size(s.Width, s.Height); + if (_native != null) + { + var s = _native.GetClientSize(); + return new Size(s.Width, s.Height); + } + + return default; } } @@ -144,7 +149,6 @@ namespace Avalonia.Native void IAvnWindowBaseEvents.Closed() { var n = _parent._native; - _parent._native = null; try { _parent?.Closed?.Invoke(); @@ -153,6 +157,7 @@ namespace Avalonia.Native { n?.Dispose(); } + _parent._mouse.Dispose(); }