From 9d773feeb19baade84693b4b0f94b218975f82a5 Mon Sep 17 00:00:00 2001 From: BDisp Date: Sun, 16 Mar 2025 21:59:41 +0000 Subject: [PATCH] Fixes #3986. ContextMenu crashing with right and left arrows --- Terminal.Gui/Views/Menu/MenuBar.cs | 10 ++++++++ Tests/UnitTests/Views/ContextMenuTests.cs | 30 +++++++++++++++++++++++ 2 files changed, 40 insertions(+) diff --git a/Terminal.Gui/Views/Menu/MenuBar.cs b/Terminal.Gui/Views/Menu/MenuBar.cs index 9ae2709f06..38d5dc778c 100644 --- a/Terminal.Gui/Views/Menu/MenuBar.cs +++ b/Terminal.Gui/Views/Menu/MenuBar.cs @@ -743,6 +743,11 @@ internal void NextMenu (bool isSubMenu = false, bool ignoreUseSubMenusSingleFram return; } + if (_selected == -1) + { + return; + } + OpenMenu (_selected); SelectEnabledItem ( @@ -984,6 +989,11 @@ internal void PreviousMenu (bool isSubMenu = false, bool ignoreUseSubMenusSingle return; } + if (_selected == -1) + { + return; + } + OpenMenu (_selected); if (!SelectEnabledItem ( diff --git a/Tests/UnitTests/Views/ContextMenuTests.cs b/Tests/UnitTests/Views/ContextMenuTests.cs index e68f5e729a..fbb4d4a22a 100644 --- a/Tests/UnitTests/Views/ContextMenuTests.cs +++ b/Tests/UnitTests/Views/ContextMenuTests.cs @@ -2105,4 +2105,34 @@ public void Mouse_Pressed_Released_Clicked (int button) 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 (); + } }