From 06f57f7e4414f3f7082067dc1e1c32d078d5620b Mon Sep 17 00:00:00 2001 From: Dan Walmsley Date: Thu, 9 Apr 2020 10:53:56 -0300 Subject: [PATCH] Insert Native Menus by index instead of just adding them in order. --- native/Avalonia.Native/inc/avalonia-native.h | 2 +- native/Avalonia.Native/src/OSX/menu.h | 2 +- native/Avalonia.Native/src/OSX/menu.mm | 4 ++-- src/Avalonia.Native/IAvnAppMenu.cs | 6 +++--- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/native/Avalonia.Native/inc/avalonia-native.h b/native/Avalonia.Native/inc/avalonia-native.h index 3475eff654..ade2afe014 100644 --- a/native/Avalonia.Native/inc/avalonia-native.h +++ b/native/Avalonia.Native/inc/avalonia-native.h @@ -390,7 +390,7 @@ AVNCOM(IAvnGlSurfaceRenderingSession, 16) : IUnknown AVNCOM(IAvnAppMenu, 17) : IUnknown { - virtual HRESULT AddItem (IAvnAppMenuItem* item) = 0; + virtual HRESULT InsertItem (int index, IAvnAppMenuItem* item) = 0; virtual HRESULT RemoveItem (IAvnAppMenuItem* item) = 0; virtual HRESULT SetTitle (void* utf8String) = 0; virtual HRESULT Clear () = 0; diff --git a/native/Avalonia.Native/src/OSX/menu.h b/native/Avalonia.Native/src/OSX/menu.h index befbe6a7e0..f66abb930b 100644 --- a/native/Avalonia.Native/src/OSX/menu.h +++ b/native/Avalonia.Native/src/OSX/menu.h @@ -66,7 +66,7 @@ public: AvnMenu* GetNative(); - virtual HRESULT AddItem (IAvnAppMenuItem* item) override; + virtual HRESULT InsertItem (int index, IAvnAppMenuItem* item) override; virtual HRESULT RemoveItem (IAvnAppMenuItem* item) override; diff --git a/native/Avalonia.Native/src/OSX/menu.mm b/native/Avalonia.Native/src/OSX/menu.mm index 1d2f075ccb..d5c783f7d4 100644 --- a/native/Avalonia.Native/src/OSX/menu.mm +++ b/native/Avalonia.Native/src/OSX/menu.mm @@ -145,13 +145,13 @@ AvnMenu* AvnAppMenu::GetNative() return _native; } -HRESULT AvnAppMenu::AddItem (IAvnAppMenuItem* item) +HRESULT AvnAppMenu::InsertItem(int index, IAvnAppMenuItem *item) { auto avnMenuItem = dynamic_cast(item); if(avnMenuItem != nullptr) { - [_native addItem: avnMenuItem->GetNative()]; + [_native insertItem: avnMenuItem->GetNative() atIndex:index]; } return S_OK; diff --git a/src/Avalonia.Native/IAvnAppMenu.cs b/src/Avalonia.Native/IAvnAppMenu.cs index 8ec6e8d5fa..d7e3b0054f 100644 --- a/src/Avalonia.Native/IAvnAppMenu.cs +++ b/src/Avalonia.Native/IAvnAppMenu.cs @@ -43,7 +43,7 @@ namespace Avalonia.Native.Interop _menuItemLookup.Add(item.Managed, item); _menuItems.Insert(index, item); - AddItem(item); // todo change to insertatimpl + InsertItem(index, item); // todo change to insertatimpl } private IAvnAppMenuItem CreateNew(IAvaloniaNativeFactory factory, NativeMenuItemBase item) @@ -87,12 +87,10 @@ namespace Avalonia.Native.Interop if (_menuItemLookup.TryGetValue(menu.Items[i], out nativeItem)) { Remove(nativeItem); - InsertAt(i, nativeItem); } else { nativeItem = CreateNew(factory, menu.Items[i]); - InsertAt(i, nativeItem); } } @@ -100,6 +98,8 @@ namespace Avalonia.Native.Interop { nativeItem.Update(exporter, factory, nmi); } + + InsertAt(i, nativeItem); } for (int i = menu.Items.Count; i < _menuItems.Count; i++)