Browse Source

only obtain object from managed side once.

pull/3762/head
Dan Walmsley 7 years ago
parent
commit
0cf079b47f
  1. 36
      src/Avalonia.Native/AvaloniaNativeMenuExporter.cs

36
src/Avalonia.Native/AvaloniaNativeMenuExporter.cs

@ -15,6 +15,7 @@ namespace Avalonia.Native
private bool _exported = false; private bool _exported = false;
private IAvnWindow _nativeWindow; private IAvnWindow _nativeWindow;
private NativeMenu _menu; private NativeMenu _menu;
private IAvnAppMenu _nativeMenu;
public AvaloniaNativeMenuExporter(IAvnWindow nativeWindow, IAvaloniaNativeFactory factory) public AvaloniaNativeMenuExporter(IAvnWindow nativeWindow, IAvaloniaNativeFactory factory)
{ {
@ -81,7 +82,7 @@ namespace Avalonia.Native
} }
else else
{ {
if(_menu != null) if (_menu != null)
{ {
SetMenu(_nativeWindow, _menu); SetMenu(_nativeWindow, _menu);
} }
@ -100,11 +101,14 @@ namespace Avalonia.Native
private void SetMenu(NativeMenu menu) private void SetMenu(NativeMenu menu)
{ {
var appMenu = _factory.ObtainAppMenu(); if (_nativeMenu is null)
if (appMenu is null)
{ {
appMenu = _factory.CreateMenu(); _nativeMenu = _factory.ObtainAppMenu();
if (_nativeMenu is null)
{
_nativeMenu = _factory.CreateMenu();
}
} }
var menuItem = menu.Parent; var menuItem = menu.Parent;
@ -116,7 +120,7 @@ namespace Avalonia.Native
menuItem = new NativeMenuItem(); menuItem = new NativeMenuItem();
} }
if(appMenuHolder is null) if (appMenuHolder is null)
{ {
appMenuHolder = new NativeMenu(); appMenuHolder = new NativeMenu();
@ -125,24 +129,26 @@ namespace Avalonia.Native
menuItem.Menu = menu; menuItem.Menu = menu;
appMenu.Update(this, _factory, appMenuHolder); _nativeMenu.Update(this, _factory, appMenuHolder);
_factory.SetAppMenu(appMenu); _factory.SetAppMenu(_nativeMenu);
} }
private void SetMenu(IAvnWindow avnWindow, NativeMenu menu) private void SetMenu(IAvnWindow avnWindow, NativeMenu menu)
{ {
var appMenu = avnWindow.ObtainMainMenu(); if (_nativeMenu is null)
if (appMenu is null)
{ {
appMenu = _factory.CreateMenu(); _nativeMenu = avnWindow.ObtainMainMenu();
if (_nativeMenu is null)
{
_nativeMenu = _factory.CreateMenu();
}
} }
appMenu.Update(this, _factory, menu); _nativeMenu.Update(this, _factory, menu);
avnWindow.SetMainMenu(appMenu); avnWindow.SetMainMenu(_nativeMenu);
} }
} }
} }

Loading…
Cancel
Save