diff --git a/src/vs/workbench/contrib/preferences/browser/settingsTree.ts b/src/vs/workbench/contrib/preferences/browser/settingsTree.ts index 2008a6edb14e8c14ed36fea930c4486b2939acfe..ac895cbccb2eec342fa27b31eca3c218abdee9fb 100644 --- a/src/vs/workbench/contrib/preferences/browser/settingsTree.ts +++ b/src/vs/workbench/contrib/preferences/browser/settingsTree.ts @@ -698,7 +698,7 @@ export class SettingArrayRenderer extends AbstractSettingRenderer implements ITr private onDidChangeList(template: ISettingListItemTemplate, e: IListChangeEvent): void { if (template.context) { - const newValue: any[] | undefined = isArray(template.context.scopeValue) + const newValue: any[] = isArray(template.context.scopeValue) ? [...template.context.scopeValue] : [...template.context.value]; @@ -725,6 +725,19 @@ export class SettingArrayRenderer extends AbstractSettingRenderer implements ITr } } + if ( + template.context.defaultValue && + isArray(template.context.defaultValue) && + template.context.defaultValue.length === newValue.length && + template.context.defaultValue.join() === newValue.join() + ) { + return this._onDidChangeSetting.fire({ + key: template.context.setting.key, + value: undefined, // reset setting + type: template.context.valueType + }); + } + this._onDidChangeSetting.fire({ key: template.context.setting.key, value: newValue,