Fixes #2810. Pressing Alt key on a Toplevel with only a MenuBar throws System.InvalidOperationException.

This commit is contained in:
BDisp
2023-08-15 13:07:06 +01:00
parent 42f5b16022
commit 65851ad527
2 changed files with 23 additions and 0 deletions

View File

@@ -552,6 +552,9 @@ namespace Terminal.Gui {
///<inheritdoc/>
public override void Add (View view)
{
if (!CanFocus) {
CanFocus = true;
}
AddMenuStatusBar (view);
base.Add (view);
}
@@ -569,6 +572,9 @@ namespace Terminal.Gui {
///<inheritdoc/>
public override void Remove (View view)
{
if (InternalSubviews.Count < 1) {
CanFocus = false;
}
if (this is Toplevel toplevel && toplevel.MenuBar != null) {
RemoveMenuStatusBar (view);
}

View File

@@ -1031,5 +1031,22 @@ namespace Terminal.Gui.TopLevelTests {
Application.Driver.GetCursorVisibility (out cursor);
Assert.Equal (CursorVisibility.Invisible, cursor);
}
[Fact, AutoInitShutdown]
public void Activating_MenuBar_By_Alt_Key_Does_Not_Throw ()
{
var menu = new MenuBar (new MenuBarItem [] {
new MenuBarItem ("Child", new MenuItem [] {
new MenuItem ("_Create Child", "", null)
})
});
var topChild = new Toplevel ();
topChild.Add (menu);
Application.Top.Add (topChild);
Application.Begin (Application.Top);
var exception = Record.Exception (() => topChild.ProcessHotKey (new KeyEvent (Key.AltMask, new KeyModifiers { Alt = true })));
Assert.Null (exception);
}
}
}