Skip to content

Commit 56d2c6e

Browse files
committed
Check window shown
1 parent 4fa3ec7 commit 56d2c6e

File tree

1 file changed

+27
-14
lines changed

1 file changed

+27
-14
lines changed

Flow.Launcher.Infrastructure/QuickSwitch/QuickSwitch.cs

Lines changed: 27 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -175,8 +175,15 @@ public static void Initialize()
175175

176176
#region Invoke Properties
177177

178-
private static void InvokeShowQuickSwitchWindow(bool alreadyShown)
178+
private static void InvokeShowQuickSwitchWindow(HWND hwnd)
179179
{
180+
// Check if the quick switch window is already shown for this dialog
181+
bool alreadyShown;
182+
lock (_shownQuickSwitchWindowDialogsLock)
183+
{
184+
alreadyShown = _shownQuickSwitchWindowDialogs.Contains(hwnd);
185+
}
186+
180187
// Show quick switch window
181188
if (_settings.ShowQuickSwitchWindow && !alreadyShown)
182189
{
@@ -191,15 +198,27 @@ private static void InvokeUpdateQuickSwitchWindow()
191198
UpdateQuickSwitchWindow?.Invoke();
192199
}
193200

194-
private static void InvokeResetQuickSwitchWindow()
201+
private static void InvokeResetQuickSwitchWindow(HWND hwnd)
195202
{
203+
// Remove the dialog from the list of shown quick switch windows
204+
lock (_shownQuickSwitchWindowDialogsLock)
205+
{
206+
_shownQuickSwitchWindowDialogs.Remove(hwnd);
207+
}
208+
196209
// Reset quick switch window
197210
ResetQuickSwitchWindow?.Invoke();
198211
_dragMoveTimer?.Stop();
199212
}
200213

201-
private static void InvokeHideQuickSwitchWindow()
214+
private static void InvokeHideQuickSwitchWindow(HWND hwnd)
202215
{
216+
// Remove the dialog from the list of shown quick switch windows
217+
lock (_shownQuickSwitchWindowDialogsLock)
218+
{
219+
_shownQuickSwitchWindowDialogs.Remove(hwnd);
220+
}
221+
203222
// Neither quick switch window nor file dialog window is foreground
204223
// Hide quick switch window until the file dialog window is brought to the foreground
205224
HideQuickSwitchWindow?.Invoke();
@@ -242,12 +261,6 @@ uint dwmsEventTime
242261
_dialogWindowHandle = hwnd;
243262
}
244263

245-
bool alreadyShown;
246-
lock (_shownQuickSwitchWindowDialogsLock)
247-
{
248-
alreadyShown = _shownQuickSwitchWindowDialogs.Contains(hwnd);
249-
}
250-
251264
// Navigate to path
252265
if (_settings.AutoQuickSwitch)
253266
{
@@ -261,20 +274,20 @@ uint dwmsEventTime
261274
// Just show quick switch window
262275
if (alreadySwitched)
263276
{
264-
InvokeShowQuickSwitchWindow(alreadyShown);
277+
InvokeShowQuickSwitchWindow(hwnd);
265278
}
266279
// Show quick switch window after navigating the path
267280
else
268281
{
269282
NavigateDialogPath(hwnd, () =>
270283
{
271-
InvokeShowQuickSwitchWindow(alreadyShown);
284+
InvokeShowQuickSwitchWindow(hwnd);
272285
});
273286
}
274287
}
275288
else
276289
{
277-
InvokeShowQuickSwitchWindow(alreadyShown);
290+
InvokeShowQuickSwitchWindow(hwnd);
278291
}
279292
}
280293
// Quick switch window
@@ -287,7 +300,7 @@ uint dwmsEventTime
287300
{
288301
if (_dialogWindowHandle != HWND.Null)
289302
{
290-
InvokeHideQuickSwitchWindow();
303+
InvokeHideQuickSwitchWindow(_dialogWindowHandle);
291304
}
292305

293306
// Check if explorer window is foreground
@@ -393,7 +406,7 @@ uint dwmsEventTime
393406
{
394407
_autoSwitchedDialogs.Remove(hwnd);
395408
}
396-
InvokeResetQuickSwitchWindow();
409+
InvokeResetQuickSwitchWindow(hwnd);
397410
}
398411
}
399412

0 commit comments

Comments
 (0)