diff --git a/src/Avalonia.Native/AvaloniaNativeMenuExporter.cs b/src/Avalonia.Native/AvaloniaNativeMenuExporter.cs index 281af31bc2..6c375b8ffb 100644 --- a/src/Avalonia.Native/AvaloniaNativeMenuExporter.cs +++ b/src/Avalonia.Native/AvaloniaNativeMenuExporter.cs @@ -109,7 +109,7 @@ namespace Avalonia.Native { _nativeMenu = _factory.CreateMenu(); - _nativeMenu.Initialise(menu, ""); + _nativeMenu.Initialise(this, menu, ""); } } @@ -151,7 +151,7 @@ namespace Avalonia.Native { _nativeMenu = _factory.CreateMenu(); - _nativeMenu.Initialise(menu, ""); + _nativeMenu.Initialise(this, menu, ""); } } diff --git a/src/Avalonia.Native/IAvnAppMenu.cs b/src/Avalonia.Native/IAvnAppMenu.cs index 94e48cdff1..f45fcb6004 100644 --- a/src/Avalonia.Native/IAvnAppMenu.cs +++ b/src/Avalonia.Native/IAvnAppMenu.cs @@ -9,6 +9,7 @@ namespace Avalonia.Native.Interop { public partial class IAvnAppMenu { + private AvaloniaNativeMenuExporter _exporter; private List _menuItems = new List(); private Dictionary _menuItemLookup = new Dictionary(); private CompositeDisposable _propertyDisposables = new CompositeDisposable(); @@ -56,8 +57,9 @@ namespace Avalonia.Native.Interop return nativeItem; } - internal void Initialise(NativeMenu managedMenu, string title) + internal void Initialise(AvaloniaNativeMenuExporter exporter, NativeMenu managedMenu, string title) { + _exporter = exporter; ManagedMenu = managedMenu; ((INotifyCollectionChanged)ManagedMenu.Items).CollectionChanged += OnMenuItemsChanged; @@ -75,7 +77,7 @@ namespace Avalonia.Native.Interop { ((INotifyCollectionChanged)ManagedMenu.Items).CollectionChanged -= OnMenuItemsChanged; - foreach(var item in _menuItems) + foreach (var item in _menuItems) { item.Deinitialise(); item.Dispose(); @@ -84,7 +86,7 @@ namespace Avalonia.Native.Interop internal void Update(IAvaloniaNativeFactory factory, NativeMenu menu) { - if(menu != ManagedMenu) + if (menu != ManagedMenu) { throw new ArgumentException("The menu being updated does not match.", nameof(menu)); } @@ -112,7 +114,7 @@ namespace Avalonia.Native.Interop if (menu.Items[i] is NativeMenuItem nmi) { - nativeItem.Update(factory, nmi); + nativeItem.Update(_exporter, factory, nmi); } } @@ -124,7 +126,7 @@ namespace Avalonia.Native.Interop private void OnMenuItemsChanged(object sender, NotifyCollectionChangedEventArgs e) { - // update menu items. + _exporter.QueueReset(); } } } diff --git a/src/Avalonia.Native/IAvnAppMenuItem.cs b/src/Avalonia.Native/IAvnAppMenuItem.cs index 699d02caa5..1a031bd6dd 100644 --- a/src/Avalonia.Native/IAvnAppMenuItem.cs +++ b/src/Avalonia.Native/IAvnAppMenuItem.cs @@ -101,7 +101,7 @@ namespace Avalonia.Native.Interop _currentActionDisposable?.Dispose(); } - internal void Update(IAvaloniaNativeFactory factory, NativeMenuItem item) + internal void Update(AvaloniaNativeMenuExporter exporter, IAvaloniaNativeFactory factory, NativeMenuItem item) { if(item != ManagedMenuItem) { @@ -114,7 +114,7 @@ namespace Avalonia.Native.Interop { _subMenu = factory.CreateMenu(); - _subMenu.Initialise(item.Menu, item.Header); + _subMenu.Initialise(exporter, item.Menu, item.Header); } SetSubMenu(_subMenu);