From 079df6daef07d633cfbae1729bd17cb72a70192a Mon Sep 17 00:00:00 2001 From: Sandeep Somavarapu Date: Wed, 5 Jul 2017 22:39:02 +0200 Subject: [PATCH] Render default settings editor contributions immediately after model change --- .../preferences/browser/preferencesEditor.ts | 81 +++++++++---------- .../browser/preferencesRenderers.ts | 5 +- 2 files changed, 40 insertions(+), 46 deletions(-) diff --git a/src/vs/workbench/parts/preferences/browser/preferencesEditor.ts b/src/vs/workbench/parts/preferences/browser/preferencesEditor.ts index 985d72ea9a5..d92ddcd8bf4 100644 --- a/src/vs/workbench/parts/preferences/browser/preferencesEditor.ts +++ b/src/vs/workbench/parts/preferences/browser/preferencesEditor.ts @@ -23,7 +23,7 @@ import { BaseTextEditor } from 'vs/workbench/browser/parts/editor/textEditor'; import { CodeEditor } from 'vs/editor/browser/codeEditor'; import { IInstantiationService, ServicesAccessor } from 'vs/platform/instantiation/common/instantiation'; import { - IPreferencesService, ISettingsGroup, ISetting, IFilterResult, IPreferencesEditorModel, + IPreferencesService, ISettingsGroup, ISetting, IFilterResult, CONTEXT_SETTINGS_EDITOR, CONTEXT_SETTINGS_SEARCH_FOCUS, SETTINGS_EDITOR_COMMAND_SEARCH, SETTINGS_EDITOR_COMMAND_FOCUS_FILE, ISettingsEditorModel } from 'vs/workbench/parts/preferences/common/preferences'; import { SettingsEditorModel, DefaultSettingsEditorModel } from 'vs/workbench/parts/preferences/common/preferencesModels'; @@ -617,6 +617,7 @@ class DefaultSettingsEditorContribution extends Disposable implements ISettingsE @IPreferencesService private preferencesService: IPreferencesService ) { super(); + this._register(this.editor.onDidChangeModel(() => this._onModelChanged())); } getId(): string { @@ -624,58 +625,52 @@ class DefaultSettingsEditorContribution extends Disposable implements ISettingsE } createPreferencesRenderer(associatedPreferencesModelUri: URI): TPromise> { - return this._hasAssociatedPreferencesModelChanged(associatedPreferencesModelUri) - .then(changed => { - if (changed) { - return this.preferencesService.createPreferencesEditorModel(associatedPreferencesModelUri) - .then(associatedPreferencesEditorModel => { - if (this.preferencesRenderer) { - return this._updatePreferencesRenderer(associatedPreferencesEditorModel); - } else { - return this._createPreferencesRenderer(associatedPreferencesEditorModel); - } - }); - } - return this.preferencesRenderer; - }); - } - - _hasAssociatedPreferencesModelChanged(associatedPreferencesModelUri: URI): TPromise { - if (this.preferencesRenderer) { - return this.preferencesRenderer.then(preferencesRenderer => { - return !(preferencesRenderer && preferencesRenderer.associatedPreferencesModel && preferencesRenderer.associatedPreferencesModel.uri.fsPath === associatedPreferencesModelUri.fsPath); - }); + if (!this.preferencesRenderer) { + return TPromise.as(null); } - return TPromise.as(true); + + return this._hasAssociatedPreferencesModelChanged(associatedPreferencesModelUri) + .then(changed => changed ? this._updatePreferencesRenderer(associatedPreferencesModelUri) : this.preferencesRenderer); } - _createPreferencesRenderer(associatedPreferencesEditorModel: IPreferencesEditorModel): TPromise> { - this.preferencesRenderer = this.preferencesService.createPreferencesEditorModel(this.editor.getModel().uri) + private _onModelChanged(): void { + const model = this.editor.getModel(); + if (model) { + this.preferencesRenderer = this._createPreferencesRenderer(); + } + } + + private _hasAssociatedPreferencesModelChanged(associatedPreferencesModelUri: URI): TPromise { + return this.preferencesRenderer.then(preferencesRenderer => { + return !(preferencesRenderer && preferencesRenderer.associatedPreferencesModel && preferencesRenderer.associatedPreferencesModel.uri.fsPath === associatedPreferencesModelUri.fsPath); + }); + } + + private _createPreferencesRenderer(): TPromise> { + return this.preferencesService.createPreferencesEditorModel(this.editor.getModel().uri) .then(editorModel => { if (editorModel instanceof DefaultSettingsEditorModel) { - return this.instantiationService.createInstance(DefaultSettingsRenderer, this.editor, editorModel, associatedPreferencesEditorModel); + const preferencesRenderer = this.instantiationService.createInstance(DefaultSettingsRenderer, this.editor, editorModel); + preferencesRenderer.render(); + return preferencesRenderer; } return null; - }) - .then(preferencesRenderer => { - if (preferencesRenderer) { - preferencesRenderer.render(); - } - return preferencesRenderer; }); - return this.preferencesRenderer; } - _updatePreferencesRenderer(associatedPreferencesEditorModel: IPreferencesEditorModel): TPromise> { - return this.preferencesRenderer.then(preferencesRenderer => { - if (preferencesRenderer) { - if (preferencesRenderer.associatedPreferencesModel) { - preferencesRenderer.associatedPreferencesModel.dispose(); - } - preferencesRenderer.associatedPreferencesModel = associatedPreferencesEditorModel; - } - return preferencesRenderer; - }); + private _updatePreferencesRenderer(associatedPreferencesModelUri: URI): TPromise> { + return this.preferencesService.createPreferencesEditorModel(associatedPreferencesModelUri) + .then(associatedPreferencesEditorModel => { + return this.preferencesRenderer.then(preferencesRenderer => { + if (preferencesRenderer) { + if (preferencesRenderer.associatedPreferencesModel) { + preferencesRenderer.associatedPreferencesModel.dispose(); + } + preferencesRenderer.associatedPreferencesModel = associatedPreferencesEditorModel; + } + return preferencesRenderer; + }); + }); } dispose() { diff --git a/src/vs/workbench/parts/preferences/browser/preferencesRenderers.ts b/src/vs/workbench/parts/preferences/browser/preferencesRenderers.ts index 2cfc95fbb37..76e6f1d4cc5 100644 --- a/src/vs/workbench/parts/preferences/browser/preferencesRenderers.ts +++ b/src/vs/workbench/parts/preferences/browser/preferencesRenderers.ts @@ -185,6 +185,7 @@ export class WorkspaceSettingsRenderer extends UserSettingsRenderer implements I export class DefaultSettingsRenderer extends Disposable implements IPreferencesRenderer { + private _associatedPreferencesModel: IPreferencesEditorModel; private settingHighlighter: SettingHighlighter; private settingsHeaderRenderer: SettingsHeaderRenderer; private settingsGroupTitleRenderer: SettingsGroupTitleRenderer; @@ -203,14 +204,12 @@ export class DefaultSettingsRenderer extends Disposable implements IPreferencesR private filterResult: IFilterResult; - constructor(protected editor: ICodeEditor, public readonly preferencesModel: DefaultSettingsEditorModel, private _associatedPreferencesModel: IPreferencesEditorModel, + constructor(protected editor: ICodeEditor, public readonly preferencesModel: DefaultSettingsEditorModel, @IPreferencesService protected preferencesService: IPreferencesService, @IWorkbenchEditorService private editorService: IWorkbenchEditorService, @IInstantiationService protected instantiationService: IInstantiationService ) { super(); - this._register(preferencesModel); - this._register(_associatedPreferencesModel); this.settingHighlighter = this._register(instantiationService.createInstance(SettingHighlighter, editor, this._onFocusPreference, this._onClearFocusPreference)); this.settingsHeaderRenderer = this._register(instantiationService.createInstance(SettingsHeaderRenderer, editor)); this.settingsGroupTitleRenderer = this._register(instantiationService.createInstance(SettingsGroupTitleRenderer, editor));