From 4454af5613945b1058fbe16c7b9fcb5cd52b9748 Mon Sep 17 00:00:00 2001 From: Dan Walmsley Date: Tue, 15 Oct 2019 11:58:19 +0100 Subject: [PATCH] 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 { }