From 34132e307466fc27a0c776bbfca5e188d8c4d54a Mon Sep 17 00:00:00 2001 From: Wojtek Figat Date: Mon, 16 Aug 2021 21:55:48 +0200 Subject: [PATCH] Fix context menu keyboard arrows navigation to skip disabled items --- Source/Editor/GUI/ContextMenu/ContextMenu.cs | 18 +++++++++++++++--- .../GUI/ContextMenu/ContextMenuButton.cs | 4 ++-- 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/Source/Editor/GUI/ContextMenu/ContextMenu.cs b/Source/Editor/GUI/ContextMenu/ContextMenu.cs index 966f3502b..bf32fc802 100644 --- a/Source/Editor/GUI/ContextMenu/ContextMenu.cs +++ b/Source/Editor/GUI/ContextMenu/ContextMenu.cs @@ -456,18 +456,30 @@ namespace FlaxEditor.GUI.ContextMenu if (base.OnKeyDown(key)) return true; - // Se;ect the first item - if (key == KeyboardKeys.ArrowDown) + switch (key) { + case KeyboardKeys.ArrowDown: 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(); _panel.ScrollViewTo(item); 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; diff --git a/Source/Editor/GUI/ContextMenu/ContextMenuButton.cs b/Source/Editor/GUI/ContextMenu/ContextMenuButton.cs index c4bdbce68..dc48cae73 100644 --- a/Source/Editor/GUI/ContextMenu/ContextMenuButton.cs +++ b/Source/Editor/GUI/ContextMenu/ContextMenuButton.cs @@ -183,7 +183,7 @@ namespace FlaxEditor.GUI.ContextMenu case KeyboardKeys.ArrowUp: 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(); ParentContextMenu.ItemsContainer.ScrollViewTo(item); @@ -194,7 +194,7 @@ namespace FlaxEditor.GUI.ContextMenu case KeyboardKeys.ArrowDown: 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(); ParentContextMenu.ItemsContainer.ScrollViewTo(item);