Browse Source

simplify switching between appmenu only and appmenu + window menu.

pull/3762/head
Dan Walmsley 6 years ago
parent
commit
77674a8f0c
  1. 3
      native/Avalonia.Native/src/OSX/window.h
  2. 61
      native/Avalonia.Native/src/OSX/window.mm

3
native/Avalonia.Native/src/OSX/window.h

@ -19,7 +19,8 @@ class WindowBaseImpl;
-(void) pollModalSession: (NSModalSession _Nonnull) session; -(void) pollModalSession: (NSModalSession _Nonnull) session;
-(void) restoreParentWindow; -(void) restoreParentWindow;
-(bool) shouldTryToHandleEvents; -(bool) shouldTryToHandleEvents;
-(void) reparentMenu; -(void) showAppMenuOnly;
-(void) showWindowMenuWithAppMenu;
-(void) applyMenu:(NSMenu* _Nullable)menu; -(void) applyMenu:(NSMenu* _Nullable)menu;
-(double) getScaling; -(double) getScaling;
@end @end

61
native/Avalonia.Native/src/OSX/window.mm

@ -246,7 +246,7 @@ public:
if ([Window isKeyWindow]) if ([Window isKeyWindow])
{ {
[Window reparentMenu]; [Window showWindowMenuWithAppMenu];
} }
return S_OK; 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(); auto appMenuItem = ::GetAppMenuItem();
if(appMenuItem != nullptr) if(appMenuItem != nullptr)
{ {
auto appMenu = [appMenuItem menu]; auto appMenu = ::GetAppMenu();
auto nativeAppMenu = dynamic_cast<AvnAppMenu*>(appMenu);
[[appMenuItem menu] removeItem:appMenuItem];
[appMenu removeItem:appMenuItem]; [nativeAppMenu->GetNative() addItem:appMenuItem];
[[_menu itemAtIndex:0] setSubmenu:appMenu]; [NSApp setMenu:nativeAppMenu->GetNative()];
//[_menu insertItem:appMenuItem atIndex:0]; }
else
{
[NSApp setMenu:nullptr];
} }
[NSApp setMenu:_menu];
} }
-(void) applyMenu:(NSMenu *)menu -(void) applyMenu:(NSMenu *)menu
@ -1308,7 +1332,7 @@ NSArray* AllLoopModes = [NSArray arrayWithObjects: NSDefaultRunLoopMode, NSEvent
{ {
if([self activateAppropriateChild: true]) if([self activateAppropriateChild: true])
{ {
[self reparentMenu]; [self showWindowMenuWithAppMenu];
_parent->BaseEvents->Activated(); _parent->BaseEvents->Activated();
[super becomeKeyWindow]; [super becomeKeyWindow];
@ -1360,24 +1384,7 @@ NSArray* AllLoopModes = [NSArray arrayWithObjects: NSDefaultRunLoopMode, NSEvent
if(_parent) if(_parent)
_parent->BaseEvents->Deactivated(); _parent->BaseEvents->Deactivated();
auto appMenuItem = ::GetAppMenuItem(); [self showAppMenuOnly];
if(appMenuItem != nullptr)
{
auto appMenu = ::GetAppMenu();
auto nativeAppMenu = dynamic_cast<AvnAppMenu*>(appMenu);
//[[appMenuItem menu] removeItem::appMenuItem];
//[nativeAppMenu->GetNative() addItem:appMenuItem];
[NSApp setMenu:nativeAppMenu->GetNative()];
}
else
{
[NSApp setMenu:nullptr];
}
[super resignKeyWindow]; [super resignKeyWindow];
} }

Loading…
Cancel
Save