Skip to content

Commit f97a472

Browse files
author
Benjamin Pasero
committed
debt - some cleanup on main services
1 parent 4aa3f05 commit f97a472

15 files changed

Lines changed: 122 additions & 92 deletions

File tree

src/vs/code/common/windows.ts

Lines changed: 0 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -7,27 +7,6 @@ import Event from 'vs/base/common/event';
77
import { IDisposable, dispose } from 'vs/base/common/lifecycle';
88
import { IWindowsService } from 'vs/platform/windows/common/windows';
99

10-
export enum OpenContext {
11-
12-
// opening when running from the command line
13-
CLI,
14-
15-
// macOS only: opening from the dock (also when opening files to a running instance from desktop)
16-
DOCK,
17-
18-
// opening from the main application window
19-
MENU,
20-
21-
// opening from a file or folder dialog
22-
DIALOG,
23-
24-
// opening from the OS's UI
25-
DESKTOP,
26-
27-
// opening through the API
28-
API
29-
}
30-
3110
export interface IWindowEventService {
3211
_serviceBrand: any;
3312

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

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,11 @@
77

88
import { app, ipcMain as ipc, BrowserWindow } from 'electron';
99
import * as platform from 'vs/base/common/platform';
10-
import { OpenContext } from 'vs/code/common/windows';
1110
import { IWindowsMainService, WindowsManager } from 'vs/code/electron-main/windows';
12-
import { IWindowsService } from 'vs/platform/windows/common/windows';
11+
import { IWindowsService, OpenContext } from 'vs/platform/windows/common/windows';
1312
import { WindowsChannel } from 'vs/platform/windows/common/windowsIpc';
1413
import { WindowsService } from 'vs/platform/windows/electron-main/windowsService';
15-
import { ILifecycleService } from 'vs/code/electron-main/lifecycle';
14+
import { ILifecycleService } from 'vs/platform/lifecycle/electron-main/lifecycleMain';
1615
import { VSCodeMenu } from 'vs/code/electron-main/menus';
1716
import { getShellEnvironment } from 'vs/code/node/shellEnv';
1817
import { IUpdateService } from 'vs/platform/update/common/update';
@@ -26,8 +25,8 @@ import { LaunchService, LaunchChannel, ILaunchService } from './launch';
2625
import { IInstantiationService, ServicesAccessor } from 'vs/platform/instantiation/common/instantiation';
2726
import { ServiceCollection } from 'vs/platform/instantiation/common/serviceCollection';
2827
import { SyncDescriptor } from 'vs/platform/instantiation/common/descriptors';
29-
import { ILogService } from 'vs/code/common/log';
30-
import { IStorageService } from 'vs/code/node/storage';
28+
import { ILogService } from 'vs/platform/log/common/log';
29+
import { IStorageService } from 'vs/platform/storage/node/storage';
3130
import { IBackupMainService } from 'vs/platform/backup/common/backup';
3231
import { BackupChannel } from 'vs/platform/backup/common/backupIpc';
3332
import { IEnvironmentService } from 'vs/platform/environment/common/environment';

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

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,17 +5,16 @@
55

66
'use strict';
77

8-
import { OpenContext } from 'vs/code/common/windows';
98
import { IWindowsMainService } from 'vs/code/electron-main/windows';
10-
import { VSCodeWindow } from 'vs/code/electron-main/window';
119
import { TPromise } from 'vs/base/common/winjs.base';
1210
import { IChannel } from 'vs/base/parts/ipc/common/ipc';
13-
import { ILogService } from 'vs/code/common/log';
11+
import { ILogService } from 'vs/platform/log/common/log';
1412
import { IURLService } from 'vs/platform/url/common/url';
1513
import { IProcessEnvironment } from 'vs/base/common/platform';
1614
import { ParsedArgs } from 'vs/platform/environment/common/environment';
1715
import { createDecorator } from 'vs/platform/instantiation/common/instantiation';
1816
import { once } from 'vs/base/common/event';
17+
import { ICodeWindow, OpenContext } from "vs/platform/windows/common/windows";
1918

2019
export const ID = 'launchService';
2120
export const ILaunchService = createDecorator<ILaunchService>(ID);
@@ -94,7 +93,7 @@ export class LaunchService implements ILaunchService {
9493

9594
// Otherwise handle in windows service
9695
const context = !!userEnv['VSCODE_CLI'] ? OpenContext.CLI : OpenContext.DESKTOP;
97-
let usedWindows: VSCodeWindow[];
96+
let usedWindows: ICodeWindow[];
9897
if (!!args.extensionDevelopmentPath) {
9998
this.windowsService.openExtensionDevelopmentHostWindow({ context, cli: args, userEnv });
10099
} else if (args._.length === 0 && (args['new-window'] || args['unity-launch'])) {

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,16 +11,16 @@ import * as platform from 'vs/base/common/platform';
1111
import { parseMainProcessArgv } from 'vs/platform/environment/node/argv';
1212
import { mkdirp } from 'vs/base/node/pfs';
1313
import { validatePaths } from 'vs/code/node/paths';
14-
import { LifecycleService, ILifecycleService } from 'vs/code/electron-main/lifecycle';
14+
import { LifecycleService, ILifecycleService } from 'vs/platform/lifecycle/electron-main/lifecycleMain';
1515
import { Server, serve, connect } from 'vs/base/parts/ipc/node/ipc.net';
1616
import { TPromise } from 'vs/base/common/winjs.base';
1717
import { ILaunchChannel, LaunchChannelClient } from './launch';
1818
import { ServicesAccessor, IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
1919
import { InstantiationService } from 'vs/platform/instantiation/common/instantiationService';
2020
import { ServiceCollection } from 'vs/platform/instantiation/common/serviceCollection';
2121
import { SyncDescriptor } from 'vs/platform/instantiation/common/descriptors';
22-
import { ILogService, MainLogService } from 'vs/code/common/log';
23-
import { IStorageService, StorageService } from 'vs/code/node/storage';
22+
import { ILogService, MainLogService } from 'vs/platform/log/common/log';
23+
import { IStorageService, StorageService } from 'vs/platform/storage/node/storage';
2424
import { IBackupMainService } from 'vs/platform/backup/common/backup';
2525
import { BackupMainService } from 'vs/platform/backup/electron-main/backupMainService';
2626
import { IEnvironmentService, ParsedArgs } from 'vs/platform/environment/common/environment';

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,11 @@ import { isMacintosh, isLinux, isWindows, language } from 'vs/base/common/platfo
1010
import * as arrays from 'vs/base/common/arrays';
1111
import { IEnvironmentService } from 'vs/platform/environment/common/environment';
1212
import { ipcMain as ipc, app, shell, dialog, Menu, MenuItem, BrowserWindow } from 'electron';
13-
import { OpenContext } from 'vs/code/common/windows';
13+
import { OpenContext } from "vs/platform/windows/common/windows";
1414
import { IWindowsMainService } from 'vs/code/electron-main/windows';
1515
import { VSCodeWindow } from 'vs/code/electron-main/window';
1616
import { IConfigurationService } from 'vs/platform/configuration/common/configuration';
17-
import { IStorageService } from 'vs/code/node/storage';
17+
import { IStorageService } from 'vs/platform/storage/node/storage';
1818
import { IFilesConfiguration, AutoSaveConfiguration } from 'vs/platform/files/common/files';
1919
import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry';
2020
import { IUpdateService, State as UpdateState } from 'vs/platform/update/common/update';

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

Lines changed: 24 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -9,20 +9,21 @@ import * as path from 'path';
99
import * as objects from 'vs/base/common/objects';
1010
import { stopProfiling } from 'vs/base/node/profiler';
1111
import nls = require('vs/nls');
12-
import { IStorageService } from 'vs/code/node/storage';
12+
import { IStorageService } from 'vs/platform/storage/node/storage';
1313
import { shell, screen, BrowserWindow, systemPreferences, app } from 'electron';
1414
import { TPromise, TValueCallback } from 'vs/base/common/winjs.base';
1515
import { IEnvironmentService, ParsedArgs } from 'vs/platform/environment/common/environment';
16-
import { ILogService } from 'vs/code/common/log';
16+
import { ILogService } from 'vs/platform/log/common/log';
1717
import { IConfigurationService } from 'vs/platform/configuration/common/configuration';
1818
import { IWorkbenchEditorConfiguration } from 'vs/workbench/common/editor';
1919
import { parseArgs } from 'vs/platform/environment/node/argv';
2020
import product from 'vs/platform/node/product';
2121
import { getCommonHTTPHeaders } from 'vs/platform/environment/node/http';
22-
import { IWindowSettings, MenuBarVisibility } from 'vs/platform/windows/common/windows';
22+
import { IWindowSettings, MenuBarVisibility, ICodeWindow, ReadyState, IWindowCloseEvent } from 'vs/platform/windows/common/windows';
2323
import { IDisposable, dispose } from 'vs/base/common/lifecycle';
2424
import { KeyboardLayoutMonitor } from 'vs/code/node/keyboard';
2525
import { IProcessEnvironment, isLinux, isMacintosh, isWindows } from "vs/base/common/platform";
26+
import CommonEvent, { Emitter } from "vs/base/common/event";
2627

2728
export interface IWindowState {
2829
width?: number;
@@ -102,37 +103,15 @@ export interface IWindowConfiguration extends ParsedArgs {
102103
nodeCachedDataDir: string;
103104
}
104105

105-
export enum ReadyState {
106-
107-
/**
108-
* This window has not loaded any HTML yet
109-
*/
110-
NONE,
111-
112-
/**
113-
* This window is loading HTML
114-
*/
115-
LOADING,
116-
117-
/**
118-
* This window is navigating to another HTML
119-
*/
120-
NAVIGATING,
121-
122-
/**
123-
* This window is done loading HTML
124-
*/
125-
READY
126-
}
127-
128-
export class VSCodeWindow {
106+
export class VSCodeWindow implements ICodeWindow {
129107

130108
public static themeStorageKey = 'theme';
131109
public static themeBackgroundStorageKey = 'themeBackground';
132110

133111
private static MIN_WIDTH = 200;
134112
private static MIN_HEIGHT = 120;
135113

114+
private _onClose: Emitter<IWindowCloseEvent>;
136115
private options: IWindowCreationOptions;
137116
private hiddenTitleBarStyle: boolean;
138117
private showTimeoutHandle: any;
@@ -167,6 +146,9 @@ export class VSCodeWindow {
167146
this.whenReadyCallbacks = [];
168147
this.toDispose = [];
169148

149+
this._onClose = new Emitter<IWindowCloseEvent>();
150+
this.toDispose.push(this._onClose);
151+
170152
// create browser window
171153
this.createBrowserWindow(config);
172154

@@ -181,6 +163,10 @@ export class VSCodeWindow {
181163
this.registerListeners();
182164
}
183165

166+
public get onClose(): CommonEvent<IWindowCloseEvent> {
167+
return this._onClose.event;
168+
}
169+
184170
private createBrowserWindow(config: IWindowCreationOptions): void {
185171

186172
// Load window state
@@ -374,6 +360,11 @@ export class VSCodeWindow {
374360

375361
private registerListeners(): void {
376362

363+
// Re-emit close event
364+
this._win.on('close', e => {
365+
this._onClose.fire(e);
366+
});
367+
377368
// Remember that we loaded
378369
this._win.webContents.on('did-finish-load', () => {
379370
this._readyState = ReadyState.LOADING;
@@ -861,6 +852,12 @@ export class VSCodeWindow {
861852
}
862853
}
863854

855+
public close(): void {
856+
if (this._win) {
857+
this._win.close();
858+
}
859+
}
860+
864861
public sendWhenReady(channel: string, ...args: any[]): void {
865862
this.ready().then(() => {
866863
this.send(channel, ...args);

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

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -15,20 +15,19 @@ import { assign, mixin } from 'vs/base/common/objects';
1515
import { IBackupMainService } from 'vs/platform/backup/common/backup';
1616
import { trim } from 'vs/base/common/strings';
1717
import { IEnvironmentService, ParsedArgs } from 'vs/platform/environment/common/environment';
18-
import { IStorageService } from 'vs/code/node/storage';
18+
import { IStorageService } from 'vs/platform/storage/node/storage';
1919
import { IPath, VSCodeWindow, IWindowConfiguration, IWindowState as ISingleWindowState, defaultWindowState, WindowMode } from 'vs/code/electron-main/window';
2020
import { ipcMain as ipc, app, screen, BrowserWindow, dialog } from 'electron';
2121
import { IPathWithLineAndColumn, parseLineAndColumnAware } from 'vs/code/node/paths';
22-
import { ILifecycleService, UnloadReason } from 'vs/code/electron-main/lifecycle';
22+
import { ILifecycleService, UnloadReason } from 'vs/platform/lifecycle/electron-main/lifecycleMain';
2323
import { IConfigurationService } from 'vs/platform/configuration/common/configuration';
24-
import { ILogService } from 'vs/code/common/log';
24+
import { ILogService } from 'vs/platform/log/common/log';
2525
import { getPathLabel } from 'vs/base/common/labels';
2626
import { createDecorator } from 'vs/platform/instantiation/common/instantiation';
27-
import { IWindowSettings } from 'vs/platform/windows/common/windows';
27+
import { IWindowSettings, OpenContext } from 'vs/platform/windows/common/windows';
2828
import { getLastActiveWindow, findBestWindowOrFolder } from 'vs/code/node/windowsUtils';
2929
import CommonEvent, { Emitter } from 'vs/base/common/event';
3030
import product from 'vs/platform/node/product';
31-
import { OpenContext } from 'vs/code/common/windows';
3231
import { ITelemetryService, ITelemetryData } from 'vs/platform/telemetry/common/telemetry';
3332
import { isParent, isEqual, isEqualOrParent } from 'vs/platform/files/common/files';
3433
import { KeyboardLayoutMonitor } from 'vs/code/node/keyboard';
@@ -253,7 +252,7 @@ export class WindowsManager implements IWindowsMainService {
253252
});
254253

255254
// Update our windows state before quitting and before closing windows
256-
this.lifecycleService.onBeforeWindowClose(win => this.onBeforeWindowClose(win));
255+
this.lifecycleService.onBeforeWindowClose(win => this.onBeforeWindowClose(win as VSCodeWindow));
257256
this.lifecycleService.onBeforeQuit(() => this.onBeforeQuit());
258257

259258
// Keyboard layout changes

src/vs/code/node/windowsUtils.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import * as path from 'path';
99
import * as fs from 'fs';
1010
import * as platform from 'vs/base/common/platform';
1111
import * as paths from 'vs/base/common/paths';
12-
import { OpenContext } from 'vs/code/common/windows';
12+
import { OpenContext } from "vs/platform/windows/common/windows";
1313
import { isEqualOrParent } from 'vs/platform/files/common/files';
1414

1515
/**

src/vs/code/test/node/windowsUtils.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
import assert = require('assert');
88
import path = require('path');
99
import { findBestWindowOrFolder, ISimpleWindow, IBestWindowOrFolderOptions } from 'vs/code/node/windowsUtils';
10-
import { OpenContext } from 'vs/code/common/windows';
10+
import { OpenContext } from "vs/platform/windows/common/windows";
1111

1212
const fixturesFolder = require.toUrl('./fixtures');
1313

src/vs/code/electron-main/lifecycle.ts renamed to src/vs/platform/lifecycle/electron-main/lifecycleMain.ts

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,12 @@
77

88
import { ipcMain as ipc, app } from 'electron';
99
import { TPromise, TValueCallback } from 'vs/base/common/winjs.base';
10-
import { ReadyState, VSCodeWindow } from 'vs/code/electron-main/window';
1110
import { IEnvironmentService } from 'vs/platform/environment/common/environment';
12-
import { ILogService } from 'vs/code/common/log';
13-
import { IStorageService } from 'vs/code/node/storage';
11+
import { ILogService } from 'vs/platform/log/common/log';
12+
import { IStorageService } from 'vs/platform/storage/node/storage';
1413
import Event, { Emitter } from 'vs/base/common/event';
1514
import { createDecorator } from 'vs/platform/instantiation/common/instantiation';
15+
import { ICodeWindow, ReadyState } from "vs/platform/windows/common/windows";
1616

1717
export const ILifecycleService = createDecorator<ILifecycleService>('lifecycleService');
1818

@@ -43,12 +43,12 @@ export interface ILifecycleService {
4343
* is called even when the window prevents the closing. We want an event that truly fires
4444
* before the window gets closed for real.
4545
*/
46-
onBeforeWindowClose: Event<VSCodeWindow>;
46+
onBeforeWindowClose: Event<ICodeWindow>;
4747

4848
ready(): void;
49-
registerWindow(vscodeWindow: VSCodeWindow): void;
49+
registerWindow(codeWindow: ICodeWindow): void;
5050

51-
unload(vscodeWindow: VSCodeWindow, reason: UnloadReason): TPromise<boolean /* veto */>;
51+
unload(codeWindow: ICodeWindow, reason: UnloadReason): TPromise<boolean /* veto */>;
5252

5353
relaunch(options?: { addArgs?: string[], removeArgs?: string[] });
5454

@@ -74,8 +74,8 @@ export class LifecycleService implements ILifecycleService {
7474
private _onBeforeQuit = new Emitter<void>();
7575
onBeforeQuit: Event<void> = this._onBeforeQuit.event;
7676

77-
private _onBeforeWindowClose = new Emitter<VSCodeWindow>();
78-
onBeforeWindowClose: Event<VSCodeWindow> = this._onBeforeWindowClose.event;
77+
private _onBeforeWindowClose = new Emitter<ICodeWindow>();
78+
onBeforeWindowClose: Event<ICodeWindow> = this._onBeforeWindowClose.event;
7979

8080
constructor(
8181
@IEnvironmentService private environmentService: IEnvironmentService,
@@ -132,11 +132,11 @@ export class LifecycleService implements ILifecycleService {
132132
});
133133
}
134134

135-
public registerWindow(vscodeWindow: VSCodeWindow): void {
135+
public registerWindow(codeWindow: ICodeWindow): void {
136136

137137
// Window Before Closing: Main -> Renderer
138-
vscodeWindow.win.on('close', (e) => {
139-
const windowId = vscodeWindow.id;
138+
codeWindow.onClose(e => {
139+
const windowId = codeWindow.id;
140140
this.logService.log('Lifecycle#window-before-close', windowId);
141141

142142
// The window already acknowledged to be closed
@@ -150,11 +150,11 @@ export class LifecycleService implements ILifecycleService {
150150

151151
// Otherwise prevent unload and handle it from window
152152
e.preventDefault();
153-
this.unload(vscodeWindow, UnloadReason.CLOSE).done(veto => {
153+
this.unload(codeWindow, UnloadReason.CLOSE).done(veto => {
154154
if (!veto) {
155155
this.windowToCloseRequest[windowId] = true;
156-
this._onBeforeWindowClose.fire(vscodeWindow);
157-
vscodeWindow.win.close();
156+
this._onBeforeWindowClose.fire(codeWindow);
157+
codeWindow.close();
158158
} else {
159159
this.quitRequested = false;
160160
delete this.windowToCloseRequest[windowId];
@@ -163,14 +163,14 @@ export class LifecycleService implements ILifecycleService {
163163
});
164164
}
165165

166-
public unload(vscodeWindow: VSCodeWindow, reason: UnloadReason): TPromise<boolean /* veto */> {
166+
public unload(codeWindow: ICodeWindow, reason: UnloadReason): TPromise<boolean /* veto */> {
167167

168168
// Always allow to unload a window that is not yet ready
169-
if (vscodeWindow.readyState !== ReadyState.READY) {
169+
if (codeWindow.readyState !== ReadyState.READY) {
170170
return TPromise.as<boolean>(false);
171171
}
172172

173-
this.logService.log('Lifecycle#unload()', vscodeWindow.id);
173+
this.logService.log('Lifecycle#unload()', codeWindow.id);
174174

175175
return new TPromise<boolean>((c) => {
176176
const oneTimeEventToken = this.oneTimeListenerTokenGenerator++;
@@ -193,7 +193,7 @@ export class LifecycleService implements ILifecycleService {
193193
c(true); // veto
194194
});
195195

196-
vscodeWindow.send('vscode:beforeUnload', { okChannel, cancelChannel, reason: this.quitRequested ? UnloadReason.QUIT : reason });
196+
codeWindow.send('vscode:beforeUnload', { okChannel, cancelChannel, reason: this.quitRequested ? UnloadReason.QUIT : reason });
197197
});
198198
}
199199

0 commit comments

Comments
 (0)