diff --git a/src/vs/workbench/common/editor.ts b/src/vs/workbench/common/editor.ts index 6ec676c9306faec5c0799d8c2433129b6f6b026c..a61c86dec0c56f1cadc02a738cd7a1cdeaca2ff7 100644 --- a/src/vs/workbench/common/editor.ts +++ b/src/vs/workbench/common/editor.ts @@ -791,7 +791,7 @@ export interface IEditorContext extends IEditorIdentifier { } export interface IEditorCloseEvent extends IEditorIdentifier { - pinned: boolean; + replaced: boolean; index: number; } diff --git a/src/vs/workbench/common/editor/editorStacksModel.ts b/src/vs/workbench/common/editor/editorStacksModel.ts index 20f09e32702b1d94dec5752ac56a75daaacfa55a..78891b8d501bece670f38566ff605eef02104345 100644 --- a/src/vs/workbench/common/editor/editorStacksModel.ts +++ b/src/vs/workbench/common/editor/editorStacksModel.ts @@ -342,8 +342,8 @@ export class EditorGroup implements IEditorGroup { })); } - public replaceEditor(toReplace: EditorInput, replaceWidth: EditorInput, replaceIndex: number, openNext = true): void { - const event = this.doCloseEditor(toReplace, openNext); // optimization to prevent multiple setActive() in one call + private replaceEditor(toReplace: EditorInput, replaceWidth: EditorInput, replaceIndex: number, openNext = true): void { + const event = this.doCloseEditor(toReplace, openNext, true); // optimization to prevent multiple setActive() in one call // We want to first add the new editor into our model before emitting the close event because // firing the close event can trigger a dispose on the same editor that is now being added. @@ -356,14 +356,14 @@ export class EditorGroup implements IEditorGroup { } public closeEditor(editor: EditorInput, openNext = true): void { - const event = this.doCloseEditor(editor, openNext); + const event = this.doCloseEditor(editor, openNext, false); if (event) { this.fireEvent(this._onEditorClosed, event, true); } } - private doCloseEditor(editor: EditorInput, openNext = true): EditorCloseEvent { + private doCloseEditor(editor: EditorInput, openNext: boolean, replaced: boolean): EditorCloseEvent { const index = this.indexOf(editor); if (index === -1) { return null; // not found @@ -384,17 +384,15 @@ export class EditorGroup implements IEditorGroup { } // Preview Editor closed - let pinned = true; if (this.matches(this.preview, editor)) { this.preview = null; - pinned = false; } // Remove from arrays this.splice(index, true); // Event - return { editor, pinned, index, group: this }; + return { editor, replaced, index, group: this }; } public closeEditors(except: EditorInput, direction?: Direction): void { diff --git a/src/vs/workbench/services/history/browser/history.ts b/src/vs/workbench/services/history/browser/history.ts index 04c8610f378cda3cbf97894b10564a6d00c7c283..adcd70dbd1880962204d1c27409eef8ba0f65664 100644 --- a/src/vs/workbench/services/history/browser/history.ts +++ b/src/vs/workbench/services/history/browser/history.ts @@ -244,8 +244,8 @@ export class HistoryService extends BaseHistoryService implements IHistoryServic private onEditorClosed(event: IEditorCloseEvent): void { - // Track closing of pinned editor to support to reopen closed editors - if (event.pinned) { + // Track closing of editor to support to reopen closed editors (unless editor was replaced) + if (!event.replaced) { const resource = event.editor ? event.editor.getResource() : void 0; const supportsReopen = resource && this.fileService.canHandleResource(resource); // we only support file'ish things to reopen if (supportsReopen) { diff --git a/src/vs/workbench/test/browser/parts/editor/editorStacksModel.test.ts b/src/vs/workbench/test/browser/parts/editor/editorStacksModel.test.ts index 6308cacd79833198da25e23f35d49559062ee59e..8bc84172a4a7ae107370f3f9075238b5e1d9d798 100644 --- a/src/vs/workbench/test/browser/parts/editor/editorStacksModel.test.ts +++ b/src/vs/workbench/test/browser/parts/editor/editorStacksModel.test.ts @@ -506,7 +506,7 @@ suite('Editor Stacks Model', () => { assert.equal(group.activeEditor, void 0); assert.equal(events.closed[0].editor, input1); assert.equal(events.closed[0].index, 0); - assert.equal(events.closed[0].pinned, true); + assert.equal(events.closed[0].replaced, false); // Active && Preview const input2 = input(); @@ -529,7 +529,7 @@ suite('Editor Stacks Model', () => { assert.equal(group.activeEditor, void 0); assert.equal(events.closed[1].editor, input2); assert.equal(events.closed[1].index, 0); - assert.equal(events.closed[1].pinned, false); + assert.equal(events.closed[1].replaced, false); group.closeEditor(input2); assert.equal(group.count, 0); @@ -748,6 +748,8 @@ suite('Editor Stacks Model', () => { assert.equal(events.opened[2], input3); assert.equal(events.closed[0].editor, input1); assert.equal(events.closed[1].editor, input2); + assert.equal(events.closed[0].replaced, true); + assert.equal(events.closed[1].replaced, true); const mru = group.getEditors(true); assert.equal(mru[0], input3);