@@ -572,7 +572,7 @@ export class EnableForWorkspaceAction extends Action implements IExtensionAction
572572 private update ( ) : void {
573573 this . enabled = false ;
574574 if ( this . extension ) {
575- this . enabled = ( this . extension . enablementState === EnablementState . Disabled || this . extension . enablementState === EnablementState . WorkspaceDisabled ) && this . extension . local && this . extensionEnablementService . canChangeEnablement ( this . extension . local ) ;
575+ this . enabled = this . extension . state === ExtensionState . Installed && ( this . extension . enablementState === EnablementState . Disabled || this . extension . enablementState === EnablementState . WorkspaceDisabled ) && this . extension . local && this . extensionEnablementService . canChangeEnablement ( this . extension . local ) ;
576576 }
577577 }
578578
@@ -609,7 +609,7 @@ export class EnableGloballyAction extends Action implements IExtensionAction {
609609 private update ( ) : void {
610610 this . enabled = false ;
611611 if ( this . extension ) {
612- this . enabled = ( this . extension . enablementState === EnablementState . Disabled || this . extension . enablementState === EnablementState . WorkspaceDisabled ) && this . extension . local && this . extensionEnablementService . canChangeEnablement ( this . extension . local ) ;
612+ this . enabled = this . extension . state === ExtensionState . Installed && this . extension . enablementState === EnablementState . Disabled && this . extension . local && this . extensionEnablementService . canChangeEnablement ( this . extension . local ) ;
613613 }
614614 }
615615
@@ -626,32 +626,28 @@ export class EnableGloballyAction extends Action implements IExtensionAction {
626626export class EnableAction extends Action {
627627
628628 static readonly ID = 'extensions.enable' ;
629- private static readonly EnabledClass = 'extension-action prominent enable' ;
629+ private static readonly EnabledClass = 'extension-action enable' ;
630+ private static readonly EnabledDropDownClass = 'extension-action dropdown enable' ;
630631 private static readonly DisabledClass = `${ EnableAction . EnabledClass } disabled` ;
631632
632633 private disposables : IDisposable [ ] = [ ] ;
633-
634- private _enableActions : IExtensionAction [ ] ;
635-
636634 private _actionItem : DropDownMenuActionItem ;
637635 get actionItem ( ) : IActionItem { return this . _actionItem ; }
638636
639637 private _extension : IExtension ;
640638 get extension ( ) : IExtension { return this . _extension ; }
641639 set extension ( extension : IExtension ) { this . _extension = extension ; this . update ( ) ; }
642640
643-
644641 constructor (
645642 @IInstantiationService private instantiationService : IInstantiationService ,
646643 @IExtensionsWorkbenchService private extensionsWorkbenchService : IExtensionsWorkbenchService
647644 ) {
648645 super ( EnableAction . ID , localize ( 'enableAction' , "Enable" ) , EnableAction . DisabledClass , false ) ;
649646
650- this . _enableActions = [
647+ this . _actionItem = this . instantiationService . createInstance ( DropDownMenuActionItem , this , [ [
651648 instantiationService . createInstance ( EnableGloballyAction , EnableGloballyAction . LABEL ) ,
652649 instantiationService . createInstance ( EnableForWorkspaceAction , EnableForWorkspaceAction . LABEL )
653- ] ;
654- this . _actionItem = this . instantiationService . createInstance ( DropDownMenuActionItem , this , [ this . _enableActions ] , false ) ;
650+ ] ] , false ) ;
655651 this . disposables . push ( this . _actionItem ) ;
656652
657653 this . disposables . push ( this . extensionsWorkbenchService . onChange ( extension => {
@@ -673,18 +669,27 @@ export class EnableAction extends Action {
673669 }
674670 }
675671
676- if ( ! this . extension ) {
677- this . enabled = false ;
672+ const enabledActions = this . _actionItem . getActions ( ) . filter ( a => a . enabled ) ;
673+ this . enabled = enabledActions . length > 0 ;
674+ if ( this . enabled ) {
675+ if ( enabledActions . length === 1 ) {
676+ this . label = enabledActions [ 0 ] . label ;
677+ this . class = EnableAction . EnabledClass ;
678+ } else {
679+ this . class = EnableAction . EnabledDropDownClass ;
680+ }
681+ } else {
678682 this . class = EnableAction . DisabledClass ;
679- return ;
680683 }
681-
682- this . enabled = this . extension . state === ExtensionState . Installed && this . _enableActions . some ( e => e . enabled ) ;
683- this . class = this . enabled ? EnableAction . EnabledClass : EnableAction . DisabledClass ;
684684 }
685685
686686 public run ( ) : Promise < any > {
687- this . _actionItem . showMenu ( ) ;
687+ const enabledActions = this . _actionItem . getActions ( ) . filter ( a => a . enabled ) ;
688+ if ( enabledActions . length === 1 ) {
689+ enabledActions [ 0 ] . run ( ) ;
690+ } else {
691+ this . _actionItem . showMenu ( ) ;
692+ }
688693 return Promise . resolve ( null ) ;
689694 }
690695
@@ -776,28 +781,27 @@ export class DisableAction extends Action {
776781 static readonly ID = 'extensions.disable' ;
777782
778783 private static readonly EnabledClass = 'extension-action disable' ;
784+ private static readonly EnabledDropDownClass = 'extension-action dropdown enable' ;
779785 private static readonly DisabledClass = `${ DisableAction . EnabledClass } disabled` ;
780786
781787 private disposables : IDisposable [ ] = [ ] ;
782- private _disableActions : IExtensionAction [ ] ;
783788 private _actionItem : DropDownMenuActionItem ;
784789 get actionItem ( ) : IActionItem { return this . _actionItem ; }
785790
786791 private _extension : IExtension ;
787792 get extension ( ) : IExtension { return this . _extension ; }
788793 set extension ( extension : IExtension ) { this . _extension = extension ; this . update ( ) ; }
789794
790-
791795 constructor (
792796 @IInstantiationService private instantiationService : IInstantiationService ,
793797 @IExtensionsWorkbenchService private extensionsWorkbenchService : IExtensionsWorkbenchService ,
794798 ) {
795799 super ( DisableAction . ID , localize ( 'disableAction' , "Disable" ) , DisableAction . DisabledClass , false ) ;
796- this . _disableActions = [
800+
801+ this . _actionItem = this . instantiationService . createInstance ( DropDownMenuActionItem , this , [ [
797802 instantiationService . createInstance ( DisableGloballyAction , DisableGloballyAction . LABEL ) ,
798803 instantiationService . createInstance ( DisableForWorkspaceAction , DisableForWorkspaceAction . LABEL )
799- ] ;
800- this . _actionItem = this . instantiationService . createInstance ( DropDownMenuActionItem , this , [ this . _disableActions ] , false ) ;
804+ ] ] , false ) ;
801805 this . disposables . push ( this . _actionItem ) ;
802806
803807 this . disposables . push ( this . extensionsWorkbenchService . onChange ( extension => {
@@ -819,18 +823,27 @@ export class DisableAction extends Action {
819823 }
820824 }
821825
822- if ( ! this . extension ) {
823- this . enabled = false ;
826+ const enabledActions = this . _actionItem . getActions ( ) . filter ( a => a . enabled ) ;
827+ this . enabled = enabledActions . length > 0 ;
828+ if ( this . enabled ) {
829+ if ( enabledActions . length === 1 ) {
830+ this . label = enabledActions [ 0 ] . label ;
831+ this . class = DisableAction . EnabledClass ;
832+ } else {
833+ this . class = DisableAction . EnabledDropDownClass ;
834+ }
835+ } else {
824836 this . class = DisableAction . DisabledClass ;
825- return ;
826837 }
827-
828- this . enabled = this . extension . state === ExtensionState . Installed && this . _disableActions . some ( a => a . enabled ) ;
829- this . class = this . enabled ? DisableAction . EnabledClass : DisableAction . DisabledClass ;
830838 }
831839
832840 public run ( ) : Promise < any > {
833- this . _actionItem . showMenu ( ) ;
841+ const enabledActions = this . _actionItem . getActions ( ) . filter ( a => a . enabled ) ;
842+ if ( enabledActions . length === 1 ) {
843+ enabledActions [ 0 ] . run ( ) ;
844+ } else {
845+ this . _actionItem . showMenu ( ) ;
846+ }
834847 return Promise . resolve ( null ) ;
835848 }
836849
@@ -2179,10 +2192,13 @@ export class DisabledStatusLabelAction extends Action {
21792192 . then ( runningExtensions => {
21802193 this . class = `${ DisabledStatusLabelAction . Class } hide` ;
21812194 this . tooltip = '' ;
2182- if ( this . extension && ! this . extension . isMalicious && ! runningExtensions . some ( e => e . id === this . extension . id ) ) {
2183- if ( this . extension . enablementState === EnablementState . Disabled || this . extension . enablementState === EnablementState . WorkspaceDisabled ) {
2195+ if ( this . extension && this . extension . local && ! this . extension . isMalicious && ! runningExtensions . some ( e => e . id === this . extension . id ) ) {
2196+ if ( this . extension . enablementState === EnablementState . Disabled ) {
2197+ this . class = `${ DisabledStatusLabelAction . Class } ` ;
2198+ this . label = localize ( 'disabled globally' , "Disabled for all Windows." ) ;
2199+ } else if ( this . extension . enablementState === EnablementState . WorkspaceDisabled ) {
21842200 this . class = `${ DisabledStatusLabelAction . Class } ` ;
2185- this . tooltip = this . extension . enablementState === EnablementState . Disabled ? localize ( 'disabled globally' , "Disabled" ) : localize ( 'disabled workspace', "Disabled for this Workspace" ) ;
2201+ this . label = localize ( 'disabled workspace' , "Disabled for this Workspace. " ) ;
21862202 }
21872203 }
21882204 } ) ) ;
0 commit comments