浏览代码

Fixes #2787. MenuItem with CanExecute returning false is select when a MenuBar is opened.

BDisp 2 年之前
父节点
当前提交
1fc239a895
共有 2 个文件被更改,包括 4 次插入3 次删除
  1. 1 1
      Terminal.Gui/Views/Menu.cs
  2. 3 2
      UnitTests/Menus/MenuTests.cs

+ 1 - 1
Terminal.Gui/Views/Menu.cs

@@ -414,7 +414,7 @@ namespace Terminal.Gui {
 
 
 				current = -1;
 				current = -1;
 				for (int i = 0; i < barItems.Children?.Length; i++) {
 				for (int i = 0; i < barItems.Children?.Length; i++) {
-					if (barItems.Children [i] != null) {
+					if (barItems.Children [i]?.IsEnabled () == true) {
 						current = i;
 						current = i;
 						break;
 						break;
 					}
 					}

+ 3 - 2
UnitTests/Menus/MenuTests.cs

@@ -254,8 +254,9 @@ Edit
 			// open the menu
 			// open the menu
 			Assert.True (menu.ProcessHotKey (new KeyEvent (Key.F9, new KeyModifiers ())));
 			Assert.True (menu.ProcessHotKey (new KeyEvent (Key.F9, new KeyModifiers ())));
 			Assert.True (menu.IsMenuOpen);
 			Assert.True (menu.IsMenuOpen);
-			Assert.Equal ("_New", miCurrent.Parent.Title);
-			Assert.Equal ("_New doc", miCurrent.Title);
+			// The _New doc isn't enabled because it can't execute and so can't be selected
+			Assert.Equal ("_File", miCurrent.Parent.Title);
+			Assert.Equal ("_New", miCurrent.Title);
 
 
 			Assert.True (mCurrent.ProcessKey (new KeyEvent (Key.CursorDown, new KeyModifiers ())));
 			Assert.True (mCurrent.ProcessKey (new KeyEvent (Key.CursorDown, new KeyModifiers ())));
 			Assert.True (menu.IsMenuOpen);
 			Assert.True (menu.IsMenuOpen);