Browse Source

Insert Native Menus by index instead of just adding them in order.

pull/3762/head
Dan Walmsley 6 years ago
parent
commit
06f57f7e44
  1. 2
      native/Avalonia.Native/inc/avalonia-native.h
  2. 2
      native/Avalonia.Native/src/OSX/menu.h
  3. 4
      native/Avalonia.Native/src/OSX/menu.mm
  4. 6
      src/Avalonia.Native/IAvnAppMenu.cs

2
native/Avalonia.Native/inc/avalonia-native.h

@ -390,7 +390,7 @@ AVNCOM(IAvnGlSurfaceRenderingSession, 16) : IUnknown
AVNCOM(IAvnAppMenu, 17) : 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 RemoveItem (IAvnAppMenuItem* item) = 0;
virtual HRESULT SetTitle (void* utf8String) = 0; virtual HRESULT SetTitle (void* utf8String) = 0;
virtual HRESULT Clear () = 0; virtual HRESULT Clear () = 0;

2
native/Avalonia.Native/src/OSX/menu.h

@ -66,7 +66,7 @@ public:
AvnMenu* GetNative(); AvnMenu* GetNative();
virtual HRESULT AddItem (IAvnAppMenuItem* item) override; virtual HRESULT InsertItem (int index, IAvnAppMenuItem* item) override;
virtual HRESULT RemoveItem (IAvnAppMenuItem* item) override; virtual HRESULT RemoveItem (IAvnAppMenuItem* item) override;

4
native/Avalonia.Native/src/OSX/menu.mm

@ -145,13 +145,13 @@ AvnMenu* AvnAppMenu::GetNative()
return _native; return _native;
} }
HRESULT AvnAppMenu::AddItem (IAvnAppMenuItem* item) HRESULT AvnAppMenu::InsertItem(int index, IAvnAppMenuItem *item)
{ {
auto avnMenuItem = dynamic_cast<AvnAppMenuItem*>(item); auto avnMenuItem = dynamic_cast<AvnAppMenuItem*>(item);
if(avnMenuItem != nullptr) if(avnMenuItem != nullptr)
{ {
[_native addItem: avnMenuItem->GetNative()]; [_native insertItem: avnMenuItem->GetNative() atIndex:index];
} }
return S_OK; return S_OK;

6
src/Avalonia.Native/IAvnAppMenu.cs

@ -43,7 +43,7 @@ namespace Avalonia.Native.Interop
_menuItemLookup.Add(item.Managed, item); _menuItemLookup.Add(item.Managed, item);
_menuItems.Insert(index, 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) private IAvnAppMenuItem CreateNew(IAvaloniaNativeFactory factory, NativeMenuItemBase item)
@ -87,12 +87,10 @@ namespace Avalonia.Native.Interop
if (_menuItemLookup.TryGetValue(menu.Items[i], out nativeItem)) if (_menuItemLookup.TryGetValue(menu.Items[i], out nativeItem))
{ {
Remove(nativeItem); Remove(nativeItem);
InsertAt(i, nativeItem);
} }
else else
{ {
nativeItem = CreateNew(factory, menu.Items[i]); nativeItem = CreateNew(factory, menu.Items[i]);
InsertAt(i, nativeItem);
} }
} }
@ -100,6 +98,8 @@ namespace Avalonia.Native.Interop
{ {
nativeItem.Update(exporter, factory, nmi); nativeItem.Update(exporter, factory, nmi);
} }
InsertAt(i, nativeItem);
} }
for (int i = menu.Items.Count; i < _menuItems.Count; i++) for (int i = menu.Items.Count; i < _menuItems.Count; i++)

Loading…
Cancel
Save