From 157a32312bca0fe6b507c2b8a5aa417595b729de Mon Sep 17 00:00:00 2001 From: BDisp Date: Wed, 13 Mar 2024 21:17:35 +0000 Subject: [PATCH] Fixes #3317. Listvew mouse event doesn't cause a SelectedItemChanged event to fire --- Terminal.Gui/Views/ListView.cs | 2 -- UnitTests/Views/ListViewTests.cs | 19 +++++++++++++++++++ 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/Terminal.Gui/Views/ListView.cs b/Terminal.Gui/Views/ListView.cs index 3e38092be..36d9d64b3 100644 --- a/Terminal.Gui/Views/ListView.cs +++ b/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 (); diff --git a/UnitTests/Views/ListViewTests.cs b/UnitTests/Views/ListViewTests.cs index 145caf85d..2241c355f 100644 --- a/UnitTests/Views/ListViewTests.cs +++ b/UnitTests/Views/ListViewTests.cs @@ -545,5 +545,24 @@ Item 6", output); tem 3 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 () { "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); + } } }