From 58f80996b7691ad8e59d0b8a3b5e20717653f6e8 Mon Sep 17 00:00:00 2001 From: Jack251970 <1160210343@qq.com> Date: Tue, 13 May 2025 10:36:46 +0800 Subject: [PATCH 1/5] Fix results context menu display issue --- .../ViewModels/SettingsPaneThemeViewModel.cs | 2 +- Flow.Launcher/ViewModel/MainViewModel.cs | 12 +++++++++--- Flow.Launcher/ViewModel/ResultsViewModel.cs | 16 +++++++++++++--- 3 files changed, 23 insertions(+), 7 deletions(-) diff --git a/Flow.Launcher/SettingPages/ViewModels/SettingsPaneThemeViewModel.cs b/Flow.Launcher/SettingPages/ViewModels/SettingsPaneThemeViewModel.cs index d542eb019f9..f1f3e22c68c 100644 --- a/Flow.Launcher/SettingPages/ViewModels/SettingsPaneThemeViewModel.cs +++ b/Flow.Launcher/SettingPages/ViewModels/SettingsPaneThemeViewModel.cs @@ -479,7 +479,7 @@ public SettingsPaneThemeViewModel(Settings settings, Theme theme) ) } }; - var vm = new ResultsViewModel(Settings); + 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..799546808ab 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; + // Show it only if the results are selected + if (_mainVM == null || _mainVM.ResultsSelected(this)) + { + SelectedIndex = 0; + Visibility = Visibility.Visible; + } break; case Visibility.Visible when Results.Count == 0: Visibility = Visibility.Collapsed; From fa350ddb0779f70d2fa0fbd0f7bf37c84c110638 Mon Sep 17 00:00:00 2001 From: Jack251970 <1160210343@qq.com> Date: Tue, 13 May 2025 10:48:00 +0800 Subject: [PATCH 2/5] Add code comments --- Flow.Launcher/ViewModel/ResultsViewModel.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Flow.Launcher/ViewModel/ResultsViewModel.cs b/Flow.Launcher/ViewModel/ResultsViewModel.cs index 799546808ab..b91bf0f309e 100644 --- a/Flow.Launcher/ViewModel/ResultsViewModel.cs +++ b/Flow.Launcher/ViewModel/ResultsViewModel.cs @@ -211,8 +211,8 @@ private void UpdateResults(List newResults, bool reselect = tru switch (Visibility) { case Visibility.Collapsed when Results.Count > 0: - // Show it only if the results are selected - if (_mainVM == null || _mainVM.ResultsSelected(this)) + if (_mainVM == null || // The results is for preview only in apprerance page + _mainVM.ResultsSelected(this)) // The results are selected { SelectedIndex = 0; Visibility = Visibility.Visible; From 8e7e1738507a0f99f75f5b7898743d8b6bf66821 Mon Sep 17 00:00:00 2001 From: Jack251970 <1160210343@qq.com> Date: Tue, 13 May 2025 10:49:40 +0800 Subject: [PATCH 3/5] Add code comments --- .../SettingPages/ViewModels/SettingsPaneThemeViewModel.cs | 1 + Flow.Launcher/ViewModel/ResultsViewModel.cs | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/Flow.Launcher/SettingPages/ViewModels/SettingsPaneThemeViewModel.cs b/Flow.Launcher/SettingPages/ViewModels/SettingsPaneThemeViewModel.cs index f1f3e22c68c..07d70a67cff 100644 --- a/Flow.Launcher/SettingPages/ViewModels/SettingsPaneThemeViewModel.cs +++ b/Flow.Launcher/SettingPages/ViewModels/SettingsPaneThemeViewModel.cs @@ -479,6 +479,7 @@ public SettingsPaneThemeViewModel(Settings settings, Theme theme) ) } }; + // Set main view model to null because this results are for preview only var vm = new ResultsViewModel(Settings, null); vm.AddResults(results, "PREVIEW"); PreviewResults = vm; diff --git a/Flow.Launcher/ViewModel/ResultsViewModel.cs b/Flow.Launcher/ViewModel/ResultsViewModel.cs index b91bf0f309e..0dc1b85c44b 100644 --- a/Flow.Launcher/ViewModel/ResultsViewModel.cs +++ b/Flow.Launcher/ViewModel/ResultsViewModel.cs @@ -211,7 +211,7 @@ private void UpdateResults(List newResults, bool reselect = tru switch (Visibility) { case Visibility.Collapsed when Results.Count > 0: - if (_mainVM == null || // The results is for preview only in apprerance page + if (_mainVM == null || // The results are for preview only in apprerance page _mainVM.ResultsSelected(this)) // The results are selected { SelectedIndex = 0; From 03b558c1fc0947d6994f0c71d5ae002f50e52123 Mon Sep 17 00:00:00 2001 From: Jack Ye <1160210343@qq.com> Date: Tue, 13 May 2025 10:51:44 +0800 Subject: [PATCH 4/5] Fix typos Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- Flow.Launcher/ViewModel/ResultsViewModel.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Flow.Launcher/ViewModel/ResultsViewModel.cs b/Flow.Launcher/ViewModel/ResultsViewModel.cs index 0dc1b85c44b..b100bba2518 100644 --- a/Flow.Launcher/ViewModel/ResultsViewModel.cs +++ b/Flow.Launcher/ViewModel/ResultsViewModel.cs @@ -211,7 +211,7 @@ private void UpdateResults(List newResults, bool reselect = tru switch (Visibility) { case Visibility.Collapsed when Results.Count > 0: - if (_mainVM == null || // The results are for preview only in apprerance page + if (_mainVM == null || // The results are for preview only in appearance page _mainVM.ResultsSelected(this)) // The results are selected { SelectedIndex = 0; From 93a9a92a4068906a67d46178503e09f312cb43a0 Mon Sep 17 00:00:00 2001 From: Jack251970 <1160210343@qq.com> Date: Tue, 13 May 2025 11:11:50 +0800 Subject: [PATCH 5/5] Fix typos --- .../SettingPages/ViewModels/SettingsPaneThemeViewModel.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Flow.Launcher/SettingPages/ViewModels/SettingsPaneThemeViewModel.cs b/Flow.Launcher/SettingPages/ViewModels/SettingsPaneThemeViewModel.cs index 07d70a67cff..79465cd71dc 100644 --- a/Flow.Launcher/SettingPages/ViewModels/SettingsPaneThemeViewModel.cs +++ b/Flow.Launcher/SettingPages/ViewModels/SettingsPaneThemeViewModel.cs @@ -479,7 +479,7 @@ public SettingsPaneThemeViewModel(Settings settings, Theme theme) ) } }; - // Set main view model to null because this results are for preview only + // 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;