more workspace actions enablement tweaks

This commit is contained in:
Benjamin Pasero 2021-08-17 07:45:26 +02:00
parent f0913d7718
commit 1b72b188f9
No known key found for this signature in database
GPG key ID: E6380CC4C8219E65
2 changed files with 18 additions and 32 deletions

View file

@ -10,11 +10,10 @@ import { IWorkspaceEditingService } from 'vs/workbench/services/workspaces/commo
import { IEditorService } from 'vs/workbench/services/editor/common/editorService';
import { ICommandService } from 'vs/platform/commands/common/commands';
import { ADD_ROOT_FOLDER_COMMAND_ID, ADD_ROOT_FOLDER_LABEL, PICK_WORKSPACE_FOLDER_COMMAND_ID } from 'vs/workbench/browser/actions/workspaceCommands';
import { IDialogService, IFileDialogService } from 'vs/platform/dialogs/common/dialogs';
import { IFileDialogService } from 'vs/platform/dialogs/common/dialogs';
import { MenuRegistry, MenuId, Action2, registerAction2, ILocalizedString } from 'vs/platform/actions/common/actions';
import { EmptyWorkspaceSupportContext, EnterMultiRootWorkspaceSupportContext, WorkbenchStateContext, WorkspaceFolderCountContext } from 'vs/workbench/browser/contextkeys';
import { ServicesAccessor } from 'vs/platform/instantiation/common/instantiation';
import Severity from 'vs/base/common/severity';
import { IHostService } from 'vs/workbench/services/host/browser/host';
import { KeyChord, KeyCode, KeyMod } from 'vs/base/common/keyCodes';
import { ContextKeyExpr } from 'vs/platform/contextkey/common/contextkey';
@ -39,7 +38,6 @@ export class OpenFileAction extends Action2 {
precondition: IsMacNativeContext.toNegated(),
keybinding: {
weight: KeybindingWeight.WorkbenchContrib,
when: IsMacNativeContext.toNegated(),
primary: KeyMod.CtrlCmd | KeyCode.KEY_O
}
});
@ -65,7 +63,6 @@ export class OpenFolderAction extends Action2 {
precondition: IsMacNativeContext.toNegated(),
keybinding: {
weight: KeybindingWeight.WorkbenchContrib,
when: IsMacNativeContext.toNegated(),
primary: KeyChord(KeyMod.CtrlCmd | KeyCode.KEY_K, KeyMod.CtrlCmd | KeyCode.KEY_O)
}
});
@ -92,7 +89,6 @@ export class OpenFileFolderAction extends Action2 {
precondition: IsMacNativeContext,
keybinding: {
weight: KeybindingWeight.WorkbenchContrib,
when: IsMacNativeContext,
primary: KeyMod.CtrlCmd | KeyCode.KEY_O
}
});
@ -139,23 +135,15 @@ class CloseWorkspaceAction extends Action2 {
precondition: ContextKeyExpr.and(WorkbenchStateContext.notEqualsTo('empty'), EmptyWorkspaceSupportContext),
keybinding: {
weight: KeybindingWeight.WorkbenchContrib,
when: EmptyWorkspaceSupportContext,
primary: KeyChord(KeyMod.CtrlCmd | KeyCode.KEY_K, KeyCode.KEY_F)
}
});
}
override async run(accessor: ServicesAccessor): Promise<void> {
const contextService = accessor.get(IWorkspaceContextService);
const dialogService = accessor.get(IDialogService);
const hostService = accessor.get(IHostService);
const environmentService = accessor.get(IWorkbenchEnvironmentService);
if (contextService.getWorkbenchState() === WorkbenchState.EMPTY) {
dialogService.show(Severity.Error, localize('noWorkspaceOrFolderOpened', "There is currently no workspace or folder opened in this instance to close."));
return;
}
return hostService.openWindow({ forceReuseWindow: true, remoteAuthority: environmentService.remoteAuthority });
}
}
@ -194,7 +182,8 @@ export class AddRootFolderAction extends Action2 {
id: AddRootFolderAction.ID,
title: ADD_ROOT_FOLDER_LABEL,
category: workspacesCategory,
f1: true
f1: true,
precondition: ContextKeyExpr.or(EnterMultiRootWorkspaceSupportContext, WorkbenchStateContext.isEqualTo('workspace'))
});
}
@ -207,28 +196,25 @@ export class AddRootFolderAction extends Action2 {
class RemoveRootFolderAction extends Action2 {
static readonly ID = 'workbench.action.removeRootFolder';
constructor() {
super({
id: 'workbench.action.removeRootFolder',
id: RemoveRootFolderAction.ID,
title: { value: localize('globalRemoveFolderFromWorkspace', "Remove Folder from Workspace..."), original: 'Remove Folder from Workspace...' },
category: workspacesCategory,
f1: true
f1: true,
precondition: ContextKeyExpr.and(WorkspaceFolderCountContext.notEqualsTo('0'), ContextKeyExpr.or(EnterMultiRootWorkspaceSupportContext, WorkbenchStateContext.isEqualTo('workspace')))
});
}
override async run(accessor: ServicesAccessor): Promise<void> {
const contextService = accessor.get(IWorkspaceContextService);
const commandService = accessor.get(ICommandService);
const workspaceEditingService = accessor.get(IWorkspaceEditingService);
const state = contextService.getWorkbenchState();
// Workspace / Folder
if (state === WorkbenchState.WORKSPACE || state === WorkbenchState.FOLDER) {
const folder = await commandService.executeCommand<IWorkspaceFolder>(PICK_WORKSPACE_FOLDER_COMMAND_ID);
if (folder) {
await workspaceEditingService.removeFolders([folder.uri]);
}
const folder = await commandService.executeCommand<IWorkspaceFolder>(PICK_WORKSPACE_FOLDER_COMMAND_ID);
if (folder) {
await workspaceEditingService.removeFolders([folder.uri]);
}
}
}
@ -357,6 +343,7 @@ MenuRegistry.appendMenuItem(MenuId.MenubarFileMenu, {
id: ADD_ROOT_FOLDER_COMMAND_ID,
title: localize({ key: 'miAddFolderToWorkspace', comment: ['&& denotes a mnemonic'] }, "A&&dd Folder to Workspace...")
},
when: ContextKeyExpr.or(EnterMultiRootWorkspaceSupportContext, WorkbenchStateContext.isEqualTo('workspace')),
order: 1
});
@ -384,11 +371,10 @@ MenuRegistry.appendMenuItem(MenuId.MenubarFileMenu, {
group: '6_close',
command: {
id: CloseWorkspaceAction.ID,
title: localize({ key: 'miCloseFolder', comment: ['&& denotes a mnemonic'] }, "Close &&Folder"),
precondition: WorkspaceFolderCountContext.notEqualsTo('0')
title: localize({ key: 'miCloseFolder', comment: ['&& denotes a mnemonic'] }, "Close &&Folder")
},
order: 3,
when: ContextKeyExpr.and(WorkbenchStateContext.notEqualsTo('workspace'), EmptyWorkspaceSupportContext)
when: ContextKeyExpr.and(WorkbenchStateContext.isEqualTo('folder'), EmptyWorkspaceSupportContext)
});
MenuRegistry.appendMenuItem(MenuId.MenubarFileMenu, {

View file

@ -66,6 +66,8 @@ export class WorkbenchContextKeysHandler extends Disposable {
private emptyWorkspaceSupportContext: IContextKey<boolean>;
private enterMultiRootWorkspaceSupportContext: IContextKey<boolean>;
private virtualWorkspaceContext: IContextKey<string>;
private inZenModeContext: IContextKey<boolean>;
private isFullscreenContext: IContextKey<boolean>;
private isCenteredLayoutContext: IContextKey<boolean>;
@ -75,8 +77,6 @@ export class WorkbenchContextKeysHandler extends Disposable {
private panelVisibleContext: IContextKey<boolean>;
private panelMaximizedContext: IContextKey<boolean>;
private vitualWorkspaceContext: IContextKey<string>;
constructor(
@IContextKeyService private readonly contextKeyService: IContextKeyService,
@IWorkspaceContextService private readonly contextService: IWorkspaceContextService,
@ -102,7 +102,7 @@ export class WorkbenchContextKeysHandler extends Disposable {
RemoteNameContext.bindTo(this.contextKeyService).set(getRemoteName(this.environmentService.remoteAuthority) || '');
this.vitualWorkspaceContext = VirtualWorkspaceContext.bindTo(this.contextKeyService);
this.virtualWorkspaceContext = VirtualWorkspaceContext.bindTo(this.contextKeyService);
this.updateVirtualWorkspaceContextKey();
// Capabilities
@ -319,6 +319,6 @@ export class WorkbenchContextKeysHandler extends Disposable {
}
private updateVirtualWorkspaceContextKey(): void {
this.vitualWorkspaceContext.set(getVirtualWorkspaceScheme(this.contextService.getWorkspace()) || '');
this.virtualWorkspaceContext.set(getVirtualWorkspaceScheme(this.contextService.getWorkspace()) || '');
}
}