浏览代码

Merge pull request #4548 from AvaloniaUI/fixes/osx-tooltip-crash-on-mainwindow-close

prevent popup crashing when mainwindow has closed and popup still open.
danwalmsley 5 年之前
父节点
当前提交
af24821079
共有 2 个文件被更改,包括 24 次插入14 次删除
  1. 16 11
      src/Avalonia.Native/ScreenImpl.cs
  2. 8 3
      src/Avalonia.Native/WindowImplBase.cs

+ 16 - 11
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<Screen>();
             }
         }
 

+ 8 - 3
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();
             }