diff --git a/src/vs/workbench/parts/extensions/electron-browser/extensionEditor.ts b/src/vs/workbench/parts/extensions/electron-browser/extensionEditor.ts index b68eddf27ee89656adbb7b5f519877bc0286cebe..1dbfdd133a4715c4c76dc0b5c23f297e0e690318 100644 --- a/src/vs/workbench/parts/extensions/electron-browser/extensionEditor.ts +++ b/src/vs/workbench/parts/extensions/electron-browser/extensionEditor.ts @@ -14,14 +14,13 @@ import * as arrays from 'vs/base/common/arrays'; import Event, { Emitter, once, fromEventEmitter, filterEvent, mapEvent } from 'vs/base/common/event'; import Cache from 'vs/base/common/cache'; import { Action } from 'vs/base/common/actions'; -import { isPromiseCanceledError, onUnexpectedError } from 'vs/base/common/errors'; +import { isPromiseCanceledError } from 'vs/base/common/errors'; import Severity from 'vs/base/common/severity'; import { IDisposable, empty, dispose, toDisposable } from 'vs/base/common/lifecycle'; import { Builder } from 'vs/base/browser/builder'; import { domEvent } from 'vs/base/browser/event'; import { append, $, addClass, removeClass, finalHandler, join } from 'vs/base/browser/dom'; import { BaseEditor } from 'vs/workbench/browser/parts/editor/baseEditor'; -import { IViewlet } from 'vs/workbench/common/viewlet'; import { IViewletService } from 'vs/workbench/services/viewlet/common/viewletService'; import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; @@ -149,8 +148,6 @@ export class ExtensionEditor extends BaseEditor { this.disposables = []; this.extensionReadme = null; this.extensionManifest = null; - - this.disposables.push(viewletService.onDidViewletOpen(this.onViewletOpen, this, this.disposables)); } createEditor(parent: Builder): void { @@ -549,14 +546,6 @@ export class ExtensionEditor extends BaseEditor { this.layoutParticipants.forEach(p => p.layout()); } - private onViewletOpen(viewlet: IViewlet): void { - if (!viewlet || viewlet.getId() === VIEWLET_ID) { - return; - } - - this.editorService.closeEditor(this.position, this.input).done(null, onUnexpectedError); - } - private onError(err: any): void { if (isPromiseCanceledError(err)) { return; diff --git a/src/vs/workbench/parts/extensions/electron-browser/extensionsViewlet.ts b/src/vs/workbench/parts/extensions/electron-browser/extensionsViewlet.ts index 9430c00e364b825bf237613652a483a64f8a8982..ba82e0ca422caf1b6ebb68245a6da06d04ba1e74 100644 --- a/src/vs/workbench/parts/extensions/electron-browser/extensionsViewlet.ts +++ b/src/vs/workbench/parts/extensions/electron-browser/extensionsViewlet.ts @@ -9,7 +9,7 @@ import 'vs/css!./media/extensionsViewlet'; import { localize } from 'vs/nls'; import { ThrottledDelayer, always } from 'vs/base/common/async'; import { TPromise } from 'vs/base/common/winjs.base'; -import { isPromiseCanceledError, create as createError } from 'vs/base/common/errors'; +import { isPromiseCanceledError, onUnexpectedError, create as createError } from 'vs/base/common/errors'; import { IDisposable, dispose } from 'vs/base/common/lifecycle'; import { Builder, Dimension } from 'vs/base/browser/builder'; import { assign } from 'vs/base/common/objects'; @@ -20,6 +20,8 @@ import { Separator } from 'vs/base/browser/ui/actionbar/actionbar'; import { StandardKeyboardEvent } from 'vs/base/browser/keyboardEvent'; import { KeyCode } from 'vs/base/common/keyCodes'; import { Viewlet } from 'vs/workbench/browser/viewlet'; +import { IViewlet } from 'vs/workbench/common/viewlet'; +import { IViewletService } from 'vs/workbench/services/viewlet/common/viewletService'; import { append, $, addStandardDisposableListener, EventType, addClass, removeClass, toggleClass } from 'vs/base/browser/dom'; import { PagedModel } from 'vs/base/common/paging'; import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; @@ -34,6 +36,7 @@ import { Query } from '../common/extensionQuery'; import { OpenGlobalSettingsAction } from 'vs/workbench/browser/actions/openSettings'; import { IProgressService } from 'vs/platform/progress/common/progress'; import { IWorkbenchEditorService } from 'vs/workbench/services/editor/common/editorService'; +import { IEditorGroupService } from 'vs/workbench/services/group/common/groupService'; import { IMessageService, CloseAction } from 'vs/platform/message/common/message'; import Severity from 'vs/base/common/severity'; import { IURLService } from 'vs/platform/url/common/url'; @@ -63,16 +66,20 @@ export class ExtensionsViewlet extends Viewlet implements IExtensionsViewlet { @IProgressService private progressService: IProgressService, @IInstantiationService private instantiationService: IInstantiationService, @IWorkbenchEditorService private editorService: IWorkbenchEditorService, + @IEditorGroupService private editorInputService: IEditorGroupService, @IExtensionsWorkbenchService private extensionsWorkbenchService: IExtensionsWorkbenchService, @IURLService urlService: IURLService, @IExtensionTipsService private tipsService: IExtensionTipsService, - @IMessageService private messageService: IMessageService + @IMessageService private messageService: IMessageService, + @IViewletService private viewletService: IViewletService ) { super(VIEWLET_ID, telemetryService); this.searchDelayer = new ThrottledDelayer(500); const onOpenExtensionUrl = filterEvent(urlService.onOpenURL, uri => /^extension/.test(uri.path)); onOpenExtensionUrl(this.onOpenExtensionUrl, this, this.disposables); + + this.disposables.push(viewletService.onDidViewletOpen(this.onViewletOpen, this, this.disposables)); } create(parent: Builder): TPromise { @@ -309,6 +316,24 @@ export class ExtensionsViewlet extends Viewlet implements IExtensionsViewlet { return always(promise, () => progressRunner.done()); } + private onViewletOpen(viewlet: IViewlet): void { + if (!viewlet || viewlet.getId() === VIEWLET_ID) { + return; + } + + const model = this.editorInputService.getStacksModel(); + + const promises = model.groups.map(group => { + const position = model.positionOfGroup(group); + const inputs = group.getEditors().filter(input => input instanceof ExtensionsInput); + const promises = inputs.map(input => this.editorService.closeEditor(position, input)); + + return TPromise.join(promises); + }); + + TPromise.join(promises).done(null, onUnexpectedError); + } + private onError(err: any): void { if (isPromiseCanceledError(err)) { return;