diff --git a/native/Avalonia.Native/src/OSX/AvnWindow.mm b/native/Avalonia.Native/src/OSX/AvnWindow.mm
index 0b9ea093ac..9fc7ec4fec 100644
--- a/native/Avalonia.Native/src/OSX/AvnWindow.mm
+++ b/native/Avalonia.Native/src/OSX/AvnWindow.mm
@@ -176,9 +176,10 @@
_isExtended = false;
-#ifdef IS_NSPANEL
- [self setCollectionBehavior:NSWindowCollectionBehaviorCanJoinAllSpaces|NSWindowCollectionBehaviorFullScreenAuxiliary];
-#endif
+ if(self.isDialog)
+ {
+ [self setCollectionBehavior:NSWindowCollectionBehaviorCanJoinAllSpaces|NSWindowCollectionBehaviorFullScreenAuxiliary];
+ }
return self;
}
@@ -260,6 +261,10 @@
-(void) setEnabled:(bool)enable
{
_isEnabled = enable;
+
+ [[self standardWindowButton:NSWindowCloseButton] setEnabled:enable];
+ [[self standardWindowButton:NSWindowMiniaturizeButton] setEnabled:enable];
+ [[self standardWindowButton:NSWindowZoomButton] setEnabled:enable];
}
-(void)becomeKeyWindow
diff --git a/native/Avalonia.Native/src/OSX/WindowImpl.mm b/native/Avalonia.Native/src/OSX/WindowImpl.mm
index 8520e3e470..555e9dff9b 100644
--- a/native/Avalonia.Native/src/OSX/WindowImpl.mm
+++ b/native/Avalonia.Native/src/OSX/WindowImpl.mm
@@ -30,24 +30,12 @@ void WindowImpl::HideOrShowTrafficLights() {
return;
}
- for (id subview in Window.contentView.superview.subviews) {
- if ([subview isKindOfClass:NSClassFromString(@"NSTitlebarContainerView")]) {
- NSView *titlebarView = [subview subviews][0];
- for (id button in titlebarView.subviews) {
- if ([button isKindOfClass:[NSButton class]]) {
- if (_isClientAreaExtended) {
- auto wantsChrome = (_extendClientHints & AvnSystemChrome) || (_extendClientHints & AvnPreferSystemChrome);
-
- [button setHidden:!wantsChrome];
- } else {
- [button setHidden:(_decorations != SystemDecorationsFull)];
- }
-
- [button setWantsLayer:true];
- }
- }
- }
- }
+ bool wantsChrome = (_extendClientHints & AvnSystemChrome) || (_extendClientHints & AvnPreferSystemChrome);
+ bool hasTrafficLights = _isClientAreaExtended ? !wantsChrome : _decorations != SystemDecorationsFull;
+
+ [[Window standardWindowButton:NSWindowCloseButton] setHidden:hasTrafficLights];
+ [[Window standardWindowButton:NSWindowMiniaturizeButton] setHidden:hasTrafficLights];
+ [[Window standardWindowButton:NSWindowZoomButton] setHidden:hasTrafficLights];
}
void WindowImpl::OnInitialiseNSWindow(){
@@ -140,6 +128,8 @@ void WindowImpl::BringToFront()
[Window orderFront:nullptr];
}
+ [Window invalidateShadow];
+
for(auto iterator = _children.begin(); iterator != _children.end(); iterator++)
{
(*iterator)->BringToFront();
diff --git a/samples/ControlCatalog/Pages/DialogsPage.xaml b/samples/ControlCatalog/Pages/DialogsPage.xaml
index 6ac9dcfe22..8a835867b3 100644
--- a/samples/ControlCatalog/Pages/DialogsPage.xaml
+++ b/samples/ControlCatalog/Pages/DialogsPage.xaml
@@ -20,7 +20,7 @@
Text="Window dialogs" />
-
+
diff --git a/samples/ControlCatalog/Pages/DialogsPage.xaml.cs b/samples/ControlCatalog/Pages/DialogsPage.xaml.cs
index bed9f4c62a..1853c83365 100644
--- a/samples/ControlCatalog/Pages/DialogsPage.xaml.cs
+++ b/samples/ControlCatalog/Pages/DialogsPage.xaml.cs
@@ -151,6 +151,7 @@ namespace ControlCatalog.Pages
private Window CreateSampleWindow()
{
Button button;
+ Button dialogButton;
var window = new Window
{
@@ -167,6 +168,12 @@ namespace ControlCatalog.Pages
HorizontalAlignment = HorizontalAlignment.Center,
Content = "Click to close",
IsDefault = true
+ }),
+ (dialogButton = new Button
+ {
+ HorizontalAlignment = HorizontalAlignment.Center,
+ Content = "Dialog",
+ IsDefault = false
})
}
},
@@ -174,6 +181,12 @@ namespace ControlCatalog.Pages
};
button.Click += (_, __) => window.Close();
+ dialogButton.Click += (_, __) =>
+ {
+ var dialog = CreateSampleWindow();
+ dialog.Height = 200;
+ dialog.ShowDialog(window);
+ };
return window;
}