Skip to content

Commit 46ae3f8

Browse files
committed
1 parent 4b84029 commit 46ae3f8

2 files changed

Lines changed: 27 additions & 11 deletions

File tree

src/vs/workbench/contrib/extensions/browser/extensionsActions.ts

Lines changed: 24 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2908,12 +2908,16 @@ export class DisableAllAction extends Action {
29082908
this._register(this.extensionsWorkbenchService.onChange(() => this.update()));
29092909
}
29102910

2911+
private getExtensionsToDisable(): IExtension[] {
2912+
return this.extensionsWorkbenchService.local.filter(e => e.type === ExtensionType.User && !!e.local && this.extensionEnablementService.isEnabled(e.local) && this.extensionEnablementService.canChangeEnablement(e.local));
2913+
}
2914+
29112915
private update(): void {
2912-
this.enabled = this.extensionsWorkbenchService.local.some(e => e.type === ExtensionType.User && !!e.local && this.extensionEnablementService.isEnabled(e.local) && this.extensionEnablementService.canChangeEnablement(e.local));
2916+
this.enabled = this.getExtensionsToDisable().length > 0;
29132917
}
29142918

29152919
run(): Promise<any> {
2916-
return this.extensionsWorkbenchService.setEnablement(this.extensionsWorkbenchService.local.filter(e => e.type === ExtensionType.User), EnablementState.DisabledGlobally);
2920+
return this.extensionsWorkbenchService.setEnablement(this.getExtensionsToDisable(), EnablementState.DisabledGlobally);
29172921
}
29182922
}
29192923

@@ -2934,12 +2938,16 @@ export class DisableAllWorkspaceAction extends Action {
29342938
this._register(this.extensionsWorkbenchService.onChange(() => this.update(), this));
29352939
}
29362940

2941+
private getExtensionsToDisable(): IExtension[] {
2942+
return this.extensionsWorkbenchService.local.filter(e => e.type === ExtensionType.User && !!e.local && this.extensionEnablementService.isEnabled(e.local) && this.extensionEnablementService.canChangeEnablement(e.local));
2943+
}
2944+
29372945
private update(): void {
2938-
this.enabled = this.workspaceContextService.getWorkbenchState() !== WorkbenchState.EMPTY && this.extensionsWorkbenchService.local.some(e => e.type === ExtensionType.User && !!e.local && this.extensionEnablementService.isEnabled(e.local) && this.extensionEnablementService.canChangeEnablement(e.local));
2946+
this.enabled = this.workspaceContextService.getWorkbenchState() !== WorkbenchState.EMPTY && this.getExtensionsToDisable().length > 0;
29392947
}
29402948

29412949
run(): Promise<any> {
2942-
return this.extensionsWorkbenchService.setEnablement(this.extensionsWorkbenchService.local.filter(e => e.type === ExtensionType.User), EnablementState.DisabledWorkspace);
2950+
return this.extensionsWorkbenchService.setEnablement(this.getExtensionsToDisable(), EnablementState.DisabledWorkspace);
29432951
}
29442952
}
29452953

@@ -2958,12 +2966,16 @@ export class EnableAllAction extends Action {
29582966
this._register(this.extensionsWorkbenchService.onChange(() => this.update()));
29592967
}
29602968

2969+
private getExtensionsToEnable(): IExtension[] {
2970+
return this.extensionsWorkbenchService.local.filter(e => !!e.local && this.extensionEnablementService.canChangeEnablement(e.local) && !this.extensionEnablementService.isEnabled(e.local));
2971+
}
2972+
29612973
private update(): void {
2962-
this.enabled = this.extensionsWorkbenchService.local.some(e => !!e.local && this.extensionEnablementService.canChangeEnablement(e.local) && !this.extensionEnablementService.isEnabled(e.local));
2974+
this.enabled = this.getExtensionsToEnable().length > 0;
29632975
}
29642976

29652977
run(): Promise<any> {
2966-
return this.extensionsWorkbenchService.setEnablement(this.extensionsWorkbenchService.local, EnablementState.EnabledGlobally);
2978+
return this.extensionsWorkbenchService.setEnablement(this.getExtensionsToEnable(), EnablementState.EnabledGlobally);
29672979
}
29682980
}
29692981

@@ -2984,12 +2996,16 @@ export class EnableAllWorkspaceAction extends Action {
29842996
this._register(this.workspaceContextService.onDidChangeWorkbenchState(() => this.update(), this));
29852997
}
29862998

2999+
private getExtensionsToEnable(): IExtension[] {
3000+
return this.extensionsWorkbenchService.local.filter(e => !!e.local && this.extensionEnablementService.canChangeEnablement(e.local) && !this.extensionEnablementService.isEnabled(e.local));
3001+
}
3002+
29873003
private update(): void {
2988-
this.enabled = this.workspaceContextService.getWorkbenchState() !== WorkbenchState.EMPTY && this.extensionsWorkbenchService.local.some(e => !!e.local && this.extensionEnablementService.canChangeEnablement(e.local) && !this.extensionEnablementService.isEnabled(e.local));
3004+
this.enabled = this.workspaceContextService.getWorkbenchState() !== WorkbenchState.EMPTY && this.getExtensionsToEnable().length > 0;
29893005
}
29903006

29913007
run(): Promise<any> {
2992-
return this.extensionsWorkbenchService.setEnablement(this.extensionsWorkbenchService.local, EnablementState.EnabledWorkspace);
3008+
return this.extensionsWorkbenchService.setEnablement(this.getExtensionsToEnable(), EnablementState.EnabledWorkspace);
29933009
}
29943010
}
29953011

src/vs/workbench/services/extensionManagement/common/extensionEnablementService.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -84,12 +84,12 @@ export class ExtensionEnablementService extends Disposable implements IWorkbench
8484

8585
private throwErrorIfCannotChangeEnablement(extension: IExtension): void {
8686
if (isLanguagePackExtension(extension.manifest)) {
87-
throw new Error(localize('cannot disable language pack extension', "Cannot disable {0} extension because it contributes language packs.", extension.manifest.displayName || extension.identifier.id));
87+
throw new Error(localize('cannot disable language pack extension', "Cannot change enablement of {0} extension because it contributes language packs.", extension.manifest.displayName || extension.identifier.id));
8888
}
8989

9090
if (this.userDataAutoSyncService.isEnabled() && this.userDataSyncAccountService.account &&
9191
isAuthenticaionProviderExtension(extension.manifest) && extension.manifest.contributes!.authentication!.some(a => a.id === this.userDataSyncAccountService.account!.authenticationProviderId)) {
92-
throw new Error(localize('cannot disable auth extension', "Cannot disable {0} extension because Settings Sync depends on it.", extension.manifest.displayName || extension.identifier.id));
92+
throw new Error(localize('cannot disable auth extension', "Cannot change enablement {0} extension because Settings Sync depends on it.", extension.manifest.displayName || extension.identifier.id));
9393
}
9494
}
9595

@@ -110,7 +110,7 @@ export class ExtensionEnablementService extends Disposable implements IWorkbench
110110
throw new Error(localize('noWorkspace', "No workspace."));
111111
}
112112
if (isAuthenticaionProviderExtension(extension.manifest)) {
113-
throw new Error(localize('cannot disable auth extension in workspace', "Cannot disable {0} extension in workspace because it contributes authentication providers", extension.manifest.displayName || extension.identifier.id));
113+
throw new Error(localize('cannot disable auth extension in workspace', "Cannot change enablement of {0} extension in workspace because it contributes authentication providers", extension.manifest.displayName || extension.identifier.id));
114114
}
115115
}
116116

0 commit comments

Comments
 (0)