Browse Source

Fix unopened toplevel menu selection with down key.

pull/7953/head
Steven Kirk 4 years ago
parent
commit
bbf7bee56a
  1. 11
      src/Avalonia.Controls/Platform/DefaultMenuInteractionHandler.cs
  2. 13
      tests/Avalonia.Controls.UnitTests/Platform/DefaultMenuInteractionHandlerTests.cs

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

@ -149,13 +149,18 @@ namespace Avalonia.Controls.Platform
case Key.Up:
case Key.Down:
{
if (item?.IsTopLevel == true)
if (item?.IsTopLevel == true && item.HasSubMenu)
{
if (item.HasSubMenu && !item.IsSubMenuOpen)
if (!item.IsSubMenuOpen)
{
Open(item, true);
e.Handled = true;
}
else
{
item.MoveSelection(NavigationDirection.First, true);
}
e.Handled = true;
}
else
{

13
tests/Avalonia.Controls.UnitTests/Platform/DefaultMenuInteractionHandlerTests.cs

@ -53,6 +53,19 @@ namespace Avalonia.Controls.UnitTests.Platform
Assert.True(e.Handled);
}
[Fact]
public void Down_Selects_First_Item_Of_Already_Opened_Submenu()
{
var target = new DefaultMenuInteractionHandler(false);
var item = Mock.Of<IMenuItem>(x => x.IsTopLevel == true && x.HasSubMenu == true && x.IsSubMenuOpen);
var e = new KeyEventArgs { Key = Key.Down, Source = item };
target.KeyDown(item, e);
Mock.Get(item).Verify(x => x.MoveSelection(NavigationDirection.First, true));
Assert.True(e.Handled);
}
[Fact]
public void Right_Selects_Next_MenuItem()
{

Loading…
Cancel
Save