Browse Source

Revert "fix"

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

Loading…
Cancel
Save