diff --git a/src/vs/workbench/parts/preferences/browser/settingsEditor2.ts b/src/vs/workbench/parts/preferences/browser/settingsEditor2.ts index 331fc77903f7189d81b10a0cbd9cbe40389828ff..aecc885aff94bb90bb59e9d1718b909da1adea62 100644 --- a/src/vs/workbench/parts/preferences/browser/settingsEditor2.ts +++ b/src/vs/workbench/parts/preferences/browser/settingsEditor2.ts @@ -160,10 +160,24 @@ export class SettingsEditor2 extends BaseEditor { // Init TOC selection this.updateTreeScrollSync(); + this.settingsTargetsWidget.settingsTarget = this.getSettingsTarget(input); + this.onSearchInputChanged(); }); } + private getSettingsTarget(input: SettingsEditor2Input): SettingsTarget { + if (input.folderUri) { + return input.folderUri; + } + + if (input.configurationTarget === ConfigurationTarget.USER || input.configurationTarget === ConfigurationTarget.WORKSPACE) { + return input.configurationTarget; + } + + return ConfigurationTarget.USER; + } + clearInput(): void { this.inSettingsEditorContextKey.set(false); super.clearInput(); diff --git a/src/vs/workbench/parts/preferences/electron-browser/preferences.contribution.ts b/src/vs/workbench/parts/preferences/electron-browser/preferences.contribution.ts index 7159ac5c1b17b612b1919f92fba7a260e63fdb7c..5cefb268f693df8eb40524775bc9d34db57e7091 100644 --- a/src/vs/workbench/parts/preferences/electron-browser/preferences.contribution.ts +++ b/src/vs/workbench/parts/preferences/electron-browser/preferences.contribution.ts @@ -36,6 +36,7 @@ import { PreferencesSearchService } from 'vs/workbench/parts/preferences/electro import { IPreferencesService } from 'vs/workbench/services/preferences/common/preferences'; import { Command } from 'vs/editor/browser/editorExtensions'; import { Context as SuggestContext } from 'vs/editor/contrib/suggest/suggest'; +import { ConfigurationTarget } from 'vs/platform/configuration/common/configuration'; registerSingleton(IPreferencesSearchService, PreferencesSearchService); @@ -149,24 +150,35 @@ class KeybindingsEditorInputFactory implements IEditorInputFactory { } } -class SettingsEditor2InputFactory implements IEditorInputFactory { +interface ISerializedSettingsEditor2EditorInput { + resource: string; + configurationTarget: ConfigurationTarget; + folderResource?: string; +} - public serialize(editorInput: SettingsEditor2Input): string { - const input = editorInput; +class SettingsEditor2InputFactory implements IEditorInputFactory { - const serialized: ISerializedDefaultPreferencesEditorInput = { resource: input.getResource().toString() }; + public serialize(input: SettingsEditor2Input): string { + const serialized: ISerializedSettingsEditor2EditorInput = { + resource: input.getResource().toString(), + configurationTarget: input.configurationTarget, + folderResource: input.folderUri && input.folderUri.toString() + }; return JSON.stringify(serialized); } public deserialize(instantiationService: IInstantiationService, serializedEditorInput: string): SettingsEditor2Input { - const deserialized: ISerializedDefaultPreferencesEditorInput = JSON.parse(serializedEditorInput); + const deserialized: ISerializedSettingsEditor2EditorInput = JSON.parse(serializedEditorInput); - return instantiationService.createInstance(SettingsEditor2Input, URI.parse(deserialized.resource)); + return instantiationService.createInstance( + SettingsEditor2Input, + URI.parse(deserialized.resource), + deserialized.configurationTarget, + deserialized.folderResource && URI.parse(deserialized.folderResource)); } } - interface ISerializedDefaultPreferencesEditorInput { resource: string; } diff --git a/src/vs/workbench/services/preferences/browser/preferencesService.ts b/src/vs/workbench/services/preferences/browser/preferencesService.ts index 77a3cc9a1afafb4ee661af98983c56feb8cce788..da52d310195bdeb4ca3e735be09e88f5b9693a83 100644 --- a/src/vs/workbench/services/preferences/browser/preferencesService.ts +++ b/src/vs/workbench/services/preferences/browser/preferencesService.ts @@ -198,7 +198,7 @@ export class PreferencesService extends Disposable implements IPreferencesServic openGlobalSettings(jsonEditor?: boolean, options?: IEditorOptions, group?: IEditorGroup): TPromise { return jsonEditor ? this.openOrSwitchSettings(ConfigurationTarget.USER, this.userSettingsResource, options, group) : - this.openOrSwitchSettings2(ConfigurationTarget.USER, options, group); + this.openOrSwitchSettings2(ConfigurationTarget.USER, undefined, options, group); } openWorkspaceSettings(jsonEditor?: boolean, options?: IEditorOptions, group?: IEditorGroup): TPromise { @@ -209,18 +209,19 @@ export class PreferencesService extends Disposable implements IPreferencesServic return jsonEditor ? this.openOrSwitchSettings(ConfigurationTarget.WORKSPACE, this.workspaceSettingsResource, options, group) : - this.openOrSwitchSettings2(ConfigurationTarget.WORKSPACE, options, group); + this.openOrSwitchSettings2(ConfigurationTarget.WORKSPACE, undefined, options, group); } openFolderSettings(folder: URI, jsonEditor?: boolean, options?: IEditorOptions, group?: IEditorGroup): TPromise { return jsonEditor ? this.openOrSwitchSettings(ConfigurationTarget.WORKSPACE_FOLDER, this.getEditableSettingsURI(ConfigurationTarget.WORKSPACE_FOLDER, folder), options, group) : - this.openOrSwitchSettings2(ConfigurationTarget.WORKSPACE_FOLDER, options, group); + this.openOrSwitchSettings2(ConfigurationTarget.WORKSPACE_FOLDER, folder, options, group); } switchSettings(target: ConfigurationTarget, resource: URI, jsonEditor?: boolean): TPromise { if (!jsonEditor) { - return this.switchSettings2(target); + const folderUri = target === ConfigurationTarget.WORKSPACE_FOLDER && resource; + return this.switchSettings2(target, folderUri); } const activeControl = this.editorService.activeControl; @@ -231,13 +232,13 @@ export class PreferencesService extends Disposable implements IPreferencesServic } } - switchSettings2(target: ConfigurationTarget): TPromise { + switchSettings2(target: ConfigurationTarget, folderUri?: URI): TPromise { const activeControl = this.editorService.activeControl; const resource = this.getDefaultSettingsResource(target); if (activeControl && activeControl.input instanceof SettingsEditor2Input) { - return this.doSwitchSettings2(resource, activeControl.input, activeControl.group).then(() => null); + return this.doSwitchSettings2(resource, target, folderUri, activeControl.input, activeControl.group).then(() => null); } else { - return this.doOpenSettings2(resource).then(() => null); + return this.doOpenSettings2(resource, target, folderUri).then(() => null); } } @@ -300,14 +301,14 @@ export class PreferencesService extends Disposable implements IPreferencesServic return this.doOpenSettings(configurationTarget, resource, options, group); } - private openOrSwitchSettings2(configurationTarget: ConfigurationTarget, options?: IEditorOptions, group: IEditorGroup = this.editorGroupService.activeGroup): TPromise { + private openOrSwitchSettings2(configurationTarget: ConfigurationTarget, folderUri?: URI, options?: IEditorOptions, group: IEditorGroup = this.editorGroupService.activeGroup): TPromise { const editorInput = this.getActiveSettingsEditor2Input(group); const resource = this.getDefaultSettingsResource(configurationTarget); if (editorInput && editorInput.getResource().fsPath !== resource.fsPath) { - return this.doSwitchSettings2(resource, editorInput, group); + return this.doSwitchSettings2(resource, configurationTarget, folderUri, editorInput, group); } - return this.doOpenSettings2(resource, options, group); + return this.doOpenSettings2(resource, configurationTarget, folderUri, options, group); } private doOpenSettings(configurationTarget: ConfigurationTarget, resource: URI, options?: IEditorOptions, group?: IEditorGroup): TPromise { @@ -330,8 +331,8 @@ export class PreferencesService extends Disposable implements IPreferencesServic }); } - private doOpenSettings2(resource: URI, options?: IEditorOptions, group?: IEditorGroup): TPromise { - const settingsEditorInput = this.instantiationService.createInstance(SettingsEditor2Input, resource); + private doOpenSettings2(resource: URI, target: ConfigurationTarget, folderUri: URI | undefined, options?: IEditorOptions, group?: IEditorGroup): TPromise { + const settingsEditorInput = this.instantiationService.createInstance(SettingsEditor2Input, resource, target, folderUri); this.lastOpenedSettings2Input = settingsEditorInput; return this.editorService.openEditor(settingsEditorInput, options, group); } @@ -353,9 +354,9 @@ export class PreferencesService extends Disposable implements IPreferencesServic }); } - private doSwitchSettings2(resource: URI, input: SettingsEditor2Input, group: IEditorGroup): TPromise { + private doSwitchSettings2(resource: URI, configurationTarget: ConfigurationTarget, folderUri: URI | undefined, input: SettingsEditor2Input, group: IEditorGroup): TPromise { return group.openEditor(input).then(() => { - const replaceWith = this.instantiationService.createInstance(SettingsEditor2Input, resource); + const replaceWith = this.instantiationService.createInstance(SettingsEditor2Input, resource, configurationTarget, folderUri); return group.replaceEditors([{ editor: input, diff --git a/src/vs/workbench/services/preferences/common/preferencesEditorInput.ts b/src/vs/workbench/services/preferences/common/preferencesEditorInput.ts index aa47746a444c985506a209419e843f7a10b4a48e..8b7c903e05a388e48181a83fbfe3f0d263219f7e 100644 --- a/src/vs/workbench/services/preferences/common/preferencesEditorInput.ts +++ b/src/vs/workbench/services/preferences/common/preferencesEditorInput.ts @@ -8,6 +8,7 @@ import URI from 'vs/base/common/uri'; import { TPromise } from 'vs/base/common/winjs.base'; import { ITextModelService } from 'vs/editor/common/services/resolverService'; import * as nls from 'vs/nls'; +import { ConfigurationTarget } from 'vs/platform/configuration/common/configuration'; import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; import { EditorInput, SideBySideEditorInput, Verbosity } from 'vs/workbench/common/editor'; import { ResourceEditorInput } from 'vs/workbench/common/editor/resourceEditorInput'; @@ -82,12 +83,22 @@ export class SettingsEditor2Input extends ResourceEditorInput { public static readonly ID: string = 'workbench.input.settings2'; constructor(defaultSettingsResource: URI, + private _configurationTarget: ConfigurationTarget, + private _folderUri: URI | undefined, @ITextModelService textModelResolverService: ITextModelService, @IHashService hashService: IHashService ) { super(nls.localize('settingsEditor2InputName', "Settings"), '', defaultSettingsResource, textModelResolverService, hashService); } + get configurationTarget(): ConfigurationTarget { + return this._configurationTarget; + } + + get folderUri(): URI | undefined { + return this._folderUri; + } + getTypeId(): string { return SettingsEditor2Input.ID; }