Browse Source

fix

pull/6632/head
Takoooooo 5 years ago
parent
commit
9777b9a5ee
  1. 158
      src/Avalonia.Controls/Platform/DefaultMenuInteractionHandler.cs

158
src/Avalonia.Controls/Platform/DefaultMenuInteractionHandler.cs

@ -99,7 +99,7 @@ namespace Avalonia.Controls.Platform
{
root.Deactivated -= WindowDeactivated;
}
if (_root is TopLevel tl)
tl.PlatformImpl.LostFocus -= TopLevelLostPlatformFocus;
@ -148,116 +148,116 @@ namespace Avalonia.Controls.Platform
{
case Key.Up:
case Key.Down:
{
if (item?.IsTopLevel == true)
{
if (item.HasSubMenu && !item.IsSubMenuOpen)
if (item?.IsTopLevel == true)
{
Open(item, true);
e.Handled = true;
if (item.HasSubMenu && !item.IsSubMenuOpen)
{
Open(item, true);
e.Handled = true;
}
}
else
{
goto default;
}
break;
}
else
{
goto default;
}
break;
}
case Key.Left:
{
if (item?.Parent is IMenuItem parent && !parent.IsTopLevel && parent.IsSubMenuOpen)
{
parent.Close();
parent.Focus();
e.Handled = true;
}
else
{
goto default;
if (item?.Parent is IMenuItem parent && !parent.IsTopLevel && parent.IsSubMenuOpen)
{
parent.Close();
parent.Focus();
e.Handled = true;
}
else
{
goto default;
}
break;
}
break;
}
case Key.Right:
{
if (item != null && !item.IsTopLevel && item.HasSubMenu)
{
Open(item, true);
e.Handled = true;
if (item != null && !item.IsTopLevel && item.HasSubMenu)
{
Open(item, true);
e.Handled = true;
}
else
{
goto default;
}
break;
}
else
case Key.Enter:
{
goto default;
if (item != null)
{
if (!item.HasSubMenu)
{
Click(item);
}
else
{
Open(item, true);
}
e.Handled = true;
}
break;
}
break;
}
case Key.Enter:
{
if (item != null)
case Key.Escape:
{
if (!item.HasSubMenu)
if (item?.Parent is IMenuElement parent)
{
Click(item);
parent.Close();
parent.Focus();
}
else
{
Open(item, true);
Menu!.Close();
}
e.Handled = true;
break;
}
break;
}
case Key.Escape:
{
if (item?.Parent is IMenuElement parent)
{
parent.Close();
parent.Focus();
}
else
{
Menu!.Close();
}
e.Handled = true;
break;
}
default:
{
var direction = e.Key.ToNavigationDirection();
if (direction?.IsDirectional() == true)
{
if (item == null && _isContextMenu)
var direction = e.Key.ToNavigationDirection();
if (direction?.IsDirectional() == true)
{
if (Menu!.MoveSelection(direction.Value, true) == true)
if (item == null && _isContextMenu)
{
e.Handled = true;
if (Menu!.MoveSelection(direction.Value, true) == true)
{
e.Handled = true;
}
}
}
else if (item?.Parent?.MoveSelection(direction.Value, true) == true)
{
// If the the parent is an IMenu which successfully moved its selection,
// and the current menu is open then close the current menu and open the
// new menu.
if (item.IsSubMenuOpen &&
item.Parent is IMenu &&
item.Parent.SelectedItem is object)
else if (item?.Parent?.MoveSelection(direction.Value, true) == true)
{
item.Close();
Open(item.Parent.SelectedItem, true);
// If the the parent is an IMenu which successfully moved its selection,
// and the current menu is open then close the current menu and open the
// new menu.
if (item.IsSubMenuOpen &&
item.Parent is IMenu &&
item.Parent.SelectedItem is object)
{
item.Close();
Open(item.Parent.SelectedItem, true);
}
e.Handled = true;
}
e.Handled = true;
}
}
break;
}
break;
}
}
if (!e.Handled && item?.Parent is IMenuItem parentItem)
@ -275,7 +275,7 @@ namespace Avalonia.Controls.Platform
return;
}
if (item.HasSubMenu)
if (item.HasSubMenu && item.IsEnabled)
{
Open(item, true);
}
@ -441,7 +441,7 @@ namespace Avalonia.Controls.Platform
{
Menu?.Close();
}
private void TopLevelLostPlatformFocus()
{
Menu?.Close();

Loading…
Cancel
Save