Support preview panel for history

This commit is contained in:
Jack251970 2025-03-22 23:33:04 +08:00
parent 26ab2aecef
commit f1bcfc1933
2 changed files with 43 additions and 8 deletions

View file

@ -441,7 +441,7 @@
<Border <Border
MinHeight="380" MinHeight="380"
d:DataContext="{d:DesignInstance vm:ResultViewModel}" d:DataContext="{d:DesignInstance vm:ResultViewModel}"
DataContext="{Binding SelectedItem, Mode=OneWay}" DataContext="{Binding PreviewSelectedItem, Mode=OneWay}"
Visibility="{Binding ShowDefaultPreview}"> Visibility="{Binding ShowDefaultPreview}">
<Grid <Grid
Margin="0 0 10 5" Margin="0 0 10 5"
@ -518,7 +518,7 @@
MaxHeight="{Binding ElementName=ResultListBox, Path=ActualHeight}" MaxHeight="{Binding ElementName=ResultListBox, Path=ActualHeight}"
Padding="0 0 10 10" Padding="0 0 10 10"
d:DataContext="{d:DesignInstance vm:ResultViewModel}" d:DataContext="{d:DesignInstance vm:ResultViewModel}"
DataContext="{Binding SelectedItem, Mode=OneWay}" DataContext="{Binding PreviewSelectedItem, Mode=OneWay}"
Visibility="{Binding ShowCustomizedPreview}"> Visibility="{Binding ShowCustomizedPreview}">
<ContentControl Content="{Binding Result.PreviewPanel.Value}" /> <ContentControl Content="{Binding Result.PreviewPanel.Value}" />
</Border> </Border>

View file

@ -162,7 +162,20 @@ namespace Flow.Launcher.ViewModel
switch (args.PropertyName) switch (args.PropertyName)
{ {
case nameof(Results.SelectedItem): 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(); UpdatePreview();
break; break;
} }
@ -646,10 +659,12 @@ namespace Flow.Launcher.ViewModel
private ResultsViewModel SelectedResults private ResultsViewModel SelectedResults
{ {
get { return _selectedResults; } get => _selectedResults;
set set
{ {
var isReturningFromQueryResults = SelectedIsFromQueryResults();
var isReturningFromContextMenu = ContextMenuSelected(); var isReturningFromContextMenu = ContextMenuSelected();
var isReturningFromHistory = HistorySelected();
_selectedResults = value; _selectedResults = value;
if (SelectedIsFromQueryResults()) if (SelectedIsFromQueryResults())
{ {
@ -670,12 +685,30 @@ namespace Flow.Launcher.ViewModel
{ {
ChangeQueryText(_queryTextBeforeLeaveResults); 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 else
{ {
Results.Visibility = Visibility.Collapsed; Results.Visibility = Visibility.Collapsed;
History.Visibility = Visibility.Collapsed;
_queryTextBeforeLeaveResults = QueryText; _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 // Because of Fody's optimization
// setter won't be called when property value is not changed. // setter won't be called when property value is not changed.
// so we need manually call Query() // so we need manually call Query()
@ -787,9 +820,11 @@ namespace Flow.Launcher.ViewModel
#region Preview #region Preview
private bool? _selectedItemFromQueryResults;
private ResultViewModel _selectedItem; private ResultViewModel _selectedItem;
public ResultViewModel SelectedItem public ResultViewModel PreviewSelectedItem
{ {
get => _selectedItem; get => _selectedItem;
set set
@ -897,7 +932,7 @@ namespace Flow.Launcher.ViewModel
private void ShowInternalPreview() private void ShowInternalPreview()
{ {
ResultAreaColumn = ResultAreaColumnPreviewShown; ResultAreaColumn = ResultAreaColumnPreviewShown;
SelectedItem?.LoadPreviewImage(); PreviewSelectedItem?.LoadPreviewImage();
} }
private void HideInternalPreview() private void HideInternalPreview()
@ -952,14 +987,14 @@ namespace Flow.Launcher.ViewModel
case false case false
when InternalPreviewVisible: when InternalPreviewVisible:
SelectedItem?.LoadPreviewImage(); PreviewSelectedItem?.LoadPreviewImage();
break; break;
} }
} }
private bool CanExternalPreviewSelectedResult(out string path) 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); return !string.IsNullOrEmpty(path);
} }