From 77674a8f0c745dd6ed56b405fb9aa98d41e483ba Mon Sep 17 00:00:00 2001 From: Dan Walmsley Date: Mon, 27 Apr 2020 15:44:11 -0300 Subject: [PATCH] simplify switching between appmenu only and appmenu + window menu. --- native/Avalonia.Native/src/OSX/window.h | 3 +- native/Avalonia.Native/src/OSX/window.mm | 61 +++++++++++++----------- 2 files changed, 36 insertions(+), 28 deletions(-) diff --git a/native/Avalonia.Native/src/OSX/window.h b/native/Avalonia.Native/src/OSX/window.h index e6eeed94a1..505900d584 100644 --- a/native/Avalonia.Native/src/OSX/window.h +++ b/native/Avalonia.Native/src/OSX/window.h @@ -19,7 +19,8 @@ class WindowBaseImpl; -(void) pollModalSession: (NSModalSession _Nonnull) session; -(void) restoreParentWindow; -(bool) shouldTryToHandleEvents; --(void) reparentMenu; +-(void) showAppMenuOnly; +-(void) showWindowMenuWithAppMenu; -(void) applyMenu:(NSMenu* _Nullable)menu; -(double) getScaling; @end diff --git a/native/Avalonia.Native/src/OSX/window.mm b/native/Avalonia.Native/src/OSX/window.mm index 9e8a0b30d3..ece790150c 100644 --- a/native/Avalonia.Native/src/OSX/window.mm +++ b/native/Avalonia.Native/src/OSX/window.mm @@ -246,7 +246,7 @@ public: if ([Window isKeyWindow]) { - [Window reparentMenu]; + [Window showWindowMenuWithAppMenu]; } return S_OK; @@ -1181,21 +1181,45 @@ NSArray* AllLoopModes = [NSArray arrayWithObjects: NSDefaultRunLoopMode, NSEvent } } --(void) reparentMenu +-(void) showWindowMenuWithAppMenu +{ + if(_menu != nullptr) + { + auto appMenuItem = ::GetAppMenuItem(); + + if(appMenuItem != nullptr) + { + auto appMenu = [appMenuItem menu]; + + [appMenu removeItem:appMenuItem]; + + [_menu insertItem:appMenuItem atIndex:0]; + } + + [NSApp setMenu:_menu]; + } +} + +-(void) showAppMenuOnly { auto appMenuItem = ::GetAppMenuItem(); if(appMenuItem != nullptr) { - auto appMenu = [appMenuItem menu]; + auto appMenu = ::GetAppMenu(); + + auto nativeAppMenu = dynamic_cast(appMenu); + + [[appMenuItem menu] removeItem:appMenuItem]; - [appMenu removeItem:appMenuItem]; + [nativeAppMenu->GetNative() addItem:appMenuItem]; - [[_menu itemAtIndex:0] setSubmenu:appMenu]; - //[_menu insertItem:appMenuItem atIndex:0]; + [NSApp setMenu:nativeAppMenu->GetNative()]; + } + else + { + [NSApp setMenu:nullptr]; } - - [NSApp setMenu:_menu]; } -(void) applyMenu:(NSMenu *)menu @@ -1308,7 +1332,7 @@ NSArray* AllLoopModes = [NSArray arrayWithObjects: NSDefaultRunLoopMode, NSEvent { if([self activateAppropriateChild: true]) { - [self reparentMenu]; + [self showWindowMenuWithAppMenu]; _parent->BaseEvents->Activated(); [super becomeKeyWindow]; @@ -1360,24 +1384,7 @@ NSArray* AllLoopModes = [NSArray arrayWithObjects: NSDefaultRunLoopMode, NSEvent if(_parent) _parent->BaseEvents->Deactivated(); - auto appMenuItem = ::GetAppMenuItem(); - - if(appMenuItem != nullptr) - { - auto appMenu = ::GetAppMenu(); - - auto nativeAppMenu = dynamic_cast(appMenu); - - //[[appMenuItem menu] removeItem::appMenuItem]; - - //[nativeAppMenu->GetNative() addItem:appMenuItem]; - - [NSApp setMenu:nativeAppMenu->GetNative()]; - } - else - { - [NSApp setMenu:nullptr]; - } + [self showAppMenuOnly]; [super resignKeyWindow]; }