From 2b1bbfa63f2c5c65a074b5547ae92461082b9692 Mon Sep 17 00:00:00 2001 From: Benjamin Pasero Date: Fri, 13 Dec 2019 09:46:55 +0100 Subject: [PATCH] Hot exit: untitled backup is not made when opening new untitled with initial content (fix #86891) --- .../contrib/backup/common/backupModelTracker.ts | 1 + .../untitled/common/untitledTextEditorService.ts | 11 +++++++++++ .../test/common/editor/untitledTextEditor.test.ts | 9 +++++++++ 3 files changed, 21 insertions(+) diff --git a/src/vs/workbench/contrib/backup/common/backupModelTracker.ts b/src/vs/workbench/contrib/backup/common/backupModelTracker.ts index e7dee7bcfbd..bbc393aff32 100644 --- a/src/vs/workbench/contrib/backup/common/backupModelTracker.ts +++ b/src/vs/workbench/contrib/backup/common/backupModelTracker.ts @@ -37,6 +37,7 @@ export class BackupModelTracker extends Disposable implements IWorkbenchContribu this._register(this.textFileService.models.onModelDisposed(e => this.discardBackup(e))); // Listen for untitled model changes + this._register(this.untitledTextEditorService.onDidCreate(e => this.onUntitledModelChanged(e))); this._register(this.untitledTextEditorService.onDidChangeContent(e => this.onUntitledModelChanged(e))); this._register(this.untitledTextEditorService.onDidDisposeModel(e => this.discardBackup(e))); diff --git a/src/vs/workbench/services/untitled/common/untitledTextEditorService.ts b/src/vs/workbench/services/untitled/common/untitledTextEditorService.ts index 32af9851cea..7d8d31497ae 100644 --- a/src/vs/workbench/services/untitled/common/untitledTextEditorService.ts +++ b/src/vs/workbench/services/untitled/common/untitledTextEditorService.ts @@ -31,6 +31,11 @@ export interface IUntitledTextEditorService { _serviceBrand: undefined; + /** + * Events for when untitled text editors are created. + */ + readonly onDidCreate: Event; + /** * Events for when untitled text editors content changes (e.g. any keystroke). */ @@ -117,6 +122,9 @@ export class UntitledTextEditorService extends Disposable implements IUntitledTe private mapResourceToInput = new ResourceMap(); private mapResourceToAssociatedFilePath = new ResourceMap(); + private readonly _onDidCreate = this._register(new Emitter()); + readonly onDidCreate = this._onDidCreate.event; + private readonly _onDidChangeContent = this._register(new Emitter()); readonly onDidChangeContent = this._onDidChangeContent.event; @@ -263,6 +271,9 @@ export class UntitledTextEditorService extends Disposable implements IUntitledTe // Add to cache this.mapResourceToInput.set(untitledResource, input); + // Signal new untitled as event + this._onDidCreate.fire(untitledResource); + return input; } diff --git a/src/vs/workbench/test/common/editor/untitledTextEditor.test.ts b/src/vs/workbench/test/common/editor/untitledTextEditor.test.ts index f9f9f5eb20e..0233c240144 100644 --- a/src/vs/workbench/test/common/editor/untitledTextEditor.test.ts +++ b/src/vs/workbench/test/common/editor/untitledTextEditor.test.ts @@ -54,11 +54,20 @@ suite('Workbench untitled text editors', () => { assert.equal(service.getAll().length, 0); + let createdResources: URI[] = []; + const createListener = service.onDidCreate(resource => { + createdResources.push(resource); + }); + const input1 = service.createOrGet(); assert.equal(input1, service.createOrGet(input1.getResource())); assert.ok(service.exists(input1.getResource())); assert.ok(!service.exists(URI.file('testing'))); + assert.equal(createdResources.length, 1); + assert.equal(createdResources[0].toString(), input1.getResource()); + + createListener.dispose(); const input2 = service.createOrGet(); -- GitLab