|
|
|
@ -17,6 +17,7 @@ namespace Avalonia.Native |
|
|
|
private IAvnWindow _nativeWindow; |
|
|
|
private NativeMenu _menu; |
|
|
|
private __MicroComIAvnMenuProxy _nativeMenu; |
|
|
|
private IAvnTrayIcon _trayIcon; |
|
|
|
|
|
|
|
public AvaloniaNativeMenuExporter(IAvnWindow nativeWindow, IAvaloniaNativeFactory factory) |
|
|
|
{ |
|
|
|
@ -33,6 +34,14 @@ namespace Avalonia.Native |
|
|
|
DoLayoutReset(); |
|
|
|
} |
|
|
|
|
|
|
|
public AvaloniaNativeMenuExporter(IAvnTrayIcon trayIcon, IAvaloniaNativeFactory factory) |
|
|
|
{ |
|
|
|
_factory = factory; |
|
|
|
_trayIcon = trayIcon; |
|
|
|
|
|
|
|
DoLayoutReset(); |
|
|
|
} |
|
|
|
|
|
|
|
public bool IsNativeMenuExported => _exported; |
|
|
|
|
|
|
|
public event EventHandler OnIsNativeMenuExportedChanged; |
|
|
|
@ -82,15 +91,25 @@ namespace Avalonia.Native |
|
|
|
|
|
|
|
if (_nativeWindow is null) |
|
|
|
{ |
|
|
|
var appMenu = NativeMenu.GetMenu(Application.Current); |
|
|
|
if (_trayIcon is null) |
|
|
|
{ |
|
|
|
var appMenu = NativeMenu.GetMenu(Application.Current); |
|
|
|
|
|
|
|
if (appMenu == null) |
|
|
|
{ |
|
|
|
appMenu = CreateDefaultAppMenu(); |
|
|
|
NativeMenu.SetMenu(Application.Current, appMenu); |
|
|
|
} |
|
|
|
|
|
|
|
if (appMenu == null) |
|
|
|
SetMenu(appMenu); |
|
|
|
} |
|
|
|
else |
|
|
|
{ |
|
|
|
appMenu = CreateDefaultAppMenu(); |
|
|
|
NativeMenu.SetMenu(Application.Current, appMenu); |
|
|
|
if (_menu != null) |
|
|
|
{ |
|
|
|
SetMenu(_trayIcon, _menu); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
SetMenu(appMenu); |
|
|
|
} |
|
|
|
else |
|
|
|
{ |
|
|
|
@ -171,5 +190,26 @@ namespace Avalonia.Native |
|
|
|
avnWindow.SetMainMenu(_nativeMenu); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
private void SetMenu(IAvnTrayIcon trayIcon, NativeMenu menu) |
|
|
|
{ |
|
|
|
var setMenu = false; |
|
|
|
|
|
|
|
if (_nativeMenu is null) |
|
|
|
{ |
|
|
|
_nativeMenu = __MicroComIAvnMenuProxy.Create(_factory); |
|
|
|
|
|
|
|
_nativeMenu.Initialize(this, menu, ""); |
|
|
|
|
|
|
|
setMenu = true; |
|
|
|
} |
|
|
|
|
|
|
|
_nativeMenu.Update(_factory, menu); |
|
|
|
|
|
|
|
if(setMenu) |
|
|
|
{ |
|
|
|
trayIcon.SetMenu(_nativeMenu); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|