diff --git a/src/modules/launcher/PowerLauncher/MainWindow.xaml.cs b/src/modules/launcher/PowerLauncher/MainWindow.xaml.cs index 74217db0bc..5d24b77631 100644 --- a/src/modules/launcher/PowerLauncher/MainWindow.xaml.cs +++ b/src/modules/launcher/PowerLauncher/MainWindow.xaml.cs @@ -336,8 +336,9 @@ namespace PowerLauncher { var textBox = (TextBox)sender; var text = textBox.Text; + var autoCompleteText = SearchBox.AutoCompleteTextBlock.Text; - if (string.IsNullOrEmpty(text)) + if (MainViewModel.ShouldAutoCompleteTextBeEmpty(text, autoCompleteText)) { SearchBox.AutoCompleteTextBlock.Text = string.Empty; } diff --git a/src/modules/launcher/PowerLauncher/ViewModel/MainViewModel.cs b/src/modules/launcher/PowerLauncher/ViewModel/MainViewModel.cs index bec5b2fe3f..195a51a23b 100644 --- a/src/modules/launcher/PowerLauncher/ViewModel/MainViewModel.cs +++ b/src/modules/launcher/PowerLauncher/ViewModel/MainViewModel.cs @@ -871,13 +871,25 @@ namespace PowerLauncher.ViewModel } } + public static bool ShouldAutoCompleteTextBeEmpty(string queryText, string autoCompleteText) + { + if (string.IsNullOrEmpty(autoCompleteText)) + { + return false; + } + else + { + return string.IsNullOrEmpty(queryText) || autoCompleteText.IndexOf(queryText, StringComparison.Ordinal) != 0; + } + } + public static string GetAutoCompleteText(int index, string input, string query) { if (!string.IsNullOrEmpty(input) && !string.IsNullOrEmpty(query)) { if (index == 0) { - if (input.IndexOf(query, StringComparison.InvariantCultureIgnoreCase) == 0) + if (input.IndexOf(query, StringComparison.OrdinalIgnoreCase) == 0) { // Use the same case as the input query for the matched portion of the string return query + input.Substring(query.Length); @@ -894,7 +906,7 @@ namespace PowerLauncher.ViewModel { if (index == 0 && !string.IsNullOrEmpty(query)) { - if (input.IndexOf(query, StringComparison.InvariantCultureIgnoreCase) == 0) + if (input.IndexOf(query, StringComparison.OrdinalIgnoreCase) == 0) { return query + input.Substring(query.Length); } diff --git a/src/modules/launcher/Wox.Test/MainViewModelTest.cs b/src/modules/launcher/Wox.Test/MainViewModelTest.cs index 9675c74dd1..8701df2e2a 100644 --- a/src/modules/launcher/Wox.Test/MainViewModelTest.cs +++ b/src/modules/launcher/Wox.Test/MainViewModelTest.cs @@ -207,5 +207,61 @@ namespace Wox.Test // Assert Assert.AreEqual(input, autoCompleteText); } + + [Test] + public void ShouldAutoCompleteTextBeEmpty_ShouldReturnFalse_WhenAutoCompleteTextIsEmpty() + { + // Arrange + string queryText = "Te"; + string autoCompleteText = string.Empty; + + // Act + bool result = MainViewModel.ShouldAutoCompleteTextBeEmpty(queryText, autoCompleteText); + + // Assert + Assert.AreEqual(false, result); + } + + [Test] + public void ShouldAutoCompleteTextBeEmpty_ShouldReturnTrue_WhenQueryTextMatchAutoCompleteText() + { + // Arrange + string queryText = "Te"; + string autoCompleteText = "Teams"; + + // Act + bool result = MainViewModel.ShouldAutoCompleteTextBeEmpty(queryText, autoCompleteText); + + // Assert + Assert.AreEqual(false, result); + } + + [Test] + public void ShouldAutoCompleteTextBeEmpty_ShouldReturnTrue_WhenQueryTextIsEmpty() + { + // Arrange + string queryText = string.Empty; + string autoCompleteText = "Teams"; + + // Act + bool result = MainViewModel.ShouldAutoCompleteTextBeEmpty(queryText, autoCompleteText); + + // Assert + Assert.AreEqual(true, result); + } + + [Test] + public void ShouldAutoCompleteTextBeEmpty_ShouldReturnTrue_WhenQueryTextDoesNotMatchAutoCompleteText() + { + // Arrange + string queryText = "TE"; + string autoCompleteText = "Teams"; + + // Act + bool result = MainViewModel.ShouldAutoCompleteTextBeEmpty(queryText, autoCompleteText); + + // Assert + Assert.AreEqual(true, result); + } } }