From d40ffa4c0c12191ee3cf54ac20cc149b5d1a2881 Mon Sep 17 00:00:00 2001 From: Sandeep Somavarapu Date: Thu, 20 Oct 2016 20:05:21 +0200 Subject: [PATCH] #14102 Restore state when closed --- .../workbench/browser/actions/openSettings.ts | 42 ++++++++++++++++--- 1 file changed, 37 insertions(+), 5 deletions(-) diff --git a/src/vs/workbench/browser/actions/openSettings.ts b/src/vs/workbench/browser/actions/openSettings.ts index 028ab177b6b..37bcd631e7f 100644 --- a/src/vs/workbench/browser/actions/openSettings.ts +++ b/src/vs/workbench/browser/actions/openSettings.ts @@ -12,9 +12,10 @@ import * as labels from 'vs/base/common/labels'; import { Registry } from 'vs/platform/platform'; import { Action } from 'vs/base/common/actions'; import * as strings from 'vs/base/common/strings'; +import Event, { Emitter } from 'vs/base/common/event'; import { LinkedMap as Map } from 'vs/base/common/map'; import { IWorkbenchActionRegistry, Extensions } from 'vs/workbench/common/actionRegistry'; -import { IEditorRegistry, Extensions as EditorExtensions } from 'vs/workbench/common/editor'; +import { IEditorRegistry, Extensions as EditorExtensions, EditorOptions } from 'vs/workbench/common/editor'; import { EditorDescriptor } from 'vs/workbench/browser/parts/editor/baseEditor'; import { StringEditorInput } from 'vs/workbench/common/editor/stringEditorInput'; import { ICommonCodeEditor, IEditorViewState } from 'vs/editor/common/editorCommon'; @@ -242,6 +243,9 @@ class DefaultSettingsInput extends StringEditorInput { static RESOURCE: URI = URI.from({ scheme: network.Schemas.vscode, authority: 'defaultsettings', path: '/settings.json' }); // URI is used to register JSON schema support private static INSTANCE: DefaultSettingsInput; + private _willDispose = new Emitter(); + public willDispose: Event = this._willDispose.event; + public static getInstance(instantiationService: IInstantiationService, configurationService: IWorkspaceConfigurationService): DefaultSettingsInput { if (!DefaultSettingsInput.INSTANCE) { const editorConfig = configurationService.getConfiguration(); @@ -258,6 +262,12 @@ class DefaultSettingsInput extends StringEditorInput { protected getResource(): URI { return DefaultSettingsInput.RESOURCE; } + + public dispose() { + this._willDispose.fire(); + this._willDispose.dispose(); + super.dispose(); + } } class DefaultKeybindingsInput extends StringEditorInput { @@ -285,6 +295,8 @@ export class DefaultSettingsEditor extends StringEditor { private static VIEW_STATE: Map = new Map(); + private inputDisposeListener; + constructor( @ITelemetryService telemetryService: ITelemetryService, @IInstantiationService instantiationService: IInstantiationService, @@ -306,8 +318,16 @@ export class DefaultSettingsEditor extends StringEditor { return DefaultSettingsEditor.ID; } + public setInput(input: EditorInput, options: EditorOptions): TPromise { + this.listenToInput(input); + return super.setInput(input, options); + } + public clearInput(): void { this.saveState(); + if (this.inputDisposeListener) { + this.inputDisposeListener.dispose(); + } super.clearInput(); } @@ -321,11 +341,14 @@ export class DefaultSettingsEditor extends StringEditor { } private saveState() { - const resource = this.getResource(); - if (DefaultSettingsEditor.VIEW_STATE.has(resource)) { - DefaultSettingsEditor.VIEW_STATE.delete(resource); + const state = this.getControl().saveViewState(); + if (state) { + const resource = this.getResource(); + if (DefaultSettingsEditor.VIEW_STATE.has(resource)) { + DefaultSettingsEditor.VIEW_STATE.delete(resource); + } + DefaultSettingsEditor.VIEW_STATE.set(resource, state); } - DefaultSettingsEditor.VIEW_STATE.set(resource, this.getControl().saveViewState()); } private getResource(): URI { @@ -336,6 +359,15 @@ export class DefaultSettingsEditor extends StringEditor { const foldingController = (this.getControl()).getContribution(FoldingContributionId); foldingController.foldAll(); } + + private listenToInput(input: EditorInput) { + if (this.inputDisposeListener) { + this.inputDisposeListener.dispose(); + } + if (input instanceof DefaultSettingsInput) { + this.inputDisposeListener = input.willDispose(() => this.saveState()); + } + } } (Registry.as(EditorExtensions.Editors)).registerEditor( -- GitLab