diff --git a/Terminal.Gui/Views/Menu/MenuBar.cs b/Terminal.Gui/Views/Menu/MenuBar.cs index 9ae2709f0..38d5dc778 100644 --- a/Terminal.Gui/Views/Menu/MenuBar.cs +++ b/Terminal.Gui/Views/Menu/MenuBar.cs @@ -743,6 +743,11 @@ public class MenuBar : View, IDesignable return; } + if (_selected == -1) + { + return; + } + OpenMenu (_selected); SelectEnabledItem ( @@ -984,6 +989,11 @@ public class MenuBar : View, IDesignable return; } + if (_selected == -1) + { + return; + } + OpenMenu (_selected); if (!SelectEnabledItem ( diff --git a/Tests/UnitTests/Views/ContextMenuTests.cs b/Tests/UnitTests/Views/ContextMenuTests.cs index e68f5e729..fbb4d4a22 100644 --- a/Tests/UnitTests/Views/ContextMenuTests.cs +++ b/Tests/UnitTests/Views/ContextMenuTests.cs @@ -2105,4 +2105,34 @@ public class ContextMenuTests (ITestOutputHelper output) top.Dispose (); } + + [Fact] + [AutoInitShutdown] + public void Menu_Without_SubMenu_Is_Closed_When_Pressing_Key_Right_Or_Key_Left () + { + var cm = new ContextMenu (); + + var menuItems = new MenuBarItem ( + [ + new ("_New", string.Empty, null), + new ("_Save", string.Empty, null) + ] + ); + var top = new Toplevel (); + Application.Begin (top); + + cm.Show (menuItems); + Assert.True (cm.MenuBar!.IsMenuOpen); + + Assert.True (Application.RaiseKeyDownEvent (Key.CursorRight)); + Assert.False (cm.MenuBar!.IsMenuOpen); + + cm.Show (menuItems); + Assert.True (cm.MenuBar!.IsMenuOpen); + + Assert.True (Application.RaiseKeyDownEvent (Key.CursorLeft)); + Assert.False (cm.MenuBar!.IsMenuOpen); + + top.Dispose (); + } }