Skip to content

Commit

Permalink
Fixes gui-cs#3740. Disabled MenuItem triggers exception. (gui-cs#3745)
Browse files Browse the repository at this point in the history
  • Loading branch information
BDisp authored Sep 19, 2024
1 parent 097a519 commit ee13e2c
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 4 deletions.
8 changes: 6 additions & 2 deletions Terminal.Gui/Views/Menu/MenuBar.cs
Original file line number Diff line number Diff line change
Expand Up @@ -351,7 +351,7 @@ public virtual MenuClosingEventArgs OnMenuClosing (MenuBarItem currentMenu, bool
/// <summary>Virtual method that will invoke the <see cref="MenuOpened"/> event if it's defined.</summary>
public virtual void OnMenuOpened ()
{
MenuItem? mi;
MenuItem? mi = null;
MenuBarItem? parent;

if (OpenCurrentMenu?.BarItems?.Children is { Length: > 0 }
Expand All @@ -368,7 +368,11 @@ public virtual void OnMenuOpened ()
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));
Expand Down
12 changes: 10 additions & 2 deletions UnitTests/Views/MenuBarTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2241,6 +2241,7 @@ public void MenuBarItem_Children_Null_Does_Not_Throw ()
[AutoInitShutdown]
public void MenuOpened_On_Disabled_MenuItem ()
{
MenuItem parent = null;
MenuItem miCurrent = null;
Menu mCurrent = null;

Expand Down Expand Up @@ -2273,6 +2274,7 @@ public void MenuOpened_On_Disabled_MenuItem ()

menu.MenuOpened += (s, e) =>
{
parent = e.Parent;
miCurrent = e.MenuItem;
mCurrent = menu._openMenu;
};
Expand All @@ -2288,6 +2290,7 @@ public void MenuOpened_On_Disabled_MenuItem ()
)
);
Assert.True (menu.IsMenuOpen);
Assert.Equal ("_File", parent.Title);
Assert.Equal ("_File", miCurrent.Parent.Title);
Assert.Equal ("_New", miCurrent.Title);

Expand All @@ -2297,6 +2300,7 @@ public void MenuOpened_On_Disabled_MenuItem ()
)
);
Assert.True (menu.IsMenuOpen);
Assert.Equal ("_File", parent.Title);
Assert.Equal ("_File", miCurrent.Parent.Title);
Assert.Equal ("_New", miCurrent.Title);

Expand All @@ -2306,6 +2310,7 @@ public void MenuOpened_On_Disabled_MenuItem ()
)
);
Assert.True (menu.IsMenuOpen);
Assert.Equal ("_File", parent.Title);
Assert.Equal ("_File", miCurrent.Parent.Title);
Assert.Equal ("_New", miCurrent.Title);

Expand All @@ -2315,6 +2320,7 @@ public void MenuOpened_On_Disabled_MenuItem ()
)
);
Assert.True (menu.IsMenuOpen);
Assert.Equal ("_File", parent.Title);
Assert.Equal ("_File", miCurrent.Parent.Title);
Assert.Equal ("_Save", miCurrent.Title);

Expand All @@ -2331,18 +2337,20 @@ public void MenuOpened_On_Disabled_MenuItem ()
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));
Expand Down

0 comments on commit ee13e2c

Please sign in to comment.