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
{
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;

2
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;

4
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<AvnAppMenuItem*>(item);
if(avnMenuItem != nullptr)
{
[_native addItem: avnMenuItem->GetNative()];
[_native insertItem: avnMenuItem->GetNative() atIndex:index];
}
return S_OK;

6
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++)

Loading…
Cancel
Save