mirror of
https://github.com/microsoft/vscode.git
synced 2026-09-20 10:53:53 +01:00
Fix #120940
This commit is contained in:
@@ -3,6 +3,7 @@
|
||||
* Licensed under the MIT License. See License.txt in the project root for license information.
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
import { distinct } from 'vs/base/common/arrays';
|
||||
import { IStringDictionary } from 'vs/base/common/collections';
|
||||
import { Emitter, Event } from 'vs/base/common/event';
|
||||
import { IJSONSchema } from 'vs/base/common/jsonSchema';
|
||||
@@ -37,6 +38,13 @@ export interface IConfigurationRegistry {
|
||||
*/
|
||||
deregisterConfigurations(configurations: IConfigurationNode[]): void;
|
||||
|
||||
/**
|
||||
* update the configuration registry by
|
||||
* - registering the configurations to add
|
||||
* - dereigstering the configurations to remove
|
||||
*/
|
||||
updateConfigurations(configurations: { add: IConfigurationNode[], remove: IConfigurationNode[] }): void;
|
||||
|
||||
/**
|
||||
* Register multiple default configurations to the registry.
|
||||
*/
|
||||
@@ -210,12 +218,7 @@ class ConfigurationRegistry implements IConfigurationRegistry {
|
||||
}
|
||||
|
||||
public registerConfigurations(configurations: IConfigurationNode[], validate: boolean = true): void {
|
||||
const properties: string[] = [];
|
||||
configurations.forEach(configuration => {
|
||||
properties.push(...this.validateAndRegisterProperties(configuration, validate, configuration.extensionInfo)); // fills in defaults
|
||||
this.configurationContributors.push(configuration);
|
||||
this.registerJSONConfiguration(configuration);
|
||||
});
|
||||
const properties = this.doRegisterConfigurations(configurations, validate);
|
||||
|
||||
contributionRegistry.registerSchema(resourceLanguageSettingsSchemaId, this.resourceLanguageSettingsSchema);
|
||||
this._onDidSchemaChange.fire();
|
||||
@@ -223,32 +226,23 @@ class ConfigurationRegistry implements IConfigurationRegistry {
|
||||
}
|
||||
|
||||
public deregisterConfigurations(configurations: IConfigurationNode[]): void {
|
||||
const properties: string[] = [];
|
||||
const deregisterConfiguration = (configuration: IConfigurationNode) => {
|
||||
if (configuration.properties) {
|
||||
for (const key in configuration.properties) {
|
||||
properties.push(key);
|
||||
delete this.configurationProperties[key];
|
||||
this.removeFromSchema(key, configuration.properties[key]);
|
||||
}
|
||||
}
|
||||
if (configuration.allOf) {
|
||||
configuration.allOf.forEach(node => deregisterConfiguration(node));
|
||||
}
|
||||
};
|
||||
for (const configuration of configurations) {
|
||||
deregisterConfiguration(configuration);
|
||||
const index = this.configurationContributors.indexOf(configuration);
|
||||
if (index !== -1) {
|
||||
this.configurationContributors.splice(index, 1);
|
||||
}
|
||||
}
|
||||
const properties = this.doDeregisterConfigurations(configurations);
|
||||
|
||||
contributionRegistry.registerSchema(resourceLanguageSettingsSchemaId, this.resourceLanguageSettingsSchema);
|
||||
this._onDidSchemaChange.fire();
|
||||
this._onDidUpdateConfiguration.fire(properties);
|
||||
}
|
||||
|
||||
public updateConfigurations({ add, remove }: { add: IConfigurationNode[], remove: IConfigurationNode[] }): void {
|
||||
const properties = [];
|
||||
properties.push(...this.doDeregisterConfigurations(remove));
|
||||
properties.push(...this.doRegisterConfigurations(add, false));
|
||||
|
||||
contributionRegistry.registerSchema(resourceLanguageSettingsSchemaId, this.resourceLanguageSettingsSchema);
|
||||
this._onDidSchemaChange.fire();
|
||||
this._onDidUpdateConfiguration.fire(distinct(properties));
|
||||
}
|
||||
|
||||
public registerDefaultConfigurations(defaultConfigurations: IStringDictionary<any>[]): void {
|
||||
const properties: string[] = [];
|
||||
const overrideIdentifiers: string[] = [];
|
||||
@@ -319,6 +313,40 @@ class ConfigurationRegistry implements IConfigurationRegistry {
|
||||
this.updateOverridePropertyPatternKey();
|
||||
}
|
||||
|
||||
private doRegisterConfigurations(configurations: IConfigurationNode[], validate: boolean): string[] {
|
||||
const properties: string[] = [];
|
||||
configurations.forEach(configuration => {
|
||||
properties.push(...this.validateAndRegisterProperties(configuration, validate, configuration.extensionInfo)); // fills in defaults
|
||||
this.configurationContributors.push(configuration);
|
||||
this.registerJSONConfiguration(configuration);
|
||||
});
|
||||
return properties;
|
||||
}
|
||||
|
||||
private doDeregisterConfigurations(configurations: IConfigurationNode[]): string[] {
|
||||
const properties: string[] = [];
|
||||
const deregisterConfiguration = (configuration: IConfigurationNode) => {
|
||||
if (configuration.properties) {
|
||||
for (const key in configuration.properties) {
|
||||
properties.push(key);
|
||||
delete this.configurationProperties[key];
|
||||
this.removeFromSchema(key, configuration.properties[key]);
|
||||
}
|
||||
}
|
||||
if (configuration.allOf) {
|
||||
configuration.allOf.forEach(node => deregisterConfiguration(node));
|
||||
}
|
||||
};
|
||||
for (const configuration of configurations) {
|
||||
deregisterConfiguration(configuration);
|
||||
const index = this.configurationContributors.indexOf(configuration);
|
||||
if (index !== -1) {
|
||||
this.configurationContributors.splice(index, 1);
|
||||
}
|
||||
}
|
||||
return properties;
|
||||
}
|
||||
|
||||
private validateAndRegisterProperties(configuration: IConfigurationNode, validate: boolean = true, extensionInfo?: IConfigurationExtensionInfo, scope: ConfigurationScope = ConfigurationScope.WINDOW): string[] {
|
||||
scope = types.isUndefinedOrNull(configuration.scope) ? scope : configuration.scope;
|
||||
let propertyKeys: string[] = [];
|
||||
|
||||
@@ -73,9 +73,7 @@ export function updateProxyConfigurationsScope(scope: ConfigurationScope): void
|
||||
let proxyConfiguration: IConfigurationNode | undefined;
|
||||
function registerProxyConfigurations(scope: ConfigurationScope): void {
|
||||
const configurationRegistry = Registry.as<IConfigurationRegistry>(Extensions.Configuration);
|
||||
if (proxyConfiguration) {
|
||||
configurationRegistry.deregisterConfigurations([proxyConfiguration]);
|
||||
}
|
||||
const oldProxyConfiguration = proxyConfiguration;
|
||||
proxyConfiguration = {
|
||||
id: 'http',
|
||||
order: 15,
|
||||
@@ -122,7 +120,7 @@ function registerProxyConfigurations(scope: ConfigurationScope): void {
|
||||
}
|
||||
}
|
||||
};
|
||||
configurationRegistry.registerConfiguration(proxyConfiguration);
|
||||
configurationRegistry.updateConfigurations({ add: [proxyConfiguration], remove: oldProxyConfiguration ? [oldProxyConfiguration] : [] });
|
||||
}
|
||||
|
||||
registerProxyConfigurations(ConfigurationScope.MACHINE);
|
||||
|
||||
@@ -389,17 +389,15 @@ export function registerTerminalPlatformConfiguration() {
|
||||
registerTerminalDefaultProfileConfiguration();
|
||||
}
|
||||
|
||||
let lastDefaultProfilesConfiguration: IConfigurationNode | undefined;
|
||||
let defaultProfilesConfiguration: IConfigurationNode | undefined;
|
||||
export function registerTerminalDefaultProfileConfiguration(detectedProfiles?: { os: OperatingSystem, profiles: ITerminalProfile[] }, extensionContributedProfiles?: readonly IExtensionTerminalProfile[]) {
|
||||
const registry = Registry.as<IConfigurationRegistry>(Extensions.Configuration);
|
||||
if (lastDefaultProfilesConfiguration) {
|
||||
registry.deregisterConfigurations([lastDefaultProfilesConfiguration]);
|
||||
}
|
||||
let profileEnum;
|
||||
if (detectedProfiles) {
|
||||
profileEnum = createProfileSchemaEnums(detectedProfiles?.profiles, extensionContributedProfiles);
|
||||
}
|
||||
lastDefaultProfilesConfiguration = {
|
||||
const oldDefaultProfilesConfiguration = defaultProfilesConfiguration;
|
||||
defaultProfilesConfiguration = {
|
||||
id: 'terminal',
|
||||
order: 100,
|
||||
title: localize('terminalIntegratedConfigurationTitle', "Integrated Terminal"),
|
||||
@@ -431,5 +429,5 @@ export function registerTerminalDefaultProfileConfiguration(detectedProfiles?: {
|
||||
},
|
||||
}
|
||||
};
|
||||
registry.registerConfiguration(lastDefaultProfilesConfiguration);
|
||||
registry.updateConfigurations({ add: [defaultProfilesConfiguration], remove: oldDefaultProfilesConfiguration ? [oldDefaultProfilesConfiguration] : [] });
|
||||
}
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
import { localize } from 'vs/nls';
|
||||
import { Registry } from 'vs/platform/registry/common/platform';
|
||||
import { IWorkbenchContribution } from 'vs/workbench/common/contributions';
|
||||
import { Disposable, MutableDisposable, toDisposable } from 'vs/base/common/lifecycle';
|
||||
import { Disposable } from 'vs/base/common/lifecycle';
|
||||
import { IConfigurationRegistry, Extensions as ConfigurationExtensions, IConfigurationNode } from 'vs/platform/configuration/common/configurationRegistry';
|
||||
import { workbenchConfigurationNodeBase } from 'vs/workbench/common/configuration';
|
||||
import { IEditorResolverService, RegisteredEditorInfo, RegisteredEditorPriority } from 'vs/workbench/services/editor/common/editorResolverService';
|
||||
@@ -29,7 +29,7 @@ export class DynamicEditorGroupAutoLockConfiguration extends Disposable implemen
|
||||
];
|
||||
|
||||
private configurationRegistry = Registry.as<IConfigurationRegistry>(ConfigurationExtensions.Configuration);
|
||||
private configurationDisposable = this._register(new MutableDisposable());
|
||||
private configurationNode: IConfigurationNode | undefined;
|
||||
|
||||
constructor(
|
||||
@IEditorResolverService private readonly editorResolverService: IEditorResolverService
|
||||
@@ -65,7 +65,8 @@ export class DynamicEditorGroupAutoLockConfiguration extends Disposable implemen
|
||||
defaultAutoLockGroupConfiguration[editor.id] = DynamicEditorGroupAutoLockConfiguration.AUTO_LOCK_DEFAULT_ENABLED.has(editor.id);
|
||||
}
|
||||
|
||||
const configurationNode: IConfigurationNode = {
|
||||
const oldConfigurationNode = this.configurationNode;
|
||||
this.configurationNode = {
|
||||
...workbenchConfigurationNodeBase,
|
||||
properties: {
|
||||
'workbench.editor.autoLockGroups': {
|
||||
@@ -78,11 +79,6 @@ export class DynamicEditorGroupAutoLockConfiguration extends Disposable implemen
|
||||
}
|
||||
};
|
||||
|
||||
// Register configuration disposing any previous registration
|
||||
this.configurationDisposable.value = (() => {
|
||||
this.configurationRegistry.registerConfiguration(configurationNode);
|
||||
|
||||
return toDisposable(() => this.configurationRegistry.deregisterConfigurations([configurationNode]));
|
||||
})();
|
||||
this.configurationRegistry.updateConfigurations({ add: [this.configurationNode], remove: oldConfigurationNode ? [oldConfigurationNode] : [] });
|
||||
}
|
||||
}
|
||||
|
||||
+2
-4
@@ -235,12 +235,10 @@ class WorkbenchConfigurationContribution {
|
||||
private async registerConfigs(_experimentSevice: ITASExperimentService) {
|
||||
const preferReduced = await _experimentSevice.getTreatment('welcomePage.preferReducedMotion').catch(e => false);
|
||||
if (preferReduced) {
|
||||
configurationRegistry.deregisterConfigurations([prefersStandardMotionConfig]);
|
||||
configurationRegistry.registerConfiguration(prefersReducedMotionConfig);
|
||||
configurationRegistry.updateConfigurations({ add: [prefersReducedMotionConfig], remove: [prefersStandardMotionConfig] });
|
||||
}
|
||||
else {
|
||||
configurationRegistry.deregisterConfigurations([prefersReducedMotionConfig]);
|
||||
configurationRegistry.registerConfiguration(prefersStandardMotionConfig);
|
||||
configurationRegistry.updateConfigurations({ add: [prefersStandardMotionConfig], remove: [prefersReducedMotionConfig] });
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user