Skip to content

Commit 53e4bbb

Browse files
committed
updated internal and external preview's show and hide logic
1 parent 587536f commit 53e4bbb

File tree

3 files changed

+77
-32
lines changed

3 files changed

+77
-32
lines changed

Flow.Launcher/MainWindow.xaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -399,7 +399,7 @@
399399
</StackPanel>
400400
<GridSplitter
401401
Grid.Column="1"
402-
Width="{Binding PreviewVisible, Converter={StaticResource SplitterConverter}}"
402+
Width="{Binding InternalPreviewVisible, Converter={StaticResource SplitterConverter}}"
403403
HorizontalAlignment="Center"
404404
VerticalAlignment="Stretch"
405405
Background="Transparent"
@@ -409,7 +409,7 @@
409409
Grid.Column="2"
410410
VerticalAlignment="Stretch"
411411
Style="{DynamicResource PreviewArea}"
412-
Visibility="{Binding PreviewVisible, Converter={StaticResource BoolToVisibilityConverter}}">
412+
Visibility="{Binding InternalPreviewVisible, Converter={StaticResource BoolToVisibilityConverter}}">
413413
<Border
414414
d:DataContext="{d:DesignInstance vm:ResultViewModel}"
415415
DataContext="{Binding SelectedItem, ElementName=ResultListBox}"

Flow.Launcher/MainWindow.xaml.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -502,7 +502,7 @@ private async void OnDeactivated(object sender, EventArgs e)
502502
if (_settings.UseAnimation)
503503
await Task.Delay(100);
504504

505-
if (_settings.HideWhenDeactivated && !_viewModel.ExternalPreviewOpen)
505+
if (_settings.HideWhenDeactivated && !_viewModel.ExternalPreviewVisible)
506506
{
507507
_viewModel.Hide();
508508
}

Flow.Launcher/ViewModel/MainViewModel.cs

Lines changed: 74 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
using System;
1+
using System;
22
using System.Collections.Generic;
33
using System.Linq;
44
using System.Threading;
@@ -601,20 +601,57 @@ public bool InternalPreviewVisible
601601

602602
public int ResultAreaColumn { get; set; } = ResultAreaColumnPreviewShown;
603603

604-
}
605-
else if(Settings.UseExternalPreview && CanExternalPreviewSelectedResult(out var path))
604+
// This is not a reliable indicator of whether external preview is visible due to the
605+
// ability of manually closing/exiting the external preview program, and this does not inform flow that
606+
// preview is no longer available.
607+
public bool ExternalPreviewVisible { get; set; } = false;
608+
609+
private void ShowPreview()
610+
{
611+
var useExternalPreview = PluginManager.UseExternalPreview();
612+
613+
if (!useExternalPreview)
614+
ShowInternalPreview();
615+
616+
if (useExternalPreview)
606617
{
607-
_ = ToggleExternalPreviewAsync(path);
618+
// Internal preview may still be on when user switches to external
619+
if (InternalPreviewVisible)
620+
HideInternalPreview();
621+
622+
if (CanExternalPreviewSelectedResult(out var path))
623+
OpenExternalPreview(path);
608624
}
609-
else
625+
626+
}
627+
628+
private void HidePreview()
629+
{
630+
if (PluginManager.UseExternalPreview())
631+
CloseExternalPreview();
632+
633+
if (InternalPreviewVisible)
634+
HideInternalPreview();
635+
}
636+
637+
[RelayCommand]
638+
private void TogglePreview()
639+
{
640+
switch (InternalPreviewVisible || ExternalPreviewVisible)
610641
{
611-
ShowInternalPreview();
642+
case true:
643+
HidePreview();
644+
break;
645+
646+
case false:
647+
ShowPreview();
648+
break;
612649
}
613650
}
614651

615652
private void ToggleInternalPreview()
616653
{
617-
if (!PreviewVisible)
654+
if (!InternalPreviewVisible)
618655
{
619656
ShowInternalPreview();
620657
}
@@ -643,45 +680,53 @@ private void SwitchExternalPreview(string path, bool sendFailToast = true)
643680

644681
private void ShowInternalPreview()
645682
{
646-
ResultAreaColumn = 1;
647-
PreviewVisible = true;
683+
ResultAreaColumn = ResultAreaColumnPreviewShown;
648684
Results.SelectedItem?.LoadPreviewImage();
649685
}
650686

651687
private void HideInternalPreview()
652688
{
653-
ResultAreaColumn = 3;
654-
PreviewVisible = false;
689+
ResultAreaColumn = ResultAreaColumnPreviewHidden;
655690
}
656691

657692
public void ResetPreview()
658693
{
659-
if (Settings.AlwaysPreview == true && !PreviewVisible)
694+
switch (Settings.AlwaysPreview)
660695
{
661-
ShowInternalPreview();
662-
}
663-
else
664-
{
665-
HideInternalPreview();
696+
case true:
697+
ShowPreview();
698+
break;
699+
700+
case false:
701+
HidePreview();
702+
break;
666703
}
667704
}
668705

669706
private void UpdatePreview()
670707
{
671-
if (PreviewVisible)
708+
if (InternalPreviewVisible)
672709
{
673710
Results.SelectedItem?.LoadPreviewImage();
711+
return;
674712
}
675-
else if (Settings.UseExternalPreview)
713+
714+
switch (PluginManager.UseExternalPreview())
676715
{
677-
if (CanExternalPreviewSelectedResult(out var path))
678-
{
679-
_ = SwitchExternalPreviewAsync(path, false);
680-
}
681-
else
682-
{
683-
_ = CloseExternalPreviewAsync();
684-
}
716+
case true
717+
when ExternalPreviewVisible && CanExternalPreviewSelectedResult(out var path):
718+
SwitchExternalPreview(path, false);
719+
break;
720+
721+
case true
722+
when !ExternalPreviewVisible && Settings.AlwaysPreview && CanExternalPreviewSelectedResult(out var path):
723+
ShowPreview();
724+
break;
725+
726+
case true
727+
when !CanExternalPreviewSelectedResult(out var _):
728+
HidePreview();
729+
break;
685730
}
686731
}
687732

@@ -1097,8 +1142,8 @@ public async void Hide()
10971142
// Trick for no delay
10981143
MainWindowOpacity = 0;
10991144

1100-
if (Settings.UseExternalPreview)
1101-
_ = CloseExternalPreviewAsync();
1145+
if (ExternalPreviewVisible)
1146+
CloseExternalPreview();
11021147

11031148
if (!SelectedIsFromQueryResults())
11041149
{

0 commit comments

Comments
 (0)