diff --git a/Source/Editor/GUI/ContextMenu/ContextMenu.cs b/Source/Editor/GUI/ContextMenu/ContextMenu.cs index 896bd5bc2..f5705c6f5 100644 --- a/Source/Editor/GUI/ContextMenu/ContextMenu.cs +++ b/Source/Editor/GUI/ContextMenu/ContextMenu.cs @@ -502,6 +502,7 @@ namespace FlaxEditor.GUI.ContextMenu if (base.OnKeyDown(key)) return true; + // Keyboard navigation around the menu switch (key) { case KeyboardKeys.ArrowDown: @@ -526,6 +527,20 @@ namespace FlaxEditor.GUI.ContextMenu } } break; + case KeyboardKeys.ArrowRight: + for (int i = 0; i < _panel.Children.Count; i++) + { + if (_panel.Children[i] is ContextMenuChildMenu item && item.Visible && item.IsFocused && !item.ContextMenu.IsOpened) + { + item.ShowChild(this); + item.ContextMenu._panel.Children.FirstOrDefault(x => x is ContextMenuButton && x.Visible)?.Focus(); + break; + } + } + break; + case KeyboardKeys.ArrowLeft: + ParentCM?.RootWindow.Focus(); + break; } return false; diff --git a/Source/Editor/GUI/ContextMenu/ContextMenuBase.cs b/Source/Editor/GUI/ContextMenu/ContextMenuBase.cs index 1e6fd9861..2f517d903 100644 --- a/Source/Editor/GUI/ContextMenu/ContextMenuBase.cs +++ b/Source/Editor/GUI/ContextMenu/ContextMenuBase.cs @@ -72,6 +72,11 @@ namespace FlaxEditor.GUI.ContextMenu /// public bool HasChildCMOpened => _childCM != null; + /// + /// Gets the parent context menu (if exists). + /// + public ContextMenuBase ParentCM => _parentCM; + /// /// Gets the topmost context menu. /// @@ -81,9 +86,7 @@ namespace FlaxEditor.GUI.ContextMenu { var cm = this; while (cm._parentCM != null && cm._isSubMenu) - { cm = cm._parentCM; - } return cm; } } diff --git a/Source/Editor/GUI/ContextMenu/ContextMenuChildMenu.cs b/Source/Editor/GUI/ContextMenu/ContextMenuChildMenu.cs index 74ab560fb..78337d011 100644 --- a/Source/Editor/GUI/ContextMenu/ContextMenuChildMenu.cs +++ b/Source/Editor/GUI/ContextMenu/ContextMenuChildMenu.cs @@ -29,7 +29,7 @@ namespace FlaxEditor.GUI.ContextMenu CloseMenuOnClick = false; } - private void ShowChild(ContextMenu parentContextMenu) + internal void ShowChild(ContextMenu parentContextMenu) { // Hide parent CM popups and set itself as child var vAlign = parentContextMenu.ItemsAreaMargin.Top;