|
|
@@ -98,13 +98,6 @@ namespace Avalonia.Native
|
|
|
QueueReset();
|
|
|
}
|
|
|
|
|
|
- /*
|
|
|
- This is basic initial implementation, so we don't actually track anything and
|
|
|
- just reset the whole layout on *ANY* change
|
|
|
-
|
|
|
- This is not how it should work and will prevent us from implementing various features,
|
|
|
- but that's the fastest way to get things working, so...
|
|
|
- */
|
|
|
void DoLayoutReset()
|
|
|
{
|
|
|
_resetQueued = false;
|
|
|
@@ -137,7 +130,7 @@ namespace Avalonia.Native
|
|
|
Dispatcher.UIThread.Post(DoLayoutReset, DispatcherPriority.Background);
|
|
|
}
|
|
|
|
|
|
- private IAvnAppMenu CreateSubmenu(ICollection<NativeMenuItem> children)
|
|
|
+ private IAvnAppMenu CreateSubmenu(ICollection<NativeMenuItemBase> children)
|
|
|
{
|
|
|
var menu = _factory.CreateMenu();
|
|
|
|
|
|
@@ -154,108 +147,114 @@ namespace Avalonia.Native
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- private void SetChildren(IAvnAppMenu menu, ICollection<NativeMenuItem> children)
|
|
|
+ private void SetChildren(IAvnAppMenu menu, ICollection<NativeMenuItemBase> children)
|
|
|
{
|
|
|
- foreach (var item in children)
|
|
|
+ foreach (var i in children)
|
|
|
{
|
|
|
- AddMenuItem(item);
|
|
|
-
|
|
|
- var menuItem = _factory.CreateMenuItem();
|
|
|
-
|
|
|
- using (var buffer = new Utf8Buffer(item.Header))
|
|
|
+ if (i is NativeMenuItem item)
|
|
|
{
|
|
|
- menuItem.Title = buffer.DangerousGetHandle();
|
|
|
- }
|
|
|
+ AddMenuItem(item);
|
|
|
|
|
|
- if (item.Gesture != null)
|
|
|
- {
|
|
|
- using (var buffer = new Utf8Buffer(item.Gesture.Key.ToString().ToLower()))
|
|
|
+ var menuItem = _factory.CreateMenuItem();
|
|
|
+
|
|
|
+ using (var buffer = new Utf8Buffer(item.Header))
|
|
|
{
|
|
|
- menuItem.SetGesture(buffer.DangerousGetHandle(), (AvnInputModifiers)item.Gesture.KeyModifiers);
|
|
|
+ menuItem.Title = buffer.DangerousGetHandle();
|
|
|
}
|
|
|
- }
|
|
|
|
|
|
- menuItem.SetAction(new PredicateCallback(() =>
|
|
|
- {
|
|
|
- if (item.Command != null || item.HasClickHandlers)
|
|
|
+ if (item.Gesture != null)
|
|
|
{
|
|
|
- return item.Enabled;
|
|
|
+ using (var buffer = new Utf8Buffer(item.Gesture.Key.ToString().ToLower()))
|
|
|
+ {
|
|
|
+ menuItem.SetGesture(buffer.DangerousGetHandle(), (AvnInputModifiers)item.Gesture.KeyModifiers);
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
- return false;
|
|
|
- }), new MenuActionCallback(() => { item.RaiseClick(); }));
|
|
|
- menu.AddItem(menuItem);
|
|
|
+ menuItem.SetAction(new PredicateCallback(() =>
|
|
|
+ {
|
|
|
+ if (item.Command != null || item.HasClickHandlers)
|
|
|
+ {
|
|
|
+ return item.Enabled;
|
|
|
+ }
|
|
|
|
|
|
- if (item.Menu?.Items?.Count > 0)
|
|
|
- {
|
|
|
- var submenu = _factory.CreateMenu();
|
|
|
+ return false;
|
|
|
+ }), new MenuActionCallback(() => { item.RaiseClick(); }));
|
|
|
+ menu.AddItem(menuItem);
|
|
|
|
|
|
- using (var buffer = new Utf8Buffer(item.Header))
|
|
|
+ if (item.Menu?.Items?.Count > 0)
|
|
|
{
|
|
|
- submenu.Title = buffer.DangerousGetHandle();
|
|
|
- }
|
|
|
+ var submenu = _factory.CreateMenu();
|
|
|
+
|
|
|
+ using (var buffer = new Utf8Buffer(item.Header))
|
|
|
+ {
|
|
|
+ submenu.Title = buffer.DangerousGetHandle();
|
|
|
+ }
|
|
|
|
|
|
- menuItem.SetSubMenu(submenu);
|
|
|
+ menuItem.SetSubMenu(submenu);
|
|
|
|
|
|
- AddItemsToMenu(submenu, item.Menu?.Items);
|
|
|
+ AddItemsToMenu(submenu, item.Menu?.Items);
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- private void AddItemsToMenu(IAvnAppMenu menu, ICollection<NativeMenuItem> items, bool isMainMenu = false)
|
|
|
+ private void AddItemsToMenu(IAvnAppMenu menu, ICollection<NativeMenuItemBase> items, bool isMainMenu = false)
|
|
|
{
|
|
|
- foreach (var item in items)
|
|
|
+ foreach (var i in items)
|
|
|
{
|
|
|
- var menuItem = _factory.CreateMenuItem();
|
|
|
+ if (i is NativeMenuItem item)
|
|
|
+ {
|
|
|
+ var menuItem = _factory.CreateMenuItem();
|
|
|
|
|
|
- AddMenuItem(item);
|
|
|
+ AddMenuItem(item);
|
|
|
|
|
|
- menuItem.SetAction(new PredicateCallback(() =>
|
|
|
- {
|
|
|
- if (item.Command != null || item.HasClickHandlers)
|
|
|
+ menuItem.SetAction(new PredicateCallback(() =>
|
|
|
{
|
|
|
- return item.Enabled;
|
|
|
- }
|
|
|
+ if (item.Command != null || item.HasClickHandlers)
|
|
|
+ {
|
|
|
+ return item.Enabled;
|
|
|
+ }
|
|
|
|
|
|
- return false;
|
|
|
- }), new MenuActionCallback(() => { item.RaiseClick(); }));
|
|
|
+ return false;
|
|
|
+ }), new MenuActionCallback(() => { item.RaiseClick(); }));
|
|
|
|
|
|
- if (item.Menu?.Items.Count > 0 || isMainMenu)
|
|
|
- {
|
|
|
- var subMenu = CreateSubmenu(item.Menu?.Items);
|
|
|
+ if (item.Menu?.Items.Count > 0 || isMainMenu)
|
|
|
+ {
|
|
|
+ var subMenu = CreateSubmenu(item.Menu?.Items);
|
|
|
|
|
|
- menuItem.SetSubMenu(subMenu);
|
|
|
+ menuItem.SetSubMenu(subMenu);
|
|
|
|
|
|
- using (var buffer = new Utf8Buffer(item.Header))
|
|
|
- {
|
|
|
- subMenu.Title = buffer.DangerousGetHandle();
|
|
|
+ using (var buffer = new Utf8Buffer(item.Header))
|
|
|
+ {
|
|
|
+ subMenu.Title = buffer.DangerousGetHandle();
|
|
|
+ }
|
|
|
}
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- using (var buffer = new Utf8Buffer(item.Header))
|
|
|
+ else
|
|
|
{
|
|
|
- menuItem.Title = buffer.DangerousGetHandle();
|
|
|
- }
|
|
|
+ using (var buffer = new Utf8Buffer(item.Header))
|
|
|
+ {
|
|
|
+ menuItem.Title = buffer.DangerousGetHandle();
|
|
|
+ }
|
|
|
|
|
|
- if (item.Gesture != null)
|
|
|
- {
|
|
|
- using (var buffer = new Utf8Buffer(item.Gesture.Key.ToString().ToLower()))
|
|
|
+ if (item.Gesture != null)
|
|
|
{
|
|
|
- menuItem.SetGesture(buffer.DangerousGetHandle(), (AvnInputModifiers)item.Gesture.KeyModifiers);
|
|
|
+ using (var buffer = new Utf8Buffer(item.Gesture.Key.ToString().ToLower()))
|
|
|
+ {
|
|
|
+ menuItem.SetGesture(buffer.DangerousGetHandle(), (AvnInputModifiers)item.Gesture.KeyModifiers);
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
- }
|
|
|
|
|
|
- menu.AddItem(menuItem);
|
|
|
+ menu.AddItem(menuItem);
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- private void SetMenu(ICollection<NativeMenuItem> menuItems)
|
|
|
+ private void SetMenu(ICollection<NativeMenuItemBase> menuItems)
|
|
|
{
|
|
|
if (menuItems is null)
|
|
|
{
|
|
|
- menuItems = new List<NativeMenuItem>();
|
|
|
+ menuItems = new List<NativeMenuItemBase>();
|
|
|
}
|
|
|
|
|
|
var menu = NativeMenu.GetMenu(Application.Current);
|
|
|
@@ -275,11 +274,11 @@ namespace Avalonia.Native
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- private void SetMenu(IAvnWindow avnWindow, ICollection<NativeMenuItem> menuItems)
|
|
|
+ private void SetMenu(IAvnWindow avnWindow, ICollection<NativeMenuItemBase> menuItems)
|
|
|
{
|
|
|
if (menuItems is null)
|
|
|
{
|
|
|
- menuItems = new List<NativeMenuItem>();
|
|
|
+ menuItems = new List<NativeMenuItemBase>();
|
|
|
}
|
|
|
|
|
|
var appMenu = avnWindow.ObtainMainMenu();
|