浏览代码

Fixes #3317. Listvew mouse event doesn't cause a SelectedItemChanged event to fire

BDisp 1 年之前
父节点
当前提交
157a32312b
共有 2 个文件被更改,包括 19 次插入2 次删除
  1. 0 2
      Terminal.Gui/Views/ListView.cs
  2. 19 0
      UnitTests/Views/ListViewTests.cs

+ 0 - 2
Terminal.Gui/Views/ListView.cs

@@ -802,8 +802,6 @@ namespace Terminal.Gui {
 			selected = top + me.Y;
 			selected = top + me.Y;
 			if (AllowsAll ()) {
 			if (AllowsAll ()) {
 				Source.SetMark (SelectedItem, !Source.IsMarked (SelectedItem));
 				Source.SetMark (SelectedItem, !Source.IsMarked (SelectedItem));
-				SetNeedsDisplay ();
-				return true;
 			}
 			}
 			OnSelectedChanged ();
 			OnSelectedChanged ();
 			SetNeedsDisplay ();
 			SetNeedsDisplay ();

+ 19 - 0
UnitTests/Views/ListViewTests.cs

@@ -545,5 +545,24 @@ Item 6", output);
  tem 3
  tem 3
  tem 4", output);
  tem 4", output);
 		}
 		}
+
+		[Fact]
+		public void SelectedItemChanged_Event_Is_Also_Fired_With_AllowsMarking_True_By_Keyboard_Or_Mouse ()
+		{
+			var itemChanged = 0;
+			var lv = new ListView (new List<string> () { "Item1", "Item2", "Item3" }) { Width = 5, Height = 3, AllowsMarking = true };
+			lv.SelectedItemChanged += (e) => itemChanged = e.Item;
+
+			Assert.Equal (0, lv.SelectedItem);
+			Assert.Equal (lv.SelectedItem, itemChanged);
+
+			Assert.True (lv.ProcessKey (new KeyEvent (Key.CursorDown, new KeyModifiers())));
+			Assert.Equal (1, lv.SelectedItem);
+			Assert.Equal (lv.SelectedItem, itemChanged);
+
+			Assert.True (lv.MouseEvent (new MouseEvent(){ X = 0, Y = 2, Flags = MouseFlags.Button1Clicked}));
+			Assert.Equal (2, lv.SelectedItem);
+			Assert.Equal (lv.SelectedItem, itemChanged);
+		}
 	}
 	}
 }
 }