浏览代码

lastSelectedItem must be equal to selected no matter has focus or not.

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

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

@@ -684,9 +684,7 @@ namespace Terminal.Gui {
 			if (selected != lastSelectedItem) {
 				var value = source?.Count > 0 ? source.ToList () [selected] : null;
 				SelectedItemChanged?.Invoke (this, new ListViewItemEventArgs (selected, value));
-				if (HasFocus) {
-					lastSelectedItem = selected;
-				}
+				lastSelectedItem = selected;
 				return true;
 			}
 
@@ -724,23 +722,13 @@ namespace Terminal.Gui {
 		{
 			Application.Driver.SetCursorVisibility (CursorVisibility.Invisible);
 
-			if (lastSelectedItem == -1) {
+			if (lastSelectedItem != selected) {
 				EnsureSelectedItemVisible ();
 			}
 
 			return base.OnEnter (view);
 		}
 
-		///<inheritdoc/>
-		public override bool OnLeave (View view)
-		{
-			if (lastSelectedItem > -1) {
-				lastSelectedItem = -1;
-			}
-
-			return base.OnLeave (view);
-		}
-
 		/// <summary>
 		/// Ensures the selected item is always visible on the screen.
 		/// </summary>

+ 1 - 0
UnitTests/Views/ListViewTests.cs

@@ -224,6 +224,7 @@ namespace Terminal.Gui.ViewTests {
 			var source = new List<string> () { "First", "Second" };
 			ListView lv = new ListView (source) { Width = Dim.Fill (), Height = 1 };
 			lv.SelectedItem = 1;
+			lv.EnsureSelectedItemVisible ();
 			Application.Top.Add (lv);
 			Application.Begin (Application.Top);