Skip to content

Commit 04792c3

Browse files
author
Benjamin Pasero
committed
sandbox - fix cyclic dependency
1 parent c86de79 commit 04792c3

3 files changed

Lines changed: 54 additions & 46 deletions

File tree

src/vs/code/electron-main/app.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,8 @@ import { getDelayedChannel, StaticRouter, createChannelReceiver } from 'vs/base/
3535
import product from 'vs/platform/product/common/product';
3636
import { ProxyAuthHandler } from 'vs/code/electron-main/auth';
3737
import { Disposable } from 'vs/base/common/lifecycle';
38-
import { IWindowsMainService, ICodeWindow, ActiveWindowManager } from 'vs/platform/windows/electron-main/windows';
38+
import { IWindowsMainService, ICodeWindow } from 'vs/platform/windows/electron-main/windows';
39+
import { ActiveWindowManager } from 'vs/platform/windows/electron-main/windowTracker';
3940
import { URI } from 'vs/base/common/uri';
4041
import { hasWorkspaceFileExtension, IWorkspacesService } from 'vs/platform/workspaces/common/workspaces';
4142
import { WorkspacesService } from 'vs/platform/workspaces/electron-main/workspacesService';
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
/*---------------------------------------------------------------------------------------------
2+
* Copyright (c) Microsoft Corporation. All rights reserved.
3+
* Licensed under the MIT License. See License.txt in the project root for license information.
4+
*--------------------------------------------------------------------------------------------*/
5+
6+
import { Event } from 'vs/base/common/event';
7+
import { Disposable, DisposableStore } from 'vs/base/common/lifecycle';
8+
import { CancelablePromise, createCancelablePromise } from 'vs/base/common/async';
9+
import { IElectronMainService } from 'vs/platform/electron/electron-main/electronMainService';
10+
11+
export class ActiveWindowManager extends Disposable {
12+
13+
private readonly disposables = this._register(new DisposableStore());
14+
private firstActiveWindowIdPromise: CancelablePromise<number | undefined> | undefined;
15+
16+
private activeWindowId: number | undefined;
17+
18+
constructor(@IElectronMainService electronService: IElectronMainService) {
19+
super();
20+
21+
// remember last active window id upon events
22+
const onActiveWindowChange = Event.latch(Event.any(electronService.onWindowOpen, electronService.onWindowFocus));
23+
onActiveWindowChange(this.setActiveWindow, this, this.disposables);
24+
25+
// resolve current active window
26+
this.firstActiveWindowIdPromise = createCancelablePromise(() => electronService.getActiveWindowId(-1));
27+
(async () => {
28+
try {
29+
const windowId = await this.firstActiveWindowIdPromise;
30+
this.activeWindowId = (typeof this.activeWindowId === 'number') ? this.activeWindowId : windowId;
31+
} finally {
32+
this.firstActiveWindowIdPromise = undefined;
33+
}
34+
})();
35+
}
36+
37+
private setActiveWindow(windowId: number | undefined) {
38+
if (this.firstActiveWindowIdPromise) {
39+
this.firstActiveWindowIdPromise.cancel();
40+
this.firstActiveWindowIdPromise = undefined;
41+
}
42+
43+
this.activeWindowId = windowId;
44+
}
45+
46+
async getActiveClientId(): Promise<string | undefined> {
47+
const id = this.firstActiveWindowIdPromise ? (await this.firstActiveWindowIdPromise) : this.activeWindowId;
48+
49+
return `window:${id}`;
50+
}
51+
}

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

Lines changed: 1 addition & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,7 @@ import { IWorkspaceIdentifier } from 'vs/platform/workspaces/common/workspaces';
1313
import { ISerializableCommandAction } from 'vs/platform/actions/common/actions';
1414
import { URI } from 'vs/base/common/uri';
1515
import { Rectangle, BrowserWindow } from 'electron';
16-
import { IDisposable, Disposable, DisposableStore } from 'vs/base/common/lifecycle';
17-
import { CancelablePromise, createCancelablePromise } from 'vs/base/common/async';
18-
import { IElectronMainService } from 'vs/platform/electron/electron-main/electronMainService';
16+
import { IDisposable } from 'vs/base/common/lifecycle';
1917

2018
export interface IWindowState {
2119
width?: number;
@@ -143,45 +141,3 @@ export interface IOpenConfiguration extends IBaseOpenConfiguration {
143141
}
144142

145143
export interface IOpenEmptyConfiguration extends IBaseOpenConfiguration { }
146-
147-
export class ActiveWindowManager extends Disposable {
148-
149-
private readonly disposables = this._register(new DisposableStore());
150-
private firstActiveWindowIdPromise: CancelablePromise<number | undefined> | undefined;
151-
152-
private activeWindowId: number | undefined;
153-
154-
constructor(@IElectronMainService electronService: IElectronMainService) {
155-
super();
156-
157-
// remember last active window id upon events
158-
const onActiveWindowChange = Event.latch(Event.any(electronService.onWindowOpen, electronService.onWindowFocus));
159-
onActiveWindowChange(this.setActiveWindow, this, this.disposables);
160-
161-
// resolve current active window
162-
this.firstActiveWindowIdPromise = createCancelablePromise(() => electronService.getActiveWindowId(-1));
163-
(async () => {
164-
try {
165-
const windowId = await this.firstActiveWindowIdPromise;
166-
this.activeWindowId = (typeof this.activeWindowId === 'number') ? this.activeWindowId : windowId;
167-
} finally {
168-
this.firstActiveWindowIdPromise = undefined;
169-
}
170-
})();
171-
}
172-
173-
private setActiveWindow(windowId: number | undefined) {
174-
if (this.firstActiveWindowIdPromise) {
175-
this.firstActiveWindowIdPromise.cancel();
176-
this.firstActiveWindowIdPromise = undefined;
177-
}
178-
179-
this.activeWindowId = windowId;
180-
}
181-
182-
async getActiveClientId(): Promise<string | undefined> {
183-
const id = this.firstActiveWindowIdPromise ? (await this.firstActiveWindowIdPromise) : this.activeWindowId;
184-
185-
return `window:${id}`;
186-
}
187-
}

0 commit comments

Comments
 (0)