@@ -287,10 +287,7 @@ export class WorkbenchKeybindingService extends AbstractKeybindingService {
287
287
288
288
// for single modifier chord keybindings (e.g. shift shift)
289
289
disposables . add ( dom . addDisposableListener ( window , dom . EventType . KEY_UP , ( e : KeyboardEvent ) => {
290
- if ( this . _keybindingHoldMode ) {
291
- this . _keybindingHoldMode . complete ( ) ;
292
- this . _keybindingHoldMode = null ;
293
- }
290
+ this . _resetKeybindingHoldMode ( ) ;
294
291
this . isComposingGlobalContextKey . set ( e . isComposing ) ;
295
292
const keyEvent = new StandardKeyboardEvent ( e ) ;
296
293
const shouldPreventDefault = this . _singleModifierDispatch ( keyEvent , keyEvent . target ) ;
@@ -405,10 +402,23 @@ export class WorkbenchKeybindingService extends AbstractKeybindingService {
405
402
return undefined ;
406
403
}
407
404
this . _keybindingHoldMode = new DeferredPromise < void > ( ) ;
405
+ const focusTracker = dom . trackFocus ( dom . getWindow ( undefined ) ) ;
406
+ const listener = focusTracker . onDidBlur ( ( ) => this . _resetKeybindingHoldMode ( ) ) ;
407
+ this . _keybindingHoldMode . p . finally ( ( ) => {
408
+ listener . dispose ( ) ;
409
+ focusTracker . dispose ( ) ;
410
+ } ) ;
408
411
this . _log ( `+ Enabled hold-mode for ${ commandId } .` ) ;
409
412
return this . _keybindingHoldMode . p ;
410
413
}
411
414
415
+ private _resetKeybindingHoldMode ( ) : void {
416
+ if ( this . _keybindingHoldMode ) {
417
+ this . _keybindingHoldMode ?. complete ( ) ;
418
+ this . _keybindingHoldMode = null ;
419
+ }
420
+ }
421
+
412
422
public override customKeybindingsCount ( ) : number {
413
423
return this . userKeybindings . keybindings . length ;
414
424
}
0 commit comments