mirror of
https://github.com/microsoft/vscode.git
synced 2026-04-29 13:03:42 +01:00
debt - add whenClosedOrLoaded into window class
This commit is contained in:
@@ -70,6 +70,9 @@ export class CodeWindow extends Disposable implements ICodeWindow {
|
||||
private readonly _onDestroy = this._register(new Emitter<void>());
|
||||
readonly onDestroy: CommonEvent<void> = this._onDestroy.event;
|
||||
|
||||
private readonly _onLoad = this._register(new Emitter<void>());
|
||||
readonly onLoad: CommonEvent<void> = this._onLoad.event;
|
||||
|
||||
private hiddenTitleBarStyle: boolean;
|
||||
private showTimeoutHandle: NodeJS.Timeout;
|
||||
private _id: number;
|
||||
@@ -324,6 +327,21 @@ export class CodeWindow extends Disposable implements ICodeWindow {
|
||||
return this._readyState === ReadyState.READY;
|
||||
}
|
||||
|
||||
get whenClosedOrLoaded(): Promise<void> {
|
||||
return new Promise<void>(resolve => {
|
||||
|
||||
function handle() {
|
||||
closeListener.dispose();
|
||||
loadListener.dispose();
|
||||
|
||||
resolve();
|
||||
}
|
||||
|
||||
const closeListener = this.onClose(() => handle());
|
||||
const loadListener = this.onLoad(() => handle());
|
||||
});
|
||||
}
|
||||
|
||||
private handleMarketplaceRequests(): void {
|
||||
|
||||
// Resolve marketplace headers
|
||||
@@ -349,7 +367,11 @@ export class CodeWindow extends Disposable implements ICodeWindow {
|
||||
this._win.on('unresponsive', () => this.onWindowError(WindowError.UNRESPONSIVE));
|
||||
|
||||
// Window close
|
||||
this._win.on('closed', () => this._onClose.fire());
|
||||
this._win.on('closed', () => {
|
||||
this._onClose.fire();
|
||||
|
||||
this.dispose();
|
||||
});
|
||||
|
||||
// Prevent loading of svgs
|
||||
this._win.webContents.session.webRequest.onBeforeRequest(null!, (details, callback) => {
|
||||
@@ -606,6 +628,9 @@ export class CodeWindow extends Disposable implements ICodeWindow {
|
||||
}
|
||||
}, 10000);
|
||||
}
|
||||
|
||||
// Event
|
||||
this._onLoad.fire();
|
||||
}
|
||||
|
||||
reload(configurationIn?: IWindowConfiguration, cli?: ParsedArgs): void {
|
||||
|
||||
@@ -166,9 +166,6 @@ export class WindowsManager extends Disposable implements IWindowsMainService {
|
||||
private readonly _onWindowClose = this._register(new Emitter<number>());
|
||||
readonly onWindowClose: CommonEvent<number> = this._onWindowClose.event;
|
||||
|
||||
private readonly _onWindowLoad = this._register(new Emitter<number>());
|
||||
readonly onWindowLoad: CommonEvent<number> = this._onWindowLoad.event;
|
||||
|
||||
private readonly _onWindowsCountChanged = this._register(new Emitter<IWindowsCountChangedEvent>());
|
||||
readonly onWindowsCountChanged: CommonEvent<IWindowsCountChangedEvent> = this._onWindowsCountChanged.event;
|
||||
|
||||
@@ -502,7 +499,7 @@ export class WindowsManager extends Disposable implements IWindowsMainService {
|
||||
// process can continue. We do this by deleting the waitMarkerFilePath.
|
||||
const waitMarkerFileURI = openConfig.waitMarkerFileURI;
|
||||
if (openConfig.context === OpenContext.CLI && waitMarkerFileURI && usedWindows.length === 1 && usedWindows[0]) {
|
||||
this.waitForWindowCloseOrLoad(usedWindows[0].id).then(() => fs.unlink(waitMarkerFileURI.fsPath, _error => undefined));
|
||||
usedWindows[0].whenClosedOrLoaded.then(() => fs.unlink(waitMarkerFileURI.fsPath, _error => undefined));
|
||||
}
|
||||
|
||||
return usedWindows;
|
||||
@@ -1456,9 +1453,6 @@ export class WindowsManager extends Disposable implements IWindowsMainService {
|
||||
|
||||
// Load it
|
||||
window.load(configuration);
|
||||
|
||||
// Signal event
|
||||
this._onWindowLoad.fire(window.id);
|
||||
}
|
||||
|
||||
private getNewWindowState(configuration: IWindowConfiguration): INewWindowState {
|
||||
@@ -1642,22 +1636,6 @@ export class WindowsManager extends Disposable implements IWindowsMainService {
|
||||
return this.open({ context, cli, forceEmpty: true, forceNewWindow, forceReuseWindow });
|
||||
}
|
||||
|
||||
waitForWindowCloseOrLoad(windowId: number): Promise<void> {
|
||||
return new Promise<void>(resolve => {
|
||||
function handler(id: number) {
|
||||
if (id === windowId) {
|
||||
closeListener.dispose();
|
||||
loadListener.dispose();
|
||||
|
||||
resolve();
|
||||
}
|
||||
}
|
||||
|
||||
const closeListener = this.onWindowClose(id => handler(id));
|
||||
const loadListener = this.onWindowLoad(id => handler(id));
|
||||
});
|
||||
}
|
||||
|
||||
sendToFocused(channel: string, ...args: any[]): void {
|
||||
const focusedWindow = this.getFocusedWindow() || this.getLastActiveWindow();
|
||||
|
||||
@@ -1700,9 +1678,6 @@ export class WindowsManager extends Disposable implements IWindowsMainService {
|
||||
|
||||
private onWindowClosed(win: ICodeWindow): void {
|
||||
|
||||
// Tell window
|
||||
win.dispose();
|
||||
|
||||
// Remove from our list so that Electron can clean it up
|
||||
const index = WindowsManager.WINDOWS.indexOf(win);
|
||||
WindowsManager.WINDOWS.splice(index, 1);
|
||||
|
||||
Reference in New Issue
Block a user