|
|
@ -1,4 +1,6 @@ |
|
|
using Avalonia.Controls; |
|
|
using System; |
|
|
|
|
|
using System.Reactive.Disposables; |
|
|
|
|
|
using Avalonia.Controls; |
|
|
using Avalonia.Platform.Interop; |
|
|
using Avalonia.Platform.Interop; |
|
|
|
|
|
|
|
|
namespace Avalonia.Native.Interop |
|
|
namespace Avalonia.Native.Interop |
|
|
@ -10,14 +12,18 @@ namespace Avalonia.Native.Interop |
|
|
|
|
|
|
|
|
public NativeMenuItemBase Managed { get; set; } |
|
|
public NativeMenuItemBase Managed { get; set; } |
|
|
|
|
|
|
|
|
internal void Update(AvaloniaNativeMenuExporter exporter, IAvaloniaNativeFactory factory, NativeMenuItem item) |
|
|
internal IDisposable Update(AvaloniaNativeMenuExporter exporter, IAvaloniaNativeFactory factory, NativeMenuItem item) |
|
|
{ |
|
|
{ |
|
|
|
|
|
var disposables = new CompositeDisposable(); |
|
|
|
|
|
|
|
|
_exporter = exporter; |
|
|
_exporter = exporter; |
|
|
|
|
|
|
|
|
Managed = item; |
|
|
Managed = item; |
|
|
|
|
|
|
|
|
Managed.PropertyChanged += Item_PropertyChanged; |
|
|
Managed.PropertyChanged += Item_PropertyChanged; |
|
|
|
|
|
|
|
|
|
|
|
disposables.Add(Disposable.Create(() => Managed.PropertyChanged -= Item_PropertyChanged)); |
|
|
|
|
|
|
|
|
if(!string.IsNullOrWhiteSpace(item.Header)) |
|
|
if(!string.IsNullOrWhiteSpace(item.Header)) |
|
|
{ |
|
|
{ |
|
|
using (var buffer = new Utf8Buffer(item.Header)) |
|
|
using (var buffer = new Utf8Buffer(item.Header)) |
|
|
@ -52,7 +58,8 @@ namespace Avalonia.Native.Interop |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
SetSubMenu(_subMenu); |
|
|
SetSubMenu(_subMenu); |
|
|
_subMenu.Update(exporter, factory, item.Menu, item.Header); |
|
|
|
|
|
|
|
|
disposables.Add(_subMenu.Update(exporter, factory, item.Menu, item.Header)); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
if (item.Menu == null && _subMenu != null) |
|
|
if (item.Menu == null && _subMenu != null) |
|
|
@ -61,6 +68,8 @@ namespace Avalonia.Native.Interop |
|
|
|
|
|
|
|
|
// needs implementing on native side also.
|
|
|
// needs implementing on native side also.
|
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
return disposables; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
private void Item_PropertyChanged(object sender, AvaloniaPropertyChangedEventArgs e) |
|
|
private void Item_PropertyChanged(object sender, AvaloniaPropertyChangedEventArgs e) |
|
|
|