mirror of
https://github.com/Microsoft/vscode
synced 2024-09-13 13:46:13 +00:00
fix: possible memory leak in SettingTreeRenderers (#216768)
This commit is contained in:
parent
14b094becc
commit
ed2036106c
|
@ -794,10 +794,10 @@ export class SettingsEditor2 extends EditorPane {
|
|||
this.createTOC(this.tocTreeContainer);
|
||||
this.createSettingsTree(this.settingsTreeContainer);
|
||||
|
||||
this.splitView = new SplitView(this.bodyContainer, {
|
||||
this.splitView = this._register(new SplitView(this.bodyContainer, {
|
||||
orientation: Orientation.HORIZONTAL,
|
||||
proportionalLayout: true
|
||||
});
|
||||
}));
|
||||
const startingWidth = this.storageService.getNumber('settingsEditor2.splitViewWidth', StorageScope.PROFILE, SettingsEditor2.TOC_RESET_WIDTH);
|
||||
this.splitView.addView({
|
||||
onDidChange: Event.None,
|
||||
|
@ -914,7 +914,7 @@ export class SettingsEditor2 extends EditorPane {
|
|||
}
|
||||
|
||||
private createSettingsTree(container: HTMLElement): void {
|
||||
this.settingRenderers = this.instantiationService.createInstance(SettingTreeRenderers);
|
||||
this.settingRenderers = this._register(this.instantiationService.createInstance(SettingTreeRenderers));
|
||||
this._register(this.settingRenderers.onDidChangeSetting(e => this.onDidChangeSetting(e.key, e.value, e.type, e.manualReset, e.scope)));
|
||||
this._register(this.settingRenderers.onDidOpenSettings(settingKey => {
|
||||
this.openSettingsFile({ revealSetting: { key: settingKey, edit: true } });
|
||||
|
|
|
@ -1985,10 +1985,10 @@ export class SettingsExtensionToggleRenderer extends AbstractSettingRenderer imp
|
|||
}
|
||||
}
|
||||
|
||||
export class SettingTreeRenderers {
|
||||
export class SettingTreeRenderers extends Disposable {
|
||||
readonly onDidClickOverrideElement: Event<ISettingOverrideClickEvent>;
|
||||
|
||||
private readonly _onDidChangeSetting = new Emitter<ISettingChangeEvent>();
|
||||
private readonly _onDidChangeSetting = this._register(new Emitter<ISettingChangeEvent>());
|
||||
readonly onDidChangeSetting: Event<ISettingChangeEvent>;
|
||||
|
||||
readonly onDidOpenSettings: Event<string>;
|
||||
|
@ -2012,6 +2012,7 @@ export class SettingTreeRenderers {
|
|||
@IUserDataProfilesService private readonly _userDataProfilesService: IUserDataProfilesService,
|
||||
@IUserDataSyncEnablementService private readonly _userDataSyncEnablementService: IUserDataSyncEnablementService,
|
||||
) {
|
||||
super();
|
||||
this.settingActions = [
|
||||
new Action('settings.resetSetting', localize('resetSettingLabel', "Reset Setting"), undefined, undefined, async context => {
|
||||
if (context instanceof SettingsTreeSettingElement) {
|
||||
|
@ -2117,6 +2118,20 @@ export class SettingTreeRenderers {
|
|||
const settingElement = this.getSettingDOMElementForDOMElement(element);
|
||||
return settingElement && settingElement.getAttribute(AbstractSettingRenderer.SETTING_ID_ATTR);
|
||||
}
|
||||
|
||||
override dispose(): void {
|
||||
super.dispose();
|
||||
this.settingActions.forEach(action => {
|
||||
if (isDisposable(action)) {
|
||||
action.dispose();
|
||||
}
|
||||
});
|
||||
this.allRenderers.forEach(renderer => {
|
||||
if (isDisposable(renderer)) {
|
||||
renderer.dispose();
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
Loading…
Reference in a new issue