diff --git a/Terminal.Gui/Views/ListView.cs b/Terminal.Gui/Views/ListView.cs
index 6997ce5ce..f848ee9b4 100644
--- a/Terminal.Gui/Views/ListView.cs
+++ b/Terminal.Gui/Views/ListView.cs
@@ -743,7 +743,10 @@ namespace Terminal.Gui {
return base.OnLeave (view);
}
- void EnsuresVisibilitySelectedItem ()
+ ///
+ /// Ensures the selected item is always visible on the screen.
+ ///
+ public void EnsuresVisibilitySelectedItem ()
{
SuperView?.LayoutSubviews ();
if (selected < top) {
@@ -840,7 +843,7 @@ namespace Terminal.Gui {
if (src == null || src?.Count == 0) {
return 0;
}
-
+
int maxLength = 0;
for (int i = 0; i < src.Count; i++) {
var t = src [i];
@@ -924,7 +927,7 @@ namespace Terminal.Gui {
return i;
}
} else if (t is string s) {
- if (s.ToUpperInvariant ().StartsWith (search.ToUpperInvariant ())) {
+ if (s.StartsWith (search, StringComparison.InvariantCultureIgnoreCase)) {
return i;
}
}
diff --git a/UnitTests/ListViewTests.cs b/UnitTests/ListViewTests.cs
index 3c2d12b4a..b6358e609 100644
--- a/UnitTests/ListViewTests.cs
+++ b/UnitTests/ListViewTests.cs
@@ -451,5 +451,67 @@ namespace Terminal.Gui.Views {
lv.SetSourceAsync (null);
Assert.NotNull (lv.Source);
}
+
+ [Fact]
+ public void ListWrapper_StartsWith ()
+ {
+ var lw = new ListWrapper (new List { "One", "Two", "Three" });
+
+ Assert.Equal (1, lw.StartsWith ("t"));
+ Assert.Equal (1, lw.StartsWith ("tw"));
+ Assert.Equal (2, lw.StartsWith ("th"));
+ Assert.Equal (1, lw.StartsWith ("T"));
+ Assert.Equal (1, lw.StartsWith ("TW"));
+ Assert.Equal (2, lw.StartsWith ("TH"));
+
+ lw = new ListWrapper (new List { "One", "Two", "Three" });
+
+ Assert.Equal (1, lw.StartsWith ("t"));
+ Assert.Equal (1, lw.StartsWith ("tw"));
+ Assert.Equal (2, lw.StartsWith ("th"));
+ Assert.Equal (1, lw.StartsWith ("T"));
+ Assert.Equal (1, lw.StartsWith ("TW"));
+ Assert.Equal (2, lw.StartsWith ("TH"));
+ }
+
+ [Fact, AutoInitShutdown]
+ public void EnsuresVisibilitySelectedItem_SelectedItem ()
+ {
+ var source = new List ();
+ for (int i = 0; i < 10; i++) {
+ source.Add ($"Item {i}");
+ }
+ var lv = new ListView (source) {
+ Width = 10,
+ Height = 5
+ };
+ Application.Top.Add (lv);
+ Application.Begin (Application.Top);
+
+ TestHelpers.AssertDriverContentsWithFrameAre (@"
+Item 0
+Item 1
+Item 2
+Item 3
+Item 4", output);
+
+ lv.SelectedItem = 6;
+ Application.Refresh ();
+ TestHelpers.AssertDriverContentsWithFrameAre (@"
+Item 0
+Item 1
+Item 2
+Item 3
+Item 4", output);
+
+ lv.EnsuresVisibilitySelectedItem ();
+ Application.Refresh ();
+ TestHelpers.AssertDriverContentsWithFrameAre (@"
+Item 2
+Item 3
+Item 4
+Item 5
+Item 6", output);
+ }
}
}