From c607b1a4dce62c2fdcb4b26c7656aab444c76d27 Mon Sep 17 00:00:00 2001 From: Dan Walmsley Date: Mon, 24 Aug 2020 12:00:53 +0100 Subject: [PATCH 1/4] prevent popup crashing when mainwindow has closed and popup still open. --- src/Avalonia.Native/WindowImplBase.cs | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/Avalonia.Native/WindowImplBase.cs b/src/Avalonia.Native/WindowImplBase.cs index 08c5d51ea0..da008c1e7a 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; } } From 838daf76835c570565d3079a39284f34539f5265 Mon Sep 17 00:00:00 2001 From: Dan Walmsley Date: Mon, 24 Aug 2020 17:18:37 +0100 Subject: [PATCH 2/4] dont make native handle null so closing events can complete. --- src/Avalonia.Native/WindowImplBase.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Avalonia.Native/WindowImplBase.cs b/src/Avalonia.Native/WindowImplBase.cs index da008c1e7a..56cf544d9d 100644 --- a/src/Avalonia.Native/WindowImplBase.cs +++ b/src/Avalonia.Native/WindowImplBase.cs @@ -149,7 +149,6 @@ namespace Avalonia.Native void IAvnWindowBaseEvents.Closed() { var n = _parent._native; - _parent._native = null; try { _parent?.Closed?.Invoke(); @@ -158,6 +157,7 @@ namespace Avalonia.Native { n?.Dispose(); } + _parent._mouse.Dispose(); } From 84f8f75cc5f7647332001f7b9f324496fc04baa7 Mon Sep 17 00:00:00 2001 From: Dan Walmsley Date: Tue, 25 Aug 2020 11:59:36 +0100 Subject: [PATCH 3/4] prevent screens api crashing if it has been disposed. --- src/Avalonia.Native/ScreenImpl.cs | 27 ++++++++++++++++----------- 1 file changed, 16 insertions(+), 11 deletions(-) diff --git a/src/Avalonia.Native/ScreenImpl.cs b/src/Avalonia.Native/ScreenImpl.cs index 0d593bc2f6..c6d751c7ad 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 new List(); } } From 0f87897aaee9b156839ae414f3bce269d6f0092e Mon Sep 17 00:00:00 2001 From: danwalmsley Date: Tue, 25 Aug 2020 14:44:16 +0100 Subject: [PATCH 4/4] Use Array.Empty instead of list. Co-authored-by: jp2masa --- src/Avalonia.Native/ScreenImpl.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Avalonia.Native/ScreenImpl.cs b/src/Avalonia.Native/ScreenImpl.cs index c6d751c7ad..f28be52dd5 100644 --- a/src/Avalonia.Native/ScreenImpl.cs +++ b/src/Avalonia.Native/ScreenImpl.cs @@ -39,7 +39,7 @@ namespace Avalonia.Native return result; } - return new List(); + return Array.Empty(); } }