From f1bcfc1933e25901165a72c63279b9aa6ea241c9 Mon Sep 17 00:00:00 2001 From: Jack251970 <1160210343@qq.com> Date: Sat, 22 Mar 2025 23:33:04 +0800 Subject: [PATCH] Support preview panel for history --- Flow.Launcher/MainWindow.xaml | 4 +- Flow.Launcher/ViewModel/MainViewModel.cs | 47 +++++++++++++++++++++--- 2 files changed, 43 insertions(+), 8 deletions(-) diff --git a/Flow.Launcher/MainWindow.xaml b/Flow.Launcher/MainWindow.xaml index d1f6e7812..20e4b20d9 100644 --- a/Flow.Launcher/MainWindow.xaml +++ b/Flow.Launcher/MainWindow.xaml @@ -441,7 +441,7 @@ diff --git a/Flow.Launcher/ViewModel/MainViewModel.cs b/Flow.Launcher/ViewModel/MainViewModel.cs index 9b42ae613..6b307864e 100644 --- a/Flow.Launcher/ViewModel/MainViewModel.cs +++ b/Flow.Launcher/ViewModel/MainViewModel.cs @@ -162,7 +162,20 @@ namespace Flow.Launcher.ViewModel switch (args.PropertyName) { case nameof(Results.SelectedItem): - SelectedItem = Results.SelectedItem; + _selectedItemFromQueryResults = true; + PreviewSelectedItem = Results.SelectedItem; + UpdatePreview(); + break; + } + }; + + History.PropertyChanged += (_, args) => + { + switch (args.PropertyName) + { + case nameof(History.SelectedItem): + _selectedItemFromQueryResults = false; + PreviewSelectedItem = History.SelectedItem; UpdatePreview(); break; } @@ -646,10 +659,12 @@ namespace Flow.Launcher.ViewModel private ResultsViewModel SelectedResults { - get { return _selectedResults; } + get => _selectedResults; set { + var isReturningFromQueryResults = SelectedIsFromQueryResults(); var isReturningFromContextMenu = ContextMenuSelected(); + var isReturningFromHistory = HistorySelected(); _selectedResults = value; if (SelectedIsFromQueryResults()) { @@ -670,12 +685,30 @@ namespace Flow.Launcher.ViewModel { ChangeQueryText(_queryTextBeforeLeaveResults); } + + // If we are returning from history and we have not set select item yet, + // we need to clear the preview selected item + if (isReturningFromHistory && _selectedItemFromQueryResults.HasValue && (!_selectedItemFromQueryResults.Value)) + { + PreviewSelectedItem = null; + } } else { Results.Visibility = Visibility.Collapsed; + History.Visibility = Visibility.Collapsed; _queryTextBeforeLeaveResults = QueryText; + if(HistorySelected()) + { + // If we are returning from query results and we have not set select item yet, + // we need to clear the preview selected item + if (isReturningFromQueryResults && _selectedItemFromQueryResults.HasValue && _selectedItemFromQueryResults.Value) + { + PreviewSelectedItem = null; + } + } + // Because of Fody's optimization // setter won't be called when property value is not changed. // so we need manually call Query() @@ -787,9 +820,11 @@ namespace Flow.Launcher.ViewModel #region Preview + private bool? _selectedItemFromQueryResults; + private ResultViewModel _selectedItem; - public ResultViewModel SelectedItem + public ResultViewModel PreviewSelectedItem { get => _selectedItem; set @@ -897,7 +932,7 @@ namespace Flow.Launcher.ViewModel private void ShowInternalPreview() { ResultAreaColumn = ResultAreaColumnPreviewShown; - SelectedItem?.LoadPreviewImage(); + PreviewSelectedItem?.LoadPreviewImage(); } private void HideInternalPreview() @@ -952,14 +987,14 @@ namespace Flow.Launcher.ViewModel case false when InternalPreviewVisible: - SelectedItem?.LoadPreviewImage(); + PreviewSelectedItem?.LoadPreviewImage(); break; } } private bool CanExternalPreviewSelectedResult(out string path) { - path = SelectedItem?.Result?.Preview.FilePath; + path = PreviewSelectedItem == Results.SelectedItem ? Results.SelectedItem?.Result?.Preview.FilePath : string.Empty; return !string.IsNullOrEmpty(path); }