diff --git a/src/vs/workbench/electron-browser/actions.ts b/src/vs/workbench/electron-browser/actions.ts index 4b93dc13fd1..cac1fe268dd 100644 --- a/src/vs/workbench/electron-browser/actions.ts +++ b/src/vs/workbench/electron-browser/actions.ts @@ -376,7 +376,7 @@ export class ReloadWindowAction extends Action { } public run(): TPromise { - ipc.send('vscode:reloadWindow', this.windowService.getWindowId()); + this.windowService.getWindow().reload(); return TPromise.as(true); } diff --git a/src/vs/workbench/electron-browser/shell.ts b/src/vs/workbench/electron-browser/shell.ts index 197010a9b58..fbc12f325ad 100644 --- a/src/vs/workbench/electron-browser/shell.ts +++ b/src/vs/workbench/electron-browser/shell.ts @@ -20,7 +20,6 @@ import {Dimension, Builder, $} from 'vs/base/browser/builder'; import objects = require('vs/base/common/objects'); import dom = require('vs/base/browser/dom'); import aria = require('vs/base/browser/ui/aria/aria'); -import {Emitter} from 'vs/base/common/event'; import {disposeAll, IDisposable} from 'vs/base/common/lifecycle'; import errors = require('vs/base/common/errors'); import {ContextViewService} from 'vs/platform/contextview/browser/contextViewService'; @@ -97,11 +96,11 @@ import {IUntitledEditorService, UntitledEditorService} from 'vs/workbench/servic import {CrashReporter} from 'vs/workbench/electron-browser/crashReporter'; import {IThemeService, DEFAULT_THEME_ID} from 'vs/workbench/services/themes/common/themeService'; import {ThemeService} from 'vs/workbench/services/themes/node/themeService'; -import { IServiceCtor, isServiceEvent, getService } from 'vs/base/common/service'; -import { connect, Client } from 'vs/base/node/service.net'; -import { IExtensionsService } from 'vs/workbench/parts/extensions/common/extensions'; -import { ExtensionsService } from 'vs/workbench/parts/extensions/node/extensionsService'; -import { ReloadWindowAction } from 'vs/workbench/electron-browser/actions'; +import {getService } from 'vs/base/common/service'; +import {connect} from 'vs/base/node/service.net'; +import {IExtensionsService} from 'vs/workbench/parts/extensions/common/extensions'; +import {ExtensionsService} from 'vs/workbench/parts/extensions/node/extensionsService'; +import {ReloadWindowAction} from 'vs/workbench/electron-browser/actions'; /** * The Monaco Workbench Shell contains the Monaco workbench with a rich header containing navigation and the activity bar. @@ -163,7 +162,7 @@ export class WorkbenchShell { sharedProcessClientPromise.done(service => { service.onClose(() => { this.messageService.show(Severity.Error, { - message: nls.localize('sharedProcessCrashed', "The shared process terminated unexpectedly. Please reload the window."), + message: nls.localize('sharedProcessCrashed', "The shared process terminated unexpectedly. Please reload the window to recover."), actions: [instantiationService.createInstance(ReloadWindowAction, ReloadWindowAction.ID, ReloadWindowAction.LABEL)] }); }); diff --git a/src/vs/workbench/electron-browser/window.ts b/src/vs/workbench/electron-browser/window.ts index 9ed9c6f376c..33046d42a97 100644 --- a/src/vs/workbench/electron-browser/window.ts +++ b/src/vs/workbench/electron-browser/window.ts @@ -154,6 +154,10 @@ export class ElectronWindow { this.win.close(); } + public reload(): void { + ipc.send('vscode:reloadWindow', this.win.id); + } + public showMessageBox(options: Electron.Dialog.ShowMessageBoxOptions): number { return remote.dialog.showMessageBox(this.win, options); } diff --git a/src/vs/workbench/services/thread/electron-browser/threadService.ts b/src/vs/workbench/services/thread/electron-browser/threadService.ts index a2815035a65..3f3708e566b 100644 --- a/src/vs/workbench/services/thread/electron-browser/threadService.ts +++ b/src/vs/workbench/services/thread/electron-browser/threadService.ts @@ -5,6 +5,7 @@ 'use strict'; +import {Action} from 'vs/base/common/actions'; import {TPromise} from 'vs/base/common/winjs.base'; import nls = require('vs/nls'); import {MainThreadService as CommonMainThreadService} from 'vs/platform/thread/common/mainThreadService'; @@ -176,7 +177,7 @@ class PluginHostProcessManager { // Support logging from plugin host else if (msg && (msg).type === '__$console') { - let logEntry:ILogEntry = msg; + let logEntry: ILogEntry = msg; let args = []; try { @@ -243,7 +244,10 @@ class PluginHostProcessManager { // Unexpected termination if (!this.isPluginDevelopmentHost) { - this.messageService.show(Severity.Error, nls.localize('pluginHostProcess.crash', "Extension host terminated unexpectedly. Please restart VSCode to recover.")); + this.messageService.show(Severity.Error, { + message: nls.localize('pluginHostProcess.crash', "Extension host terminated unexpectedly. Please reload the window to recover."), + actions: [new Action('reloadWindow', nls.localize('reloadWindow', "Reload Window"), null, true, () => { this.windowService.getWindow().reload(); return TPromise.as(null); })] + }); console.error('Plugin host terminated unexpectedly. Code: ', code, ' Signal: ', signal); }