@@ -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