diff --git a/src/vs/workbench/api/node/extHostEditors.ts b/src/vs/workbench/api/node/extHostEditors.ts index 540e6c96770..53b95c9d389 100644 --- a/src/vs/workbench/api/node/extHostEditors.ts +++ b/src/vs/workbench/api/node/extHostEditors.ts @@ -21,7 +21,6 @@ import {IModelService} from 'vs/editor/common/services/modelService'; import {MainThreadEditorsTracker, TextEditorRevealType, MainThreadTextEditor, ITextEditorConfigurationUpdate, IResolvedTextEditorConfiguration} from 'vs/workbench/api/node/mainThreadEditors'; import * as TypeConverters from './extHostTypeConverters'; import {TextDocument, TextEditorSelectionChangeEvent, TextEditorOptionsChangeEvent, TextEditorOptions, TextEditorViewColumnChangeEvent, ViewColumn} from 'vscode'; -import {EventType} from 'vs/workbench/common/events'; import {ITelemetryService} from 'vs/platform/telemetry/common/telemetry'; import {IEventService} from 'vs/platform/event/common/event'; import {equals as arrayEquals} from 'vs/base/common/arrays'; @@ -494,7 +493,7 @@ export class MainThreadEditors { this._toDispose.push(this._editorTracker.onDidUpdateTextEditors(() => this._updateActiveAndVisibleTextEditors())); this._toDispose.push(this._editorTracker.onChangedFocusedTextEditor((focusedTextEditorId) => this._updateActiveAndVisibleTextEditors())); this._toDispose.push(workbenchEditorService.onEditorsChanged(() => this._updateActiveAndVisibleTextEditors())); - this._toDispose.push(eventService.addListener2(EventType.EDITOR_POSITION_CHANGED, () => this._updateActiveAndVisibleTextEditors())); + this._toDispose.push(workbenchEditorService.onEditorsMoved(() => this._updateActiveAndVisibleTextEditors())); } public dispose(): void { diff --git a/src/vs/workbench/browser/parts/editor/baseEditor.ts b/src/vs/workbench/browser/parts/editor/baseEditor.ts index 1937f4e5d2a..fdd52c24c69 100644 --- a/src/vs/workbench/browser/parts/editor/baseEditor.ts +++ b/src/vs/workbench/browser/parts/editor/baseEditor.ts @@ -9,7 +9,6 @@ import {Action, IAction} from 'vs/base/common/actions'; import {ActionBarContributor} from 'vs/workbench/browser/actionBarRegistry'; import types = require('vs/base/common/types'); import {Builder} from 'vs/base/browser/builder'; -import {EventType} from 'vs/workbench/common/events'; import {Registry} from 'vs/platform/platform'; import {Panel} from 'vs/workbench/browser/panel'; import {EditorInput, IFileEditorInput, EditorOptions} from 'vs/workbench/common/editor'; @@ -123,7 +122,6 @@ export abstract class BaseEditor extends Panel implements IEditor { */ public changePosition(position: Position): void { this._position = position; - this.emit(EventType.EDITOR_POSITION_CHANGED, this); } /** diff --git a/src/vs/workbench/browser/parts/editor/editorPart.ts b/src/vs/workbench/browser/parts/editor/editorPart.ts index e37f0bd64a1..6020a4cd9f7 100644 --- a/src/vs/workbench/browser/parts/editor/editorPart.ts +++ b/src/vs/workbench/browser/parts/editor/editorPart.ts @@ -84,6 +84,7 @@ export class EditorPart extends Part implements IEditorPart { private stacks: EditorStacksModel; private _onEditorsChanged: Emitter; + private _onEditorsMoved: Emitter; // The following data structures are partitioned into array of Position as provided by Services.POSITION array private visibleEditors: BaseEditor[]; @@ -107,6 +108,7 @@ export class EditorPart extends Part implements IEditorPart { super(id); this._onEditorsChanged = new Emitter(); + this._onEditorsMoved = new Emitter(); this.visibleEditors = []; @@ -151,6 +153,10 @@ export class EditorPart extends Part implements IEditorPart { return this._onEditorsChanged.event; } + public get onEditorsMoved(): Event { + return this._onEditorsMoved.event; + } + public openEditor(input: EditorInput, options?: EditorOptions, sideBySide?: boolean): TPromise; public openEditor(input: EditorInput, options?: EditorOptions, position?: Position, widthRatios?: number[]): TPromise; public openEditor(input: EditorInput, options?: EditorOptions, arg3?: any, widthRatios?: number[]): TPromise { @@ -573,6 +579,11 @@ export class EditorPart extends Part implements IEditorPart { // Emit Editor Closed Event this.emit(WorkbenchEventType.EDITOR_CLOSED, editor); + + // Emit Editor move event + if (rochade !== Rochade.NONE) { + this._onEditorsMoved.fire(); + } } public closeAllEditors(except?: Position): TPromise { @@ -732,6 +743,9 @@ export class EditorPart extends Part implements IEditorPart { // Update all title areas this.doRecreateEditorTitleArea(); + + // Events + this._onEditorsMoved.fire(); } public moveEditor(input: EditorInput, from: Position, to: Position, index?: number): void { @@ -1128,6 +1142,10 @@ export class EditorPart extends Part implements IEditorPart { public dispose(): void { this.mapEditorToEditorContainers = null; + // Emitters + this._onEditorsChanged.dispose(); + this._onEditorsMoved.dispose(); + // Reset Tokens this.editorOpenToken = []; for (let i = 0; i < POSITIONS.length; i++) { diff --git a/src/vs/workbench/common/events.ts b/src/vs/workbench/common/events.ts index 7ce5027ab7a..3c852f64047 100644 --- a/src/vs/workbench/common/events.ts +++ b/src/vs/workbench/common/events.ts @@ -36,11 +36,6 @@ export class EventType { */ static EDITOR_SET_INPUT_ERROR = 'editorSetInputError'; - /** - * Event type for when the editor position has been changed - */ - static EDITOR_POSITION_CHANGED = 'editorPositionChanged'; - /** * Event type for when a composite is about to open. */ diff --git a/src/vs/workbench/services/editor/browser/editorService.ts b/src/vs/workbench/services/editor/browser/editorService.ts index 886ad09be6a..78dcc3df67d 100644 --- a/src/vs/workbench/services/editor/browser/editorService.ts +++ b/src/vs/workbench/services/editor/browser/editorService.ts @@ -30,6 +30,7 @@ export interface IEditorPart { // Events onEditorsChanged: Event; + onEditorsMoved: Event; // Methods openEditor(input?: EditorInput, options?: EditorOptions, sideBySide?: boolean): TPromise; @@ -72,6 +73,10 @@ export class WorkbenchEditorService implements IWorkbenchEditorService { return this.editorPart.onEditorsChanged; } + public get onEditorsMoved(): Event { + return this.editorPart.onEditorsMoved; + } + public getActiveEditor(): IEditor { return this.editorPart.getActiveEditor(); } diff --git a/src/vs/workbench/services/editor/common/editorService.ts b/src/vs/workbench/services/editor/common/editorService.ts index a29342a53ed..5534844438f 100644 --- a/src/vs/workbench/services/editor/common/editorService.ts +++ b/src/vs/workbench/services/editor/common/editorService.ts @@ -29,6 +29,11 @@ export interface IWorkbenchEditorService extends IEditorService { */ onEditorsChanged: Event; + /** + * Emitted when a editors are moved to another position. + */ + onEditorsMoved: Event; + /** * Returns the currently active editor or null if none. */ diff --git a/src/vs/workbench/test/browser/services.test.ts b/src/vs/workbench/test/browser/services.test.ts index 91c2ca82799..978fb5c7f7a 100644 --- a/src/vs/workbench/test/browser/services.test.ts +++ b/src/vs/workbench/test/browser/services.test.ts @@ -75,6 +75,10 @@ class TestEditorPart implements IEditorPart { return null; } + public get onEditorsMoved(): Event { + return null; + } + public replaceEditors(editors: { toReplace: EditorInput, replaceWith: EditorInput, options?: any }[]): TPromise { return TPromise.as([]); } diff --git a/src/vs/workbench/test/common/servicesTestUtils.ts b/src/vs/workbench/test/common/servicesTestUtils.ts index 73553df7c8e..0f8a037fdbb 100644 --- a/src/vs/workbench/test/common/servicesTestUtils.ts +++ b/src/vs/workbench/test/common/servicesTestUtils.ts @@ -293,11 +293,13 @@ export class TestEditorService implements WorkbenchEditorService.IWorkbenchEdito private stacksModel: EditorStacksModel; private _onEditorsChanged: Emitter; + private _onEditorsMoved: Emitter; constructor(callback?: (method: string) => void) { this.callback = callback || ((s: string) => { }); this._onEditorsChanged = new Emitter(); + this._onEditorsMoved = new Emitter(); let services = new ServiceCollection(); @@ -319,6 +321,10 @@ export class TestEditorService implements WorkbenchEditorService.IWorkbenchEdito return this._onEditorsChanged.event; } + public get onEditorsMoved(): Event { + return this._onEditorsMoved.event; + } + public openEditors(inputs): Promise { return TPromise.as([]); }