diff --git a/Flow.Launcher/ViewModel/MainViewModel.cs b/Flow.Launcher/ViewModel/MainViewModel.cs index 2f1ed0f5103..c505c32a3c9 100644 --- a/Flow.Launcher/ViewModel/MainViewModel.cs +++ b/Flow.Launcher/ViewModel/MainViewModel.cs @@ -34,6 +34,7 @@ public partial class MainViewModel : BaseModel, ISavable, IDisposable private bool _isQueryRunning; private Query _lastQuery; private string _queryTextBeforeLeaveResults; + private string _ignoredQueryText = null; private readonly FlowLauncherJsonStorage _historyItemsStorage; private readonly FlowLauncherJsonStorage _userSelectedRecordStorage; @@ -730,6 +731,9 @@ private ResultsViewModel SelectedResults if (isReturningFromContextMenu) { _queryText = _queryTextBeforeLeaveResults; + // When executing OnPropertyChanged, QueryTextBox_TextChanged1 and Query will be called + // So we need to ignore it so that we will not call Query again + _ignoredQueryText = _queryText; OnPropertyChanged(nameof(QueryText)); QueryTextCursorMovedToEnd = true; } @@ -1076,6 +1080,20 @@ private bool QueryResultsPreviewed() public void Query(bool searchDelay, bool isReQuery = false) { + if (_ignoredQueryText != null) + { + if (_ignoredQueryText == QueryText) + { + _ignoredQueryText = null; + return; + } + else + { + // If _ignoredQueryText does not match current QueryText, we should still execute Query + _ignoredQueryText = null; + } + } + if (QueryResultsSelected()) { _ = QueryResultsAsync(searchDelay, isReQuery); @@ -1170,7 +1188,7 @@ private void QueryHistory() OriginQuery = new Query { RawQuery = h.Query }, Action = _ => { - SelectedResults = Results; + App.API.BackToQueryResults(); App.API.ChangeQuery(h.Query); return false; } @@ -1414,11 +1432,14 @@ private async Task BuildQueryAsync(IEnumerable builtIn } } + // Show expanded builtin shortcuts if (queryChanged) { - // show expanded builtin shortcuts - // use private field to avoid infinite recursion + // Use private field to avoid infinite recursion _queryText = queryBuilderTmp.ToString(); + // When executing OnPropertyChanged, QueryTextBox_TextChanged1 and Query will be called + // So we need to ignore it so that we will not call Query again + _ignoredQueryText = _queryText; OnPropertyChanged(nameof(QueryText)); } } @@ -1600,10 +1621,7 @@ public async void Hide() await CloseExternalPreviewAsync(); } - if (!QueryResultsSelected()) - { - SelectedResults = Results; - } + BackToQueryResults(); switch (Settings.LastQueryMode) {