diff --git a/src/vs/workbench/contrib/extensions/browser/extensionsActions.ts b/src/vs/workbench/contrib/extensions/browser/extensionsActions.ts index 83d083905d20c..af5d9f172d5ba 100644 --- a/src/vs/workbench/contrib/extensions/browser/extensionsActions.ts +++ b/src/vs/workbench/contrib/extensions/browser/extensionsActions.ts @@ -1779,7 +1779,8 @@ export class DisableGloballyAction extends ExtensionAction { return; } this.enabled = this.extension.state === ExtensionState.Installed - && (this.extension.enablementState === EnablementState.EnabledGlobally || this.extension.enablementState === EnablementState.EnabledWorkspace) + && (this.extension.enablementState === EnablementState.EnabledGlobally + || (this.extension.enablementState === EnablementState.EnabledWorkspace && !this.extensionEnablementService.isDisabledGlobally(this.extension.local))) && this.extensionEnablementService.canChangeEnablement(this.extension.local); } } diff --git a/src/vs/workbench/contrib/extensions/test/electron-browser/extensionsActions.test.ts b/src/vs/workbench/contrib/extensions/test/electron-browser/extensionsActions.test.ts index f27872132feff..b323396058a4d 100644 --- a/src/vs/workbench/contrib/extensions/test/electron-browser/extensionsActions.test.ts +++ b/src/vs/workbench/contrib/extensions/test/electron-browser/extensionsActions.test.ts @@ -916,6 +916,28 @@ suite('ExtensionsActions', () => { }); }); + test('Test DisableGloballyAction when extension is disabled globally and enabled for workspace', () => { + const local = aLocalExtension('a'); + instantiationService.stub(IExtensionService, { + extensions: [toExtensionDescription(local)], + onDidChangeExtensions: Event.None, + whenInstalledExtensionsRegistered: () => Promise.resolve(true) + }); + + return instantiationService.get(IWorkbenchExtensionEnablementService).setEnablement([local], EnablementState.DisabledGlobally) + .then(() => instantiationService.get(IWorkbenchExtensionEnablementService).setEnablement([local], EnablementState.EnabledWorkspace)) + .then(() => { + instantiationService.stubPromise(IExtensionManagementService, 'getInstalled', [local]); + + return instantiationService.get(IExtensionsWorkbenchService).queryLocal() + .then(extensions => { + const testObject: ExtensionsActions.DisableGloballyAction = disposables.add(instantiationService.createInstance(ExtensionsActions.DisableGloballyAction)); + testObject.extension = extensions[0]; + assert.ok(!testObject.enabled); + }); + }); + }); + test('Test DisableGloballyAction when extension is uninstalled', () => { const gallery = aGalleryExtension('a'); instantiationService.stubPromise(IExtensionGalleryService, 'query', aPage(gallery));