From 4454af5613945b1058fbe16c7b9fcb5cd52b9748 Mon Sep 17 00:00:00 2001 From: Dan Walmsley Date: Tue, 15 Oct 2019 11:58:19 +0100 Subject: [PATCH 1/2] implement osx quit menu item. --- native/Avalonia.Native/src/OSX/menu.mm | 4 +++- native/Avalonia.Native/src/OSX/window.h | 1 + native/Avalonia.Native/src/OSX/window.mm | 10 ++++++++++ 3 files changed, 14 insertions(+), 1 deletion(-) diff --git a/native/Avalonia.Native/src/OSX/menu.mm b/native/Avalonia.Native/src/OSX/menu.mm index d9dfe36444..1d2f075ccb 100644 --- a/native/Avalonia.Native/src/OSX/menu.mm +++ b/native/Avalonia.Native/src/OSX/menu.mm @@ -1,6 +1,7 @@ #include "common.h" #include "menu.h" +#include "window.h" @implementation AvnMenu @end @@ -283,7 +284,8 @@ extern void SetAppMenu (NSString* appName, IAvnAppMenu* menu) auto quitItem = [[NSMenuItem alloc] init]; quitItem.title = [@"Quit " stringByAppendingString:appName]; quitItem.keyEquivalent = @"q"; - quitItem.action = @selector(terminate:); + quitItem.target = [AvnWindow class]; + quitItem.action = @selector(closeAll); [appMenu addItem:quitItem]; } else diff --git a/native/Avalonia.Native/src/OSX/window.h b/native/Avalonia.Native/src/OSX/window.h index 557e19e7a8..932bc56a2e 100644 --- a/native/Avalonia.Native/src/OSX/window.h +++ b/native/Avalonia.Native/src/OSX/window.h @@ -15,6 +15,7 @@ class WindowBaseImpl; @end @interface AvnWindow : NSWindow ++(void) closeAll; -(AvnWindow* _Nonnull) initWithParent: (WindowBaseImpl* _Nonnull) parent; -(void) setCanBecomeKeyAndMain; -(void) pollModalSession: (NSModalSession _Nonnull) session; diff --git a/native/Avalonia.Native/src/OSX/window.mm b/native/Avalonia.Native/src/OSX/window.mm index dbb437243a..fc6ff0f32c 100644 --- a/native/Avalonia.Native/src/OSX/window.mm +++ b/native/Avalonia.Native/src/OSX/window.mm @@ -1076,6 +1076,16 @@ NSArray* AllLoopModes = [NSArray arrayWithObjects: NSDefaultRunLoopMode, NSEvent bool _isAppMenuApplied; } ++(void)closeAll +{ + auto numWindows = [[NSApp windows] count]; + + for(int i = 0; i < numWindows; i++) + { + [[[NSApp windows] objectAtIndex:i] performClose:nil]; + } +} + - (void)dealloc { } From 142a41b3863cbce4fe40a7bbf30ee48c0c28b672 Mon Sep 17 00:00:00 2001 From: Dan Walmsley Date: Tue, 15 Oct 2019 12:16:00 +0100 Subject: [PATCH 2/2] make copy of array. --- native/Avalonia.Native/src/OSX/window.mm | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/native/Avalonia.Native/src/OSX/window.mm b/native/Avalonia.Native/src/OSX/window.mm index fc6ff0f32c..9c7e9323e0 100644 --- a/native/Avalonia.Native/src/OSX/window.mm +++ b/native/Avalonia.Native/src/OSX/window.mm @@ -1078,11 +1078,12 @@ NSArray* AllLoopModes = [NSArray arrayWithObjects: NSDefaultRunLoopMode, NSEvent +(void)closeAll { - auto numWindows = [[NSApp windows] count]; + NSArray* windows = [NSArray arrayWithArray:[NSApp windows]]; + auto numWindows = [windows count]; for(int i = 0; i < numWindows; i++) { - [[[NSApp windows] objectAtIndex:i] performClose:nil]; + [[windows objectAtIndex:i] performClose:nil]; } }