Browse Source

Merge branch 'exported-menus' of https://github.com/AvaloniaUI/Avalonia into exported-menus

pull/2978/head
Dan Walmsley 7 years ago
parent
commit
56071918c6
  1. 21
      native/Avalonia.Native/src/OSX/menu.mm
  2. 23
      src/Avalonia.Native/AvaloniaNativeMenuExporter.cs

21
native/Avalonia.Native/src/OSX/menu.mm

@ -219,16 +219,22 @@ extern void SetAppMenu (NSString* appName, IAvnAppMenu* menu)
auto currentMenu = [s_appMenuItem menu];
[currentMenu removeItem:s_appMenuItem];
if (currentMenu != nullptr)
{
[currentMenu removeItem:s_appMenuItem];
}
s_appMenuItem = [nativeMenu->GetNative() itemAtIndex:0];
if (currentMenu == nullptr)
{
currentMenu = [s_appMenuItem menu];
}
[[s_appMenuItem menu] removeItem:s_appMenuItem];
[currentMenu insertItem:s_appMenuItem atIndex:0];
//[NSApp setMenu:nativeMenu->GetNative()];
auto appMenu = [s_appMenuItem submenu];
[appMenu addItem:[NSMenuItem separatorItem]];
@ -244,14 +250,14 @@ extern void SetAppMenu (NSString* appName, IAvnAppMenu* menu)
// Hide Application
auto hideItem = [[NSMenuItem alloc] initWithTitle:[@"Hide " stringByAppendingString:appName] action:@selector(hide:) keyEquivalent:@"h"];
//hideItem.target = self;
[appMenu addItem:hideItem];
// Hide Others
auto hideAllOthersItem = [[NSMenuItem alloc] initWithTitle:@"Hide Others"
action:@selector(hideOtherApplications:)
keyEquivalent:@"h"];
//hideAllOthersItem.target = self;
hideAllOthersItem.keyEquivalentModifierMask = NSEventModifierFlagCommand | NSEventModifierFlagOption;
[appMenu addItem:hideAllOthersItem];
@ -259,7 +265,7 @@ extern void SetAppMenu (NSString* appName, IAvnAppMenu* menu)
auto showAllItem = [[NSMenuItem alloc] initWithTitle:@"Show All"
action:@selector(unhideAllApplications:)
keyEquivalent:@""];
//showAllItem.target = self;
[appMenu addItem:showAllItem];
[appMenu addItem:[NSMenuItem separatorItem]];
@ -268,9 +274,6 @@ extern void SetAppMenu (NSString* appName, IAvnAppMenu* menu)
auto quitItem = [[NSMenuItem alloc] init];
quitItem.title = [@"Quit " stringByAppendingString:appName];
quitItem.keyEquivalent = @"q";
// This will remain true until synced with a QCocoaMenuItem.
// This way, we will always have a functional Quit menu item
// even if no QAction is added.
quitItem.action = @selector(terminate:);
[appMenu addItem:quitItem];
}

23
src/Avalonia.Native/AvaloniaNativeMenuExporter.cs

@ -113,7 +113,11 @@ namespace Avalonia.Native
if(_nativeWindow is null)
{
_menu = NativeMenu.GetMenu(Application.Current);
SetMenu(_menu?.Items);
if(_menu != null)
{
SetMenu(_menu);
}
}
else
{
@ -259,13 +263,8 @@ namespace Avalonia.Native
}
}
private void SetMenu(ICollection<NativeMenuItemBase> menuItems)
private void SetMenu(NativeMenu menu)
{
if (menuItems is null)
{
menuItems = new List<NativeMenuItemBase>();
}
var appMenu = _factory.ObtainAppMenu();
if (appMenu is null)
@ -273,15 +272,15 @@ namespace Avalonia.Native
appMenu = _factory.CreateMenu();
}
var menuItem = new NativeMenuItem();
var menuItem = menu.Parent;
menuItem.Menu = new NativeMenu();
foreach (var item in menuItems)
if(menu.Parent is null)
{
menuItem.Menu.Add(item);
menuItem = new NativeMenuItem();
}
menuItem.Menu = menu;
appMenu.Clear();
AddItemsToMenu(appMenu, new List<NativeMenuItemBase> { menuItem });

Loading…
Cancel
Save