Skip to content

Commit a87e69f

Browse files
authored
reset holdMode when losing window focus (microsoft#203368)
fyi @ulugbekna, re microsoft#203187
1 parent 3dea5cb commit a87e69f

File tree

1 file changed

+14
-4
lines changed

1 file changed

+14
-4
lines changed

src/vs/workbench/services/keybinding/browser/keybindingService.ts

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -287,10 +287,7 @@ export class WorkbenchKeybindingService extends AbstractKeybindingService {
287287

288288
// for single modifier chord keybindings (e.g. shift shift)
289289
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();
294291
this.isComposingGlobalContextKey.set(e.isComposing);
295292
const keyEvent = new StandardKeyboardEvent(e);
296293
const shouldPreventDefault = this._singleModifierDispatch(keyEvent, keyEvent.target);
@@ -405,10 +402,23 @@ export class WorkbenchKeybindingService extends AbstractKeybindingService {
405402
return undefined;
406403
}
407404
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+
});
408411
this._log(`+ Enabled hold-mode for ${commandId}.`);
409412
return this._keybindingHoldMode.p;
410413
}
411414

415+
private _resetKeybindingHoldMode(): void {
416+
if (this._keybindingHoldMode) {
417+
this._keybindingHoldMode?.complete();
418+
this._keybindingHoldMode = null;
419+
}
420+
}
421+
412422
public override customKeybindingsCount(): number {
413423
return this.userKeybindings.keybindings.length;
414424
}

0 commit comments

Comments
 (0)