diff --git a/Terminal.Gui/Views/Menu.cs b/Terminal.Gui/Views/Menu.cs
index 3260efc5d..cb85f366b 100644
--- a/Terminal.Gui/Views/Menu.cs
+++ b/Terminal.Gui/Views/Menu.cs
@@ -943,6 +943,17 @@ namespace Terminal.Gui {
///
public Key Key { get; set; } = Key.F9;
+ ///
+ public override bool Visible {
+ get => base.Visible;
+ set {
+ base.Visible = value;
+ if (!value) {
+ CloseAllMenus ();
+ }
+ }
+ }
+
///
/// Initializes a new instance of the .
///
@@ -1745,10 +1756,11 @@ namespace Terminal.Gui {
public override bool ProcessHotKey (KeyEvent kb)
{
if (kb.Key == Key) {
- if (!IsMenuOpen)
+ if (Visible && !IsMenuOpen) {
OpenMenu ();
- else
+ } else {
CloseAllMenus ();
+ }
return true;
}
diff --git a/UnitTests/Menus/MenuTests.cs b/UnitTests/Menus/MenuTests.cs
index 1d28899f6..6d615947d 100644
--- a/UnitTests/Menus/MenuTests.cs
+++ b/UnitTests/Menus/MenuTests.cs
@@ -1787,5 +1787,27 @@ Edit
Assert.False (CanExecuteNew ());
Assert.True (CanExecuteClose ());
}
+
+ [Fact, AutoInitShutdown]
+ public void Visible_False_Key_Does_Not_Open_And_Close_All_Opened_Menus ()
+ {
+ var menu = new MenuBar (new MenuBarItem [] {
+ new MenuBarItem ("File", new MenuItem [] {
+ new MenuItem ("New", "", null)
+ })
+ });
+ Application.Top.Add (menu);
+ Application.Begin (Application.Top);
+
+ Assert.True (menu.Visible);
+ Assert.True (menu.ProcessHotKey (new KeyEvent (menu.Key, new KeyModifiers ())));
+ Assert.True (menu.IsMenuOpen);
+
+ menu.Visible = false;
+ Assert.False (menu.IsMenuOpen);
+
+ Assert.True (menu.ProcessHotKey (new KeyEvent (menu.Key, new KeyModifiers ())));
+ Assert.False (menu.IsMenuOpen);
+ }
}
}