diff --git a/Flow.Launcher/SettingPages/ViewModels/SettingsPaneThemeViewModel.cs b/Flow.Launcher/SettingPages/ViewModels/SettingsPaneThemeViewModel.cs index d542eb019f9..79465cd71dc 100644 --- a/Flow.Launcher/SettingPages/ViewModels/SettingsPaneThemeViewModel.cs +++ b/Flow.Launcher/SettingPages/ViewModels/SettingsPaneThemeViewModel.cs @@ -479,7 +479,8 @@ public SettingsPaneThemeViewModel(Settings settings, Theme theme) ) } }; - var vm = new ResultsViewModel(Settings); + // Set main view model to null because the results are for preview only + var vm = new ResultsViewModel(Settings, null); vm.AddResults(results, "PREVIEW"); PreviewResults = vm; } diff --git a/Flow.Launcher/ViewModel/MainViewModel.cs b/Flow.Launcher/ViewModel/MainViewModel.cs index 401f71ae3ef..ac339b715c9 100644 --- a/Flow.Launcher/ViewModel/MainViewModel.cs +++ b/Flow.Launcher/ViewModel/MainViewModel.cs @@ -148,19 +148,19 @@ public MainViewModel() _userSelectedRecord = _userSelectedRecordStorage.Load(); _topMostRecord = _topMostRecordStorage.Load(); - ContextMenu = new ResultsViewModel(Settings) + ContextMenu = new ResultsViewModel(Settings, this) { LeftClickResultCommand = OpenResultCommand, RightClickResultCommand = LoadContextMenuCommand, IsPreviewOn = Settings.AlwaysPreview }; - Results = new ResultsViewModel(Settings) + Results = new ResultsViewModel(Settings, this) { LeftClickResultCommand = OpenResultCommand, RightClickResultCommand = LoadContextMenuCommand, IsPreviewOn = Settings.AlwaysPreview }; - History = new ResultsViewModel(Settings) + History = new ResultsViewModel(Settings, this) { LeftClickResultCommand = OpenResultCommand, RightClickResultCommand = LoadContextMenuCommand, @@ -1662,6 +1662,12 @@ private bool HistorySelected() return selected; } + internal bool ResultsSelected(ResultsViewModel results) + { + var selected = SelectedResults == results; + return selected; + } + #endregion #region Hotkey diff --git a/Flow.Launcher/ViewModel/ResultsViewModel.cs b/Flow.Launcher/ViewModel/ResultsViewModel.cs index cd2736afa37..b100bba2518 100644 --- a/Flow.Launcher/ViewModel/ResultsViewModel.cs +++ b/Flow.Launcher/ViewModel/ResultsViewModel.cs @@ -21,6 +21,7 @@ public class ResultsViewModel : BaseModel private readonly object _collectionLock = new(); private readonly Settings _settings; + private readonly MainViewModel _mainVM; private int MaxResults => _settings?.MaxResultsToShow ?? 6; public ResultsViewModel() @@ -29,9 +30,10 @@ public ResultsViewModel() BindingOperations.EnableCollectionSynchronization(Results, _collectionLock); } - public ResultsViewModel(Settings settings) : this() + public ResultsViewModel(Settings settings, MainViewModel mainVM) : this() { _settings = settings; + _mainVM = mainVM; _settings.PropertyChanged += (s, e) => { switch (e.PropertyName) @@ -179,6 +181,7 @@ public void AddResults(List newRawResults, string resultId) UpdateResults(newResults); } + /// /// To avoid deadlock, this method should not called from main thread /// @@ -202,11 +205,18 @@ private void UpdateResults(List newResults, bool reselect = tru SelectedItem = Results[0]; } + if (token.IsCancellationRequested) + return; + switch (Visibility) { case Visibility.Collapsed when Results.Count > 0: - SelectedIndex = 0; - Visibility = Visibility.Visible; + if (_mainVM == null || // The results are for preview only in appearance page + _mainVM.ResultsSelected(this)) // The results are selected + { + SelectedIndex = 0; + Visibility = Visibility.Visible; + } break; case Visibility.Visible when Results.Count == 0: Visibility = Visibility.Collapsed;