[Peek] Fix first preview stuck loading (#29183)

* fix first preview stuck loading

* comment
This commit is contained in:
Davide Giacometti
2023-10-18 12:33:10 +02:00
committed by GitHub
parent 6a9d44fb4d
commit 8b92789f78
3 changed files with 16 additions and 17 deletions

View File

@@ -85,20 +85,24 @@ namespace Peek.UI
/// </summary>
private void OnPeekHotkey()
{
// Need to read the foreground HWND before activating Peek to avoid focus stealing
// Foreground HWND must always be Explorer or Desktop
var foregroundWindowHandle = Windows.Win32.PInvoke.GetForegroundWindow();
// First Peek activation
if (!activated)
{
Activate();
Initialize();
Initialize(foregroundWindowHandle);
activated = true;
return;
}
if (AppWindow.IsVisible)
{
if (IsNewSingleSelectedItem())
if (IsNewSingleSelectedItem(foregroundWindowHandle))
{
Initialize();
Initialize(foregroundWindowHandle);
}
else
{
@@ -107,7 +111,7 @@ namespace Peek.UI
}
else
{
Initialize();
Initialize(foregroundWindowHandle);
}
}
@@ -126,12 +130,12 @@ namespace Peek.UI
Uninitialize();
}
private void Initialize()
private void Initialize(Windows.Win32.Foundation.HWND foregroundWindowHandle)
{
var bootTime = new System.Diagnostics.Stopwatch();
bootTime.Start();
ViewModel.Initialize();
ViewModel.Initialize(foregroundWindowHandle);
ViewModel.ScalingFactor = this.GetMonitorScale();
bootTime.Stop();
@@ -156,6 +160,7 @@ namespace Peek.UI
private void FilePreviewer_PreviewSizeChanged(object sender, PreviewSizeChangedArgs e)
{
var foregroundWindowHandle = Windows.Win32.PInvoke.GetForegroundWindow();
var monitorSize = foregroundWindowHandle.GetMonitorSize();
var monitorScale = foregroundWindowHandle.GetMonitorScale();
@@ -210,12 +215,10 @@ namespace Peek.UI
Uninitialize();
}
private bool IsNewSingleSelectedItem()
private bool IsNewSingleSelectedItem(Windows.Win32.Foundation.HWND foregroundWindowHandle)
{
try
{
var foregroundWindowHandle = Windows.Win32.PInvoke.GetForegroundWindow();
var selectedItems = FileExplorerHelper.GetSelectedItems(foregroundWindowHandle);
var selectedItemsCount = selectedItems?.GetCount() ?? 0;
if (selectedItems == null || selectedItemsCount == 0 || selectedItemsCount > 1)