|
@@ -7,15 +7,57 @@ using Avalonia.Platform.Interop;
|
|
|
|
|
|
|
|
namespace Avalonia.Native.Interop
|
|
namespace Avalonia.Native.Interop
|
|
|
{
|
|
{
|
|
|
|
|
+ class MenuEvents : CallbackBase, IAvnMenuEvents
|
|
|
|
|
+ {
|
|
|
|
|
+ private IAvnMenu _parent;
|
|
|
|
|
+
|
|
|
|
|
+ public void Initialise(IAvnMenu parent)
|
|
|
|
|
+ {
|
|
|
|
|
+ _parent = parent;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ public void NeedsUpdate()
|
|
|
|
|
+ {
|
|
|
|
|
+ _parent?.RaiseNeedsUpdate();
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
public partial class IAvnMenu
|
|
public partial class IAvnMenu
|
|
|
{
|
|
{
|
|
|
|
|
+ private MenuEvents _events;
|
|
|
private AvaloniaNativeMenuExporter _exporter;
|
|
private AvaloniaNativeMenuExporter _exporter;
|
|
|
private List<IAvnMenuItem> _menuItems = new List<IAvnMenuItem>();
|
|
private List<IAvnMenuItem> _menuItems = new List<IAvnMenuItem>();
|
|
|
private Dictionary<NativeMenuItemBase, IAvnMenuItem> _menuItemLookup = new Dictionary<NativeMenuItemBase, IAvnMenuItem>();
|
|
private Dictionary<NativeMenuItemBase, IAvnMenuItem> _menuItemLookup = new Dictionary<NativeMenuItemBase, IAvnMenuItem>();
|
|
|
private CompositeDisposable _propertyDisposables = new CompositeDisposable();
|
|
private CompositeDisposable _propertyDisposables = new CompositeDisposable();
|
|
|
|
|
|
|
|
|
|
+ internal void RaiseNeedsUpdate ()
|
|
|
|
|
+ {
|
|
|
|
|
+ ManagedMenu.RaiseNeedsUpdate();
|
|
|
|
|
+
|
|
|
|
|
+ _exporter.InvalidateMenu();
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
internal NativeMenu ManagedMenu { get; private set; }
|
|
internal NativeMenu ManagedMenu { get; private set; }
|
|
|
|
|
|
|
|
|
|
+ public static IAvnMenu Create (IAvaloniaNativeFactory factory)
|
|
|
|
|
+ {
|
|
|
|
|
+ var events = new MenuEvents();
|
|
|
|
|
+
|
|
|
|
|
+ var menu = factory.CreateMenu(events);
|
|
|
|
|
+
|
|
|
|
|
+ events.Initialise(menu);
|
|
|
|
|
+
|
|
|
|
|
+ return menu;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ protected override void Dispose(bool disposing)
|
|
|
|
|
+ {
|
|
|
|
|
+ if(disposing)
|
|
|
|
|
+ {
|
|
|
|
|
+ _events.Dispose();
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
private void RemoveAndDispose(IAvnMenuItem item)
|
|
private void RemoveAndDispose(IAvnMenuItem item)
|
|
|
{
|
|
{
|
|
|
_menuItemLookup.Remove(item.ManagedMenuItem);
|
|
_menuItemLookup.Remove(item.ManagedMenuItem);
|