Fix context menu keyboard arrows navigation to skip disabled items

This commit is contained in:
Wojtek Figat
2021-08-16 21:55:48 +02:00
parent bb4d94ee85
commit 34132e3074
2 changed files with 17 additions and 5 deletions

View File

@@ -456,18 +456,30 @@ namespace FlaxEditor.GUI.ContextMenu
if (base.OnKeyDown(key)) if (base.OnKeyDown(key))
return true; return true;
// Se;ect the first item switch (key)
if (key == KeyboardKeys.ArrowDown)
{ {
case KeyboardKeys.ArrowDown:
for (int i = 0; i < _panel.Children.Count; i++) for (int i = 0; i < _panel.Children.Count; i++)
{ {
if (_panel.Children[i] is ContextMenuButton item && item.Visible) if (_panel.Children[i] is ContextMenuButton item && item.Visible && item.Enabled)
{ {
item.Focus(); item.Focus();
_panel.ScrollViewTo(item); _panel.ScrollViewTo(item);
return true; return true;
} }
} }
break;
case KeyboardKeys.ArrowUp:
for (int i = _panel.Children.Count - 1; i >= 0; i--)
{
if (_panel.Children[i] is ContextMenuButton item && item.Visible && item.Enabled)
{
item.Focus();
_panel.ScrollViewTo(item);
return true;
}
}
break;
} }
return false; return false;

View File

@@ -183,7 +183,7 @@ namespace FlaxEditor.GUI.ContextMenu
case KeyboardKeys.ArrowUp: case KeyboardKeys.ArrowUp:
for (int i = IndexInParent - 1; i >= 0; i--) for (int i = IndexInParent - 1; i >= 0; i--)
{ {
if (ParentContextMenu.ItemsContainer.Children[i] is ContextMenuButton item && item.Visible) if (ParentContextMenu.ItemsContainer.Children[i] is ContextMenuButton item && item.Visible && item.Enabled)
{ {
item.Focus(); item.Focus();
ParentContextMenu.ItemsContainer.ScrollViewTo(item); ParentContextMenu.ItemsContainer.ScrollViewTo(item);
@@ -194,7 +194,7 @@ namespace FlaxEditor.GUI.ContextMenu
case KeyboardKeys.ArrowDown: case KeyboardKeys.ArrowDown:
for (int i = IndexInParent + 1; i < ParentContextMenu.ItemsContainer.Children.Count; i++) for (int i = IndexInParent + 1; i < ParentContextMenu.ItemsContainer.Children.Count; i++)
{ {
if (ParentContextMenu.ItemsContainer.Children[i] is ContextMenuButton item && item.Visible) if (ParentContextMenu.ItemsContainer.Children[i] is ContextMenuButton item && item.Visible && item.Enabled)
{ {
item.Focus(); item.Focus();
ParentContextMenu.ItemsContainer.ScrollViewTo(item); ParentContextMenu.ItemsContainer.ScrollViewTo(item);