diff --git a/Terminal.Gui/Views/Menu/MenuBar.cs b/Terminal.Gui/Views/Menu/MenuBar.cs index a0f79725e..34147eeb2 100644 --- a/Terminal.Gui/Views/Menu/MenuBar.cs +++ b/Terminal.Gui/Views/Menu/MenuBar.cs @@ -351,7 +351,7 @@ public class MenuBar : View, IDesignable /// Virtual method that will invoke the event if it's defined. public virtual void OnMenuOpened () { - MenuItem? mi; + MenuItem? mi = null; MenuBarItem? parent; if (OpenCurrentMenu?.BarItems?.Children is { Length: > 0 } @@ -368,7 +368,11 @@ public class MenuBar : View, IDesignable else { parent = _openMenu?.BarItems; - mi = parent?.Children?.Length > 0 ? parent.Children [_openMenu!._currentChild] : null; + + if (OpenCurrentMenu?._currentChild > -1) + { + mi = parent?.Children?.Length > 0 ? parent.Children [_openMenu!._currentChild] : null; + } } MenuOpened?.Invoke (this, new (parent, mi)); diff --git a/UnitTests/Views/MenuBarTests.cs b/UnitTests/Views/MenuBarTests.cs index 2697a3489..a16e4f7de 100644 --- a/UnitTests/Views/MenuBarTests.cs +++ b/UnitTests/Views/MenuBarTests.cs @@ -2241,6 +2241,7 @@ wo [AutoInitShutdown] public void MenuOpened_On_Disabled_MenuItem () { + MenuItem parent = null; MenuItem miCurrent = null; Menu mCurrent = null; @@ -2273,6 +2274,7 @@ wo menu.MenuOpened += (s, e) => { + parent = e.Parent; miCurrent = e.MenuItem; mCurrent = menu._openMenu; }; @@ -2288,6 +2290,7 @@ wo ) ); Assert.True (menu.IsMenuOpen); + Assert.Equal ("_File", parent.Title); Assert.Equal ("_File", miCurrent.Parent.Title); Assert.Equal ("_New", miCurrent.Title); @@ -2297,6 +2300,7 @@ wo ) ); Assert.True (menu.IsMenuOpen); + Assert.Equal ("_File", parent.Title); Assert.Equal ("_File", miCurrent.Parent.Title); Assert.Equal ("_New", miCurrent.Title); @@ -2306,6 +2310,7 @@ wo ) ); Assert.True (menu.IsMenuOpen); + Assert.Equal ("_File", parent.Title); Assert.Equal ("_File", miCurrent.Parent.Title); Assert.Equal ("_New", miCurrent.Title); @@ -2315,6 +2320,7 @@ wo ) ); Assert.True (menu.IsMenuOpen); + Assert.Equal ("_File", parent.Title); Assert.Equal ("_File", miCurrent.Parent.Title); Assert.Equal ("_Save", miCurrent.Title); @@ -2331,18 +2337,20 @@ wo Assert.True (menu.IsMenuOpen); // The _New doc is enabled but the sub-menu isn't enabled. Is show but can't be selected and executed + Assert.Equal ("_New", parent.Title); Assert.Equal ("_New", miCurrent.Parent.Title); Assert.Equal ("_New doc", miCurrent.Title); Assert.True (mCurrent.NewKeyDownEvent (Key.CursorDown)); Assert.True (menu.IsMenuOpen); + Assert.Equal ("_File", parent.Title); Assert.Equal ("_File", miCurrent.Parent.Title); Assert.Equal ("_Save", miCurrent.Title); Assert.True (mCurrent.NewKeyDownEvent (Key.CursorUp)); Assert.True (menu.IsMenuOpen); - Assert.Equal ("_File", miCurrent.Parent.Title); - Assert.Equal ("_New", miCurrent.Title); + Assert.Equal ("_File", parent.Title); + Assert.Null (miCurrent); // close the menu Assert.True (menu.NewKeyDownEvent (menu.Key));