浏览代码

Merge pull request #10427 from AvaloniaUI/fixes/macos-close-window-zorder

macOS: Fix window order breaking when closing modal dialog
Dan Walmsley 2 年之前
父节点
当前提交
3596149f4b

+ 4 - 2
native/Avalonia.Native/src/OSX/AvnWindow.mm

@@ -292,12 +292,14 @@
 {
     if (_parent == nullptr)
         return;
-        
+    
     _parent->BringToFront();
     
     dispatch_async(dispatch_get_main_queue(), ^{
         @try {
-        [self invalidateShadow];
+            [self invalidateShadow];
+            if (self->_parent != nullptr)
+                self->_parent->BringToFront();
         }
         @finally{
         }

+ 12 - 0
tests/Avalonia.IntegrationTests.Appium/WindowTests_MacOS.cs

@@ -150,6 +150,18 @@ namespace Avalonia.IntegrationTests.Appium
             windowState = mainWindow.FindElementByAccessibilityId("MainWindowState");
             Assert.Equal("Normal", windowState.Text);
         }
+        
+        [PlatformFact(TestPlatforms.MacOS)]
+        public void WindowOrder_Owned_Dialog_Stays_InFront_Of_Parent_After_Modal_Closed()
+        {
+            using (OpenWindow(new PixelSize(200, 300), ShowWindowMode.Owned, WindowStartupLocation.Manual))
+            {
+                OpenWindow(null, ShowWindowMode.Modal, WindowStartupLocation.Manual).Dispose();
+                
+                var secondaryWindowIndex = GetWindowOrder("SecondaryWindow");
+                Assert.Equal(1, secondaryWindowIndex);
+            }
+        }
 
         [PlatformFact(TestPlatforms.MacOS)]
         public void Does_Not_Switch_Space_From_FullScreen_To_Main_Desktop_When_FullScreen_Window_Clicked()