Skip to content

Commit 592fc97

Browse files
author
Benjamin Pasero
committed
debt - getActiveWindowId is electron only
1 parent d0b6739 commit 592fc97

10 files changed

Lines changed: 60 additions & 70 deletions

File tree

src/vs/code/electron-browser/sharedProcess/sharedProcessMain.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,8 @@ import { resolveCommonProperties } from 'vs/platform/telemetry/node/commonProper
2626
import { TelemetryAppenderChannel } from 'vs/platform/telemetry/node/telemetryIpc';
2727
import { TelemetryService, ITelemetryServiceConfig } from 'vs/platform/telemetry/common/telemetryService';
2828
import { AppInsightsAppender } from 'vs/platform/telemetry/node/appInsightsAppender';
29-
import { IWindowsService, ActiveWindowManager } from 'vs/platform/windows/common/windows';
29+
import { ActiveWindowManager } from 'vs/platform/windows/node/windows';
30+
import { IWindowsService } from 'vs/platform/windows/common/windows';
3031
import { WindowsService } from 'vs/platform/windows/electron-browser/windowsService';
3132
import { ipcRenderer } from 'electron';
3233
import { ILogService, LogLevel } from 'vs/platform/log/common/log';

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,8 @@
66
import { app, ipcMain as ipc, systemPreferences, shell, Event, contentTracing, protocol, powerMonitor, IpcMainEvent } from 'electron';
77
import { IProcessEnvironment, isWindows, isMacintosh } from 'vs/base/common/platform';
88
import { WindowsManager } from 'vs/code/electron-main/windows';
9-
import { IWindowsService, OpenContext, ActiveWindowManager, IWindowOpenable } from 'vs/platform/windows/common/windows';
9+
import { IWindowsService, OpenContext, IWindowOpenable } from 'vs/platform/windows/common/windows';
10+
import { ActiveWindowManager } from 'vs/platform/windows/node/windows';
1011
import { WindowsChannel } from 'vs/platform/windows/common/windowsIpc';
1112
import { LegacyWindowsMainService } from 'vs/platform/windows/electron-main/legacyWindowsMainService';
1213
import { ILifecycleMainService, LifecycleMainPhase } from 'vs/platform/lifecycle/electron-main/lifecycleMainService';

src/vs/platform/windows/common/windows.ts

Lines changed: 0 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,8 @@ import { IWorkspaceIdentifier, ISingleFolderWorkspaceIdentifier } from 'vs/platf
1212
import { IRecentlyOpened, IRecent } from 'vs/platform/history/common/history';
1313
import { ExportData } from 'vs/base/common/performance';
1414
import { LogLevel } from 'vs/platform/log/common/log';
15-
import { DisposableStore, Disposable } from 'vs/base/common/lifecycle';
1615
import { URI, UriComponents } from 'vs/base/common/uri';
1716
import { IConfigurationService } from 'vs/platform/configuration/common/configuration';
18-
import { CancelablePromise, createCancelablePromise } from 'vs/base/common/async';
1917

2018
export const IWindowsService = createDecorator<IWindowsService>('windowsService');
2119

@@ -44,8 +42,6 @@ export interface IWindowsService {
4442
clearRecentlyOpened(): Promise<void>;
4543
getRecentlyOpened(windowId: number): Promise<IRecentlyOpened>;
4644
isFocused(windowId: number): Promise<boolean>;
47-
48-
getActiveWindowId(): Promise<number | undefined>;
4945
}
5046

5147
export const IWindowService = createDecorator<IWindowService>('windowService');
@@ -315,37 +311,3 @@ export interface IRunActionInWindowRequest {
315311
export interface IRunKeybindingInWindowRequest {
316312
userSettingsLabel: string;
317313
}
318-
319-
export class ActiveWindowManager extends Disposable {
320-
321-
private readonly disposables = this._register(new DisposableStore());
322-
private firstActiveWindowIdPromise: CancelablePromise<number | undefined> | undefined;
323-
private activeWindowId: number | undefined;
324-
325-
constructor(@IWindowsService windowsService: IWindowsService) {
326-
super();
327-
328-
const onActiveWindowChange = Event.latch(Event.any(windowsService.onWindowOpen, windowsService.onWindowFocus));
329-
onActiveWindowChange(this.setActiveWindow, this, this.disposables);
330-
331-
this.firstActiveWindowIdPromise = createCancelablePromise(_ => windowsService.getActiveWindowId());
332-
this.firstActiveWindowIdPromise
333-
.then(id => this.activeWindowId = typeof this.activeWindowId === 'number' ? this.activeWindowId : id)
334-
.finally(this.firstActiveWindowIdPromise = undefined);
335-
}
336-
337-
private setActiveWindow(windowId: number | undefined) {
338-
if (this.firstActiveWindowIdPromise) {
339-
this.firstActiveWindowIdPromise.cancel();
340-
this.firstActiveWindowIdPromise = undefined;
341-
}
342-
343-
this.activeWindowId = windowId;
344-
}
345-
346-
async getActiveClientId(): Promise<string | undefined> {
347-
const id = this.firstActiveWindowIdPromise ? (await this.firstActiveWindowIdPromise) : this.activeWindowId;
348-
349-
return `window:${id}`;
350-
}
351-
}

src/vs/platform/windows/common/windowsIpc.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,6 @@ export class WindowsChannel implements IServerChannel {
5858
case 'getRecentlyOpened': return this.service.getRecentlyOpened(arg);
5959
case 'isFocused': return this.service.isFocused(arg);
6060
case 'openExtensionDevelopmentHostWindow': return (this.service as any).openExtensionDevelopmentHostWindow(arg[0], arg[1]); // TODO@Isidor move
61-
case 'getActiveWindowId': return this.service.getActiveWindowId();
6261
}
6362

6463
throw new Error(`Call not found: ${command}`);

src/vs/platform/windows/electron-browser/windowsService.ts

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -57,8 +57,4 @@ export class WindowsService implements IWindowsService {
5757
openExtensionDevelopmentHostWindow(args: ParsedArgs, env: IProcessEnvironment): Promise<void> {
5858
return this.channel.call('openExtensionDevelopmentHostWindow', [args, env]);
5959
}
60-
61-
getActiveWindowId(): Promise<number | undefined> {
62-
return this.channel.call('getActiveWindowId');
63-
}
6460
}

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

Lines changed: 1 addition & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
* Licensed under the MIT License. See License.txt in the project root for license information.
44
*--------------------------------------------------------------------------------------------*/
55

6-
import { Disposable, DisposableStore } from 'vs/base/common/lifecycle';
6+
import { Disposable } from 'vs/base/common/lifecycle';
77
import { assign } from 'vs/base/common/objects';
88
import { URI } from 'vs/base/common/uri';
99
import { IWindowsService, OpenContext } from 'vs/platform/windows/common/windows';
@@ -23,10 +23,6 @@ export class LegacyWindowsMainService extends Disposable implements IWindowsServ
2323

2424
_serviceBrand: undefined;
2525

26-
private readonly disposables = this._register(new DisposableStore());
27-
28-
private _activeWindowId: number | undefined;
29-
3026
readonly onWindowOpen: Event<number> = Event.filter(Event.fromNodeEventEmitter(app, 'browser-window-created', (_, w: BrowserWindow) => w.id), id => !!this.windowsMainService.getWindowById(id));
3127
readonly onWindowBlur: Event<number> = Event.filter(Event.fromNodeEventEmitter(app, 'browser-window-blur', (_, w: BrowserWindow) => w.id), id => !!this.windowsMainService.getWindowById(id));
3228
readonly onWindowMaximize: Event<number> = Event.filter(Event.fromNodeEventEmitter(app, 'browser-window-maximize', (_, w: BrowserWindow) => w.id), id => !!this.windowsMainService.getWindowById(id));
@@ -48,10 +44,6 @@ export class LegacyWindowsMainService extends Disposable implements IWindowsServ
4844
super();
4945

5046
urlService.registerHandler(this);
51-
52-
// remember last active window id
53-
Event.latch(Event.any(this.onWindowOpen, this.onWindowFocus))
54-
(id => this._activeWindowId = id, null, this.disposables);
5547
}
5648

5749
async addRecentlyOpened(recents: IRecent[]): Promise<void> {
@@ -96,10 +88,6 @@ export class LegacyWindowsMainService extends Disposable implements IWindowsServ
9688
}
9789
}
9890

99-
async getActiveWindowId(): Promise<number | undefined> {
100-
return this._activeWindowId;
101-
}
102-
10391
async handleURL(uri: URI): Promise<boolean> {
10492

10593
// Catch file URLs
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
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 { DisposableStore, Disposable } from 'vs/base/common/lifecycle';
8+
import { CancelablePromise, createCancelablePromise } from 'vs/base/common/async';
9+
import { IWindowsService } from 'vs/platform/windows/common/windows';
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+
private _activeWindowId: number | undefined;
18+
19+
constructor(@IWindowsService windowsService: IWindowsService) {
20+
super();
21+
22+
// remember last active window id
23+
Event.latch(Event.any(windowsService.onWindowOpen, windowsService.onWindowFocus))(id => this._activeWindowId = id, null, this.disposables);
24+
25+
const onActiveWindowChange = Event.latch(Event.any(windowsService.onWindowOpen, windowsService.onWindowFocus));
26+
onActiveWindowChange(this.setActiveWindow, this, this.disposables);
27+
28+
this.firstActiveWindowIdPromise = createCancelablePromise(_ => this.getActiveWindowId());
29+
this.firstActiveWindowIdPromise
30+
.then(id => this.activeWindowId = typeof this.activeWindowId === 'number' ? this.activeWindowId : id)
31+
.finally(this.firstActiveWindowIdPromise = undefined);
32+
}
33+
34+
private setActiveWindow(windowId: number | undefined) {
35+
if (this.firstActiveWindowIdPromise) {
36+
this.firstActiveWindowIdPromise.cancel();
37+
this.firstActiveWindowIdPromise = undefined;
38+
}
39+
40+
this.activeWindowId = windowId;
41+
}
42+
43+
async getActiveClientId(): Promise<string | undefined> {
44+
const id = this.firstActiveWindowIdPromise ? (await this.firstActiveWindowIdPromise) : this.activeWindowId;
45+
46+
return `window:${id}`;
47+
}
48+
49+
private async getActiveWindowId(): Promise<number | undefined> {
50+
return this._activeWindowId;
51+
}
52+
}

src/vs/workbench/browser/web.simpleservices.ts

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -165,10 +165,6 @@ export class SimpleWindowsService implements IWindowsService {
165165
files: []
166166
});
167167
}
168-
169-
getActiveWindowId(): Promise<number | undefined> {
170-
return Promise.resolve(0);
171-
}
172168
}
173169

174170
registerSingleton(IWindowsService, SimpleWindowsService);

src/vs/workbench/contrib/update/browser/update.ts

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ import { MenuRegistry, MenuId } from 'vs/platform/actions/common/actions';
2727
import { CommandsRegistry } from 'vs/platform/commands/common/commands';
2828
import { FalseContext } from 'vs/platform/contextkey/common/contextkeys';
2929
import { ShowCurrentReleaseNotesActionId } from 'vs/workbench/contrib/update/common/update';
30-
import { IWindowService, IWindowsService } from 'vs/platform/windows/common/windows';
30+
import { IWindowService } from 'vs/platform/windows/common/windows';
3131
import { IProductService } from 'vs/platform/product/common/productService';
3232

3333
const CONTEXT_UPDATE_STATE = new RawContextKey<string>('updateState', StateType.Uninitialized);
@@ -123,11 +123,10 @@ export class ProductContribution implements IWorkbenchContribution {
123123
@IOpenerService openerService: IOpenerService,
124124
@IConfigurationService configurationService: IConfigurationService,
125125
@IWindowService windowService: IWindowService,
126-
@IWindowsService windowsService: IWindowsService,
127126
@IProductService productService: IProductService
128127
) {
129-
windowsService.getActiveWindowId().then(async windowId => {
130-
if (windowId !== windowService.windowId) {
128+
windowService.isFocused().then(async isFocused => {
129+
if (!isFocused) {
131130
return;
132131
}
133132

src/vs/workbench/test/workbenchTestServices.ts

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1280,10 +1280,6 @@ export class TestWindowsService implements IWindowsService {
12801280
files: []
12811281
});
12821282
}
1283-
1284-
getActiveWindowId(): Promise<number | undefined> {
1285-
return Promise.resolve(undefined);
1286-
}
12871283
}
12881284

12891285
export class TestTextResourceConfigurationService implements ITextResourceConfigurationService {

0 commit comments

Comments
 (0)