Skip to content

Commit 1986bda

Browse files
authored
Aux window: windows moved to the top stay on top over focused window (fix microsoft#196473) (microsoft#196751)
* Aux window: windows moved to the top stay on top over focused window (fix microsoft#196473) * 💄
1 parent 5401800 commit 1986bda

File tree

5 files changed

+16
-20
lines changed

5 files changed

+16
-20
lines changed

src/vs/base/browser/dom.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ import { FileAccess, RemoteAuthorities, Schemas } from 'vs/base/common/network';
1717
import * as platform from 'vs/base/common/platform';
1818
import { URI } from 'vs/base/common/uri';
1919

20-
export const { registerWindow, getWindows, onDidRegisterWindow, onWillUnregisterWindow, onDidUnregisterWindow } = (function () {
20+
export const { registerWindow, getWindows, getWindowsCount, onDidRegisterWindow, onWillUnregisterWindow, onDidUnregisterWindow } = (function () {
2121
const windows = new Set([window]);
2222
const onDidRegisterWindow = new event.Emitter<{ window: Window & typeof globalThis; disposables: DisposableStore }>();
2323
const onDidUnregisterWindow = new event.Emitter<Window & typeof globalThis>();
@@ -51,6 +51,9 @@ export const { registerWindow, getWindows, onDidRegisterWindow, onWillUnregister
5151
},
5252
getWindows(): Iterable<Window & typeof globalThis> {
5353
return windows;
54+
},
55+
getWindowsCount(): number {
56+
return windows.size;
5457
}
5558
};
5659
})();

src/vs/workbench/browser/parts/editor/editorPanes.ts

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import Severity from 'vs/base/common/severity';
1010
import { Disposable, DisposableStore } from 'vs/base/common/lifecycle';
1111
import { EditorExtensions, EditorInputCapabilities, IEditorOpenContext, IVisibleEditorPane, createEditorOpenError, isEditorOpenError } from 'vs/workbench/common/editor';
1212
import { EditorInput } from 'vs/workbench/common/editor/editorInput';
13-
import { Dimension, show, hide, IDomNodePagePosition, isAncestor, getWindow, getActiveWindow } from 'vs/base/browser/dom';
13+
import { Dimension, show, hide, IDomNodePagePosition, isAncestor, getWindow } from 'vs/base/browser/dom';
1414
import { Registry } from 'vs/platform/registry/common/platform';
1515
import { IEditorPaneRegistry, IEditorPaneDescriptor } from 'vs/workbench/browser/editor';
1616
import { IWorkbenchLayoutService } from 'vs/workbench/services/layout/browser/layoutService';
@@ -277,10 +277,7 @@ export class EditorPanes extends Disposable {
277277
if (focus && this.shouldRestoreFocus(activeElement)) {
278278
pane.focus();
279279
} else if (!internalOptions?.preserveWindowOrder) {
280-
const paneWindow = getWindow(pane.getContainer());
281-
if (paneWindow !== getActiveWindow()) {
282-
this.hostService.moveTop(paneWindow);
283-
}
280+
this.hostService.moveTop(getWindow(pane.getContainer()));
284281
}
285282
}
286283

src/vs/workbench/electron-sandbox/window.ts

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -679,14 +679,12 @@ export class NativeWindow extends Disposable {
679679
// https://github.com/electron/electron/issues/25578
680680
const that = this;
681681
const originalWindowFocus = window.focus.bind(window);
682-
window.focus = async function () {
683-
if (getActiveWindow() === window) {
684-
return;
685-
}
686-
682+
window.focus = function () {
687683
originalWindowFocus();
688684

689-
await that.nativeHostService.focusWindow();
685+
if (getActiveWindow() !== window) {
686+
that.nativeHostService.focusWindow();
687+
}
690688
};
691689
}
692690

src/vs/workbench/services/auxiliaryWindow/electron-sandbox/auxiliaryWindowService.ts

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -69,13 +69,11 @@ export class NativeAuxiliaryWindowService extends BrowserAuxiliaryWindowService
6969
const that = this;
7070
const originalWindowFocus = auxiliaryWindow.focus.bind(auxiliaryWindow);
7171
auxiliaryWindow.focus = async function () {
72-
if (getActiveWindow() === auxiliaryWindow) {
73-
return;
74-
}
75-
7672
originalWindowFocus();
7773

78-
await that.nativeHostService.focusWindow({ targetWindowId: await windowId.p });
74+
if (getActiveWindow() === auxiliaryWindow) {
75+
that.nativeHostService.focusWindow({ targetWindowId: await windowId.p });
76+
}
7977
};
8078
}
8179
}

src/vs/workbench/services/host/electron-sandbox/nativeHostService.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ import { NativeHostService } from 'vs/platform/native/electron-sandbox/nativeHos
1515
import { INativeWorkbenchEnvironmentService } from 'vs/workbench/services/environment/electron-sandbox/environmentService';
1616
import { IMainProcessService } from 'vs/platform/ipc/common/mainProcessService';
1717
import { isAuxiliaryWindow } from 'vs/workbench/services/auxiliaryWindow/electron-sandbox/auxiliaryWindowService';
18-
import { getActiveDocument, getActiveWindow, onDidRegisterWindow, trackFocus } from 'vs/base/browser/dom';
18+
import { getActiveDocument, getWindowsCount, onDidRegisterWindow, trackFocus } from 'vs/base/browser/dom';
1919
import { DomEmitter } from 'vs/base/browser/event';
2020
import { memoize } from 'vs/base/common/decorators';
2121

@@ -134,8 +134,8 @@ class WorkbenchHostService extends Disposable implements IHostService {
134134
}
135135

136136
async moveTop(window: Window & typeof globalThis): Promise<void> {
137-
if (getActiveWindow() === window) {
138-
return;
137+
if (getWindowsCount() <= 1) {
138+
return; // does not apply when only one window is opened
139139
}
140140

141141
return this.nativeHostService.moveWindowTop(isAuxiliaryWindow(window) ? { targetWindowId: await window.vscodeWindowId } : undefined);

0 commit comments

Comments
 (0)