Explorar el Código

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

BDisp hace 2 años
padre
commit
0656662b12
Se han modificado 2 ficheros con 3 adiciones y 14 borrados
  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) {
 			if (selected != lastSelectedItem) {
 				var value = source?.Count > 0 ? source.ToList () [selected] : null;
 				var value = source?.Count > 0 ? source.ToList () [selected] : null;
 				SelectedItemChanged?.Invoke (this, new ListViewItemEventArgs (selected, value));
 				SelectedItemChanged?.Invoke (this, new ListViewItemEventArgs (selected, value));
-				if (HasFocus) {
-					lastSelectedItem = selected;
-				}
+				lastSelectedItem = selected;
 				return true;
 				return true;
 			}
 			}
 
 
@@ -724,23 +722,13 @@ namespace Terminal.Gui {
 		{
 		{
 			Application.Driver.SetCursorVisibility (CursorVisibility.Invisible);
 			Application.Driver.SetCursorVisibility (CursorVisibility.Invisible);
 
 
-			if (lastSelectedItem == -1) {
+			if (lastSelectedItem != selected) {
 				EnsureSelectedItemVisible ();
 				EnsureSelectedItemVisible ();
 			}
 			}
 
 
 			return base.OnEnter (view);
 			return base.OnEnter (view);
 		}
 		}
 
 
-		///<inheritdoc/>
-		public override bool OnLeave (View view)
-		{
-			if (lastSelectedItem > -1) {
-				lastSelectedItem = -1;
-			}
-
-			return base.OnLeave (view);
-		}
-
 		/// <summary>
 		/// <summary>
 		/// Ensures the selected item is always visible on the screen.
 		/// Ensures the selected item is always visible on the screen.
 		/// </summary>
 		/// </summary>

+ 1 - 0
UnitTests/Views/ListViewTests.cs

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