Browse Source

Merge pull request #3321 from BDisp/v1_listview-selecteditemchanged-marks-click.fix_3317

Fixes #3317. v1-Listvew mouse event doesn't cause a SelectedItemChanged event to fire
Tig 1 year ago
parent
commit
214ff12c9f
2 changed files with 20 additions and 3 deletions
  1. 1 3
      Terminal.Gui/Views/ListView.cs
  2. 19 0
      UnitTests/Views/ListViewTests.cs

+ 1 - 3
Terminal.Gui/Views/ListView.cs

@@ -802,8 +802,6 @@ namespace Terminal.Gui {
 			selected = top + me.Y;
 			if (AllowsAll ()) {
 				Source.SetMark (SelectedItem, !Source.IsMarked (SelectedItem));
-				SetNeedsDisplay ();
-				return true;
 			}
 			OnSelectedChanged ();
 			SetNeedsDisplay ();
@@ -877,7 +875,7 @@ namespace Terminal.Gui {
 		/// <inheritdoc/>
 		public void Render (ListView container, ConsoleDriver driver, bool marked, int item, int col, int line, int width, int start = 0)
 		{
-			var savedClip = container.ClipToBounds();
+			var savedClip = container.ClipToBounds ();
 			container.Move (col - start, line);
 			var t = src? [item];
 			if (t == null) {

+ 19 - 0
UnitTests/Views/ListViewTests.cs

@@ -545,5 +545,24 @@ Item 6", output);
  tem 3
  tem 4", output);
 		}
+
+		[Fact]
+		public void SelectedItemChanged_Event_Is_Also_Raised_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);
+		}
 	}
 }