From 42fcc35154564feffdb084dc0afa01d9e346495e Mon Sep 17 00:00:00 2001 From: BDisp Date: Thu, 10 Aug 2023 19:13:50 +0100 Subject: [PATCH] Prevents open menu bar if it's invisible and close all opened menus. --- Terminal.Gui/Views/Menu.cs | 16 ++++++++++++++-- UnitTests/Menus/MenuTests.cs | 22 ++++++++++++++++++++++ 2 files changed, 36 insertions(+), 2 deletions(-) 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); + } } }