From 168b91fd52db2e157c2947205087b134fb67a5ce Mon Sep 17 00:00:00 2001 From: Dan Walmsley Date: Wed, 18 May 2022 10:53:29 +0100 Subject: [PATCH] [OSX] ensure flyouts, menus and popups can be overlayed on fullscreen windows --- native/Avalonia.Native/src/OSX/AvnWindow.mm | 16 ++++++++++++---- native/Avalonia.Native/src/OSX/PopupImpl.mm | 6 ++++++ 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/native/Avalonia.Native/src/OSX/AvnWindow.mm b/native/Avalonia.Native/src/OSX/AvnWindow.mm index 6ff19ead68..cba5fcfb64 100644 --- a/native/Avalonia.Native/src/OSX/AvnWindow.mm +++ b/native/Avalonia.Native/src/OSX/AvnWindow.mm @@ -174,6 +174,11 @@ [self setBackgroundColor: [NSColor clearColor]]; _isExtended = false; + +#ifdef IS_NSPANEL + [self setCollectionBehavior:NSWindowCollectionBehaviorCanJoinAllSpaces|NSWindowCollectionBehaviorFullScreenAuxiliary]; +#endif + return self; } @@ -212,11 +217,14 @@ // If the window has a child window being shown as a dialog then don't allow it to become the key window. for(NSWindow* uch in [self childWindows]) { - auto ch = static_cast>(uch); - if(ch == nil) + if (![uch conformsToProtocol:@protocol(AvnWindowProtocol)]) + { continue; - if (ch.isDialog) - return false; + } + + id ch = (id ) uch; + + return !ch.isDialog; } return true; diff --git a/native/Avalonia.Native/src/OSX/PopupImpl.mm b/native/Avalonia.Native/src/OSX/PopupImpl.mm index 64a8780158..cf3ecefb3c 100644 --- a/native/Avalonia.Native/src/OSX/PopupImpl.mm +++ b/native/Avalonia.Native/src/OSX/PopupImpl.mm @@ -50,11 +50,17 @@ protected: return S_OK; } } + public: virtual bool ShouldTakeFocusOnShow() override { return false; } + + virtual HRESULT Show(bool activate, bool isDialog) override + { + return WindowBaseImpl::Show(activate, true); + } };