diff --git a/Terminal.Gui/Views/ListView.cs b/Terminal.Gui/Views/ListView.cs
index 3e38092be3..3ccdc03959 100644
--- a/Terminal.Gui/Views/ListView.cs
+++ b/Terminal.Gui/Views/ListView.cs
@@ -802,8 +802,6 @@ public override bool MouseEvent (MouseEvent me)
selected = top + me.Y;
if (AllowsAll ()) {
Source.SetMark (SelectedItem, !Source.IsMarked (SelectedItem));
- SetNeedsDisplay ();
- return true;
}
OnSelectedChanged ();
SetNeedsDisplay ();
@@ -877,7 +875,7 @@ void RenderUstr (ConsoleDriver driver, ustring ustr, int col, int line, int widt
///
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) {
diff --git a/UnitTests/Views/ListViewTests.cs b/UnitTests/Views/ListViewTests.cs
index 145caf85d0..f705dab25f 100644
--- a/UnitTests/Views/ListViewTests.cs
+++ b/UnitTests/Views/ListViewTests.cs
@@ -545,5 +545,24 @@ tem 2
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 () { "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);
+ }
}
}