From 0cf079b47f31318daaf22098451c2b19907e004d Mon Sep 17 00:00:00 2001 From: Dan Walmsley Date: Thu, 9 Apr 2020 12:18:58 -0300 Subject: [PATCH] only obtain object from managed side once. --- .../AvaloniaNativeMenuExporter.cs | 36 +++++++++++-------- 1 file changed, 21 insertions(+), 15 deletions(-) diff --git a/src/Avalonia.Native/AvaloniaNativeMenuExporter.cs b/src/Avalonia.Native/AvaloniaNativeMenuExporter.cs index 914b57addc..86fce67ed0 100644 --- a/src/Avalonia.Native/AvaloniaNativeMenuExporter.cs +++ b/src/Avalonia.Native/AvaloniaNativeMenuExporter.cs @@ -15,6 +15,7 @@ namespace Avalonia.Native private bool _exported = false; private IAvnWindow _nativeWindow; private NativeMenu _menu; + private IAvnAppMenu _nativeMenu; public AvaloniaNativeMenuExporter(IAvnWindow nativeWindow, IAvaloniaNativeFactory factory) { @@ -81,7 +82,7 @@ namespace Avalonia.Native } else { - if(_menu != null) + if (_menu != null) { SetMenu(_nativeWindow, _menu); } @@ -100,11 +101,14 @@ namespace Avalonia.Native private void SetMenu(NativeMenu menu) { - var appMenu = _factory.ObtainAppMenu(); - - if (appMenu is null) + if (_nativeMenu is null) { - appMenu = _factory.CreateMenu(); + _nativeMenu = _factory.ObtainAppMenu(); + + if (_nativeMenu is null) + { + _nativeMenu = _factory.CreateMenu(); + } } var menuItem = menu.Parent; @@ -116,7 +120,7 @@ namespace Avalonia.Native menuItem = new NativeMenuItem(); } - if(appMenuHolder is null) + if (appMenuHolder is null) { appMenuHolder = new NativeMenu(); @@ -125,24 +129,26 @@ namespace Avalonia.Native 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) { - var appMenu = avnWindow.ObtainMainMenu(); - - if (appMenu is null) + if (_nativeMenu 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); } } }