From 5b68f3ef606d4fe3474226ad4aeccd858eaf19a9 Mon Sep 17 00:00:00 2001 From: Maxwell Katz Date: Tue, 14 Jan 2025 23:39:32 -0800 Subject: [PATCH] End/close AppKit sheets attached on window when we hide it (#17968) --- native/Avalonia.Native/src/OSX/WindowBaseImpl.mm | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/native/Avalonia.Native/src/OSX/WindowBaseImpl.mm b/native/Avalonia.Native/src/OSX/WindowBaseImpl.mm index 2136428db4..1e2e22d29e 100644 --- a/native/Avalonia.Native/src/OSX/WindowBaseImpl.mm +++ b/native/Avalonia.Native/src/OSX/WindowBaseImpl.mm @@ -143,6 +143,19 @@ HRESULT WindowBaseImpl::Hide() { @autoreleasepool { if (Window != nullptr) { + + // If window is hidden without ending attached sheet first, it will stuck in "order out" state, + // and block any new sheets from being attached. + // Additionaly, we don't know if user would define any custom panels, so we only end/close file dialog sheets. + auto attachedSheet = Window.attachedSheet; + if (attachedSheet + && ([attachedSheet isKindOfClass: [NSOpenPanel class]] + || [attachedSheet isKindOfClass: [NSSavePanel class]])) + { + [Window endSheet:attachedSheet]; + [attachedSheet close]; + } + auto frame = [Window frame]; AvnPoint point;