Skip to content

Commit c89a817

Browse files
kycutlerCopilot
andauthored
Browser shouldn't steal window focus (#311082)
Co-authored-by: Copilot <copilot@github.com>
1 parent 00a718e commit c89a817

File tree

4 files changed

+12
-7
lines changed

4 files changed

+12
-7
lines changed

src/vs/platform/browserView/common/browserView.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -326,8 +326,9 @@ export interface IBrowserViewService {
326326
/**
327327
* Focus the browser view
328328
* @param id The browser view identifier
329+
* @param force Whether to force focus even if the view's window is not focused.
329330
*/
330-
focus(id: string): Promise<void>;
331+
focus(id: string, force?: boolean): Promise<void>;
331332

332333
/**
333334
* Find text in the browser view's page

src/vs/platform/browserView/electron-main/browserView.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -594,7 +594,11 @@ export class BrowserView extends Disposable {
594594
/**
595595
* Focus this view
596596
*/
597-
async focus(): Promise<void> {
597+
async focus(force?: boolean): Promise<void> {
598+
// By default, only focus the view if its window is already focused.
599+
if (!force && !this._window?.win?.isFocused()) {
600+
return;
601+
}
598602
this._view.webContents.focus();
599603
}
600604

src/vs/platform/browserView/electron-main/browserViewMainService.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -202,8 +202,8 @@ export class BrowserViewMainService extends Disposable implements IBrowserViewMa
202202
return this._getBrowserView(id).captureScreenshot(options);
203203
}
204204

205-
async focus(id: string): Promise<void> {
206-
return this._getBrowserView(id).focus();
205+
async focus(id: string, force?: boolean): Promise<void> {
206+
return this._getBrowserView(id).focus(force);
207207
}
208208

209209
async findInPage(id: string, text: string, options?: IBrowserViewFindInPageOptions): Promise<void> {

src/vs/workbench/contrib/browserView/common/browserView.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -203,7 +203,7 @@ export interface IBrowserViewModel extends IDisposable {
203203
reload(hard?: boolean): Promise<void>;
204204
toggleDevTools(): Promise<void>;
205205
captureScreenshot(options?: IBrowserViewCaptureScreenshotOptions): Promise<VSBuffer>;
206-
focus(): Promise<void>;
206+
focus(force?: boolean): Promise<void>;
207207
findInPage(text: string, options?: IBrowserViewFindInPageOptions): Promise<void>;
208208
stopFindInPage(keepSelection?: boolean): Promise<void>;
209209
getSelectedText(): Promise<string>;
@@ -492,8 +492,8 @@ export class BrowserViewModel extends Disposable implements IBrowserViewModel {
492492
return result;
493493
}
494494

495-
async focus(): Promise<void> {
496-
return this.browserViewService.focus(this.id);
495+
async focus(force?: boolean): Promise<void> {
496+
return this.browserViewService.focus(this.id, force);
497497
}
498498

499499
async findInPage(text: string, options?: IBrowserViewFindInPageOptions): Promise<void> {

0 commit comments

Comments
 (0)