Browse Source

somewhat working updating menus.

pull/3762/head
Dan Walmsley 6 years ago
parent
commit
4e54fb2e46
  1. 20
      src/Avalonia.Native/AvaloniaNativeMenuExporter.cs
  2. 10
      src/Avalonia.Native/IAvnAppMenuItem.cs

20
src/Avalonia.Native/AvaloniaNativeMenuExporter.cs

@ -105,22 +105,30 @@ namespace Avalonia.Native
if (appMenu is null) if (appMenu is null)
{ {
appMenu = _factory.CreateMenu(); appMenu = _factory.CreateMenu();
_factory.SetAppMenu(appMenu);
} }
var menuItem = menu.Parent; var menuItem = menu.Parent;
var appMenuHolder = menuItem?.Parent;
if (menu.Parent is null) if (menu.Parent is null)
{ {
menuItem = new NativeMenuItem(); menuItem = new NativeMenuItem();
}
menuItem.Parent = new NativeMenu(); if(appMenuHolder is null)
{
appMenuHolder = new NativeMenu();
appMenuHolder.Add(menuItem);
} }
menuItem.Menu = menu; menuItem.Menu = menu;
appMenu.Update(this, _factory, menuItem.Parent); appMenu.Update(this, _factory, appMenuHolder);
_factory.SetAppMenu(appMenu);
} }
private void SetMenu(IAvnWindow avnWindow, NativeMenu menu) private void SetMenu(IAvnWindow avnWindow, NativeMenu menu)
@ -130,10 +138,12 @@ namespace Avalonia.Native
if (appMenu is null) if (appMenu is null)
{ {
appMenu = _factory.CreateMenu(); appMenu = _factory.CreateMenu();
avnWindow.SetMainMenu(appMenu);
} }
appMenu.Update(this, _factory, menu); appMenu.Update(this, _factory, menu);
avnWindow.SetMainMenu(appMenu);
} }
} }
} }

10
src/Avalonia.Native/IAvnAppMenuItem.cs

@ -18,9 +18,12 @@ namespace Avalonia.Native.Interop
Managed.PropertyChanged += Item_PropertyChanged; Managed.PropertyChanged += Item_PropertyChanged;
using (var buffer = new Utf8Buffer(item.Header)) if(!string.IsNullOrWhiteSpace(item.Header))
{ {
Title = buffer.DangerousGetHandle(); using (var buffer = new Utf8Buffer(item.Header))
{
Title = buffer.DangerousGetHandle();
}
} }
if (item.Gesture != null) if (item.Gesture != null)
@ -48,7 +51,8 @@ namespace Avalonia.Native.Interop
_subMenu = factory.CreateMenu(); _subMenu = factory.CreateMenu();
} }
_subMenu.Update(exporter, factory, item.Menu); SetSubMenu(_subMenu);
_subMenu.Update(exporter, factory, item.Menu, item.Header);
} }
if (item.Menu == null && _subMenu != null) if (item.Menu == null && _subMenu != null)

Loading…
Cancel
Save