From 3282c17b1c1909158e7e8d40acfd3e7ac11a413b Mon Sep 17 00:00:00 2001 From: Barry <91018388+barry166@users.noreply.github.com> Date: Sat, 4 Jul 2026 09:55:08 +0800 Subject: [PATCH] Keep auth quick inputs open across focus changes (#6274) VS Code dismisses QuickPick and InputBox prompts on focus loss unless ignoreFocusOut is enabled, which breaks the multi-step auth flow when users switch windows to copy provider details. Constraint: VS Code extension API defaults ignoreFocusOut to false for quick inputs Confidence: high Scope-risk: narrow Tested: npm test --workspace=packages/vscode-ide-companion -- src/webview/handlers/AuthMessageHandler.test.ts Tested: npm run check-types --workspace=packages/vscode-ide-companion Tested: npm run lint --workspace=packages/vscode-ide-companion Tested: npm run build --workspace=packages/vscode-ide-companion Tested: git diff --check --- .../src/webview/handlers/AuthMessageHandler.test.ts | 7 +++++++ .../src/webview/handlers/AuthMessageHandler.ts | 2 ++ 2 files changed, 9 insertions(+) diff --git a/packages/vscode-ide-companion/src/webview/handlers/AuthMessageHandler.test.ts b/packages/vscode-ide-companion/src/webview/handlers/AuthMessageHandler.test.ts index 57672289e4..f10c460b11 100644 --- a/packages/vscode-ide-companion/src/webview/handlers/AuthMessageHandler.test.ts +++ b/packages/vscode-ide-companion/src/webview/handlers/AuthMessageHandler.test.ts @@ -41,6 +41,10 @@ describe('AuthMessageHandler', () => { await handler.handle({ type: 'auth' }); + expect(mockShowQuickPick).toHaveBeenCalledWith( + expect.any(Array), + expect.objectContaining({ ignoreFocusOut: true }), + ); expect(sendToWebView).toHaveBeenCalledWith({ type: 'authCancelled' }); }); @@ -65,6 +69,9 @@ describe('AuthMessageHandler', () => { await handler.handle({ type: 'auth' }); + expect(mockShowInputBox).toHaveBeenCalledWith( + expect.objectContaining({ ignoreFocusOut: true }), + ); expect(sendToWebView).toHaveBeenCalledWith({ type: 'authCancelled' }); }); diff --git a/packages/vscode-ide-companion/src/webview/handlers/AuthMessageHandler.ts b/packages/vscode-ide-companion/src/webview/handlers/AuthMessageHandler.ts index aa99749bae..d23a4546c7 100644 --- a/packages/vscode-ide-companion/src/webview/handlers/AuthMessageHandler.ts +++ b/packages/vscode-ide-companion/src/webview/handlers/AuthMessageHandler.ts @@ -120,6 +120,7 @@ export class AuthMessageHandler extends BaseMessageHandler { const choice = await vscode.window.showQuickPick(items, { title, placeHolder, + ignoreFocusOut: true, }); if (!choice || choice.kind === vscode.QuickPickItemKind.Separator) { this.notifyAuthCancelled(); @@ -145,6 +146,7 @@ export class AuthMessageHandler extends BaseMessageHandler { placeHolder: opts.placeHolder, value: opts.value, password: opts.password ?? false, + ignoreFocusOut: true, validateInput: opts.required ? (v) => (!v?.trim() ? 'This field is required' : null) : undefined,