Skip to content

Commit

Permalink
#14102 Restore state when closed
Browse files Browse the repository at this point in the history
  • Loading branch information
sandy081 committed Oct 20, 2016
1 parent e0a9625 commit d40ffa4
Showing 1 changed file with 37 additions and 5 deletions.
42 changes: 37 additions & 5 deletions src/vs/workbench/browser/actions/openSettings.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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';
Expand Down Expand Up @@ -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<void>();
public willDispose: Event<void> = this._willDispose.event;

public static getInstance(instantiationService: IInstantiationService, configurationService: IWorkspaceConfigurationService): DefaultSettingsInput {
if (!DefaultSettingsInput.INSTANCE) {
const editorConfig = configurationService.getConfiguration<any>();
Expand All @@ -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 {
Expand Down Expand Up @@ -285,6 +295,8 @@ export class DefaultSettingsEditor extends StringEditor {

private static VIEW_STATE: Map<URI, IEditorViewState> = new Map<URI, IEditorViewState>();

private inputDisposeListener;

constructor(
@ITelemetryService telemetryService: ITelemetryService,
@IInstantiationService instantiationService: IInstantiationService,
Expand All @@ -306,8 +318,16 @@ export class DefaultSettingsEditor extends StringEditor {
return DefaultSettingsEditor.ID;
}

public setInput(input: EditorInput, options: EditorOptions): TPromise<void> {
this.listenToInput(input);
return super.setInput(input, options);
}

public clearInput(): void {
this.saveState();
if (this.inputDisposeListener) {
this.inputDisposeListener.dispose();
}
super.clearInput();
}

Expand All @@ -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 {
Expand All @@ -336,6 +359,15 @@ export class DefaultSettingsEditor extends StringEditor {
const foldingController = (<ICommonCodeEditor>this.getControl()).getContribution<IFoldingController>(FoldingContributionId);
foldingController.foldAll();
}

private listenToInput(input: EditorInput) {
if (this.inputDisposeListener) {
this.inputDisposeListener.dispose();
}
if (input instanceof DefaultSettingsInput) {
this.inputDisposeListener = input.willDispose(() => this.saveState());
}
}
}

(<IEditorRegistry>Registry.as(EditorExtensions.Editors)).registerEditor(
Expand Down

0 comments on commit d40ffa4

Please sign in to comment.