提交 e5cbf755 编写于 作者: I isidor

commands use precondition for enablement

fixes #41103
上级 64b5169c
......@@ -11,7 +11,7 @@ import { revertLocalChangesCommand, acceptLocalChangesCommand, CONFLICT_RESOLUTI
import { SyncActionDescriptor, MenuId, MenuRegistry } from 'vs/platform/actions/common/actions';
import { IWorkbenchActionRegistry, Extensions as ActionExtensions } from 'vs/workbench/common/actions';
import { KeyMod, KeyChord, KeyCode } from 'vs/base/common/keyCodes';
import { openWindowCommand, REVEAL_IN_OS_COMMAND_ID, COPY_PATH_COMMAND_ID, REVEAL_IN_EXPLORER_COMMAND_ID, OPEN_TO_SIDE_COMMAND_ID, REVERT_FILE_COMMAND_ID, SAVE_FILE_COMMAND_ID, SAVE_FILE_LABEL, SAVE_FILE_AS_COMMAND_ID, SAVE_FILE_AS_LABEL, SAVE_ALL_IN_GROUP_COMMAND_ID, OpenEditorsGroupContext, COMPARE_WITH_SAVED_COMMAND_ID, COMPARE_RESOURCE_COMMAND_ID, SELECT_FOR_COMPARE_COMMAND_ID, ResourceSelectedForCompareContext, REVEAL_IN_OS_LABEL } from 'vs/workbench/parts/files/electron-browser/fileCommands';
import { openWindowCommand, REVEAL_IN_OS_COMMAND_ID, COPY_PATH_COMMAND_ID, REVEAL_IN_EXPLORER_COMMAND_ID, OPEN_TO_SIDE_COMMAND_ID, REVERT_FILE_COMMAND_ID, SAVE_FILE_COMMAND_ID, SAVE_FILE_LABEL, SAVE_FILE_AS_COMMAND_ID, SAVE_FILE_AS_LABEL, SAVE_ALL_IN_GROUP_COMMAND_ID, OpenEditorsGroupContext, COMPARE_WITH_SAVED_COMMAND_ID, COMPARE_RESOURCE_COMMAND_ID, SELECT_FOR_COMPARE_COMMAND_ID, ResourceSelectedForCompareContext, REVEAL_IN_OS_LABEL, DirtyEditorContext } from 'vs/workbench/parts/files/electron-browser/fileCommands';
import { CommandsRegistry, ICommandHandler } from 'vs/platform/commands/common/commands';
import { ContextKeyExpr } from 'vs/platform/contextkey/common/contextkey';
import { KeybindingsRegistry } from 'vs/platform/keybinding/common/keybindingsRegistry';
......@@ -195,7 +195,8 @@ MenuRegistry.appendMenuItem(MenuId.OpenEditorsContext, {
order: 10,
command: {
id: SAVE_FILE_COMMAND_ID,
title: SAVE_FILE_LABEL
title: SAVE_FILE_LABEL,
precondition: DirtyEditorContext
},
when: ContextKeyExpr.and(ResourceContextKey.IsFile, AutoSaveContext.notEqualsTo('afterDelay'))
});
......@@ -205,7 +206,8 @@ MenuRegistry.appendMenuItem(MenuId.OpenEditorsContext, {
order: 20,
command: {
id: REVERT_FILE_COMMAND_ID,
title: nls.localize('revert', "Revert File")
title: nls.localize('revert', "Revert File"),
precondition: DirtyEditorContext
},
when: ContextKeyExpr.and(ResourceContextKey.IsFile, AutoSaveContext.notEqualsTo('afterDelay'))
});
......@@ -233,9 +235,10 @@ MenuRegistry.appendMenuItem(MenuId.OpenEditorsContext, {
order: 10,
command: {
id: COMPARE_WITH_SAVED_COMMAND_ID,
title: nls.localize('compareWithSaved', "Compare with Saved")
title: nls.localize('compareWithSaved', "Compare with Saved"),
precondition: DirtyEditorContext
},
when: ResourceContextKey.IsFile
when: ContextKeyExpr.and(ResourceContextKey.IsFile, AutoSaveContext.notEqualsTo('afterDelay'))
});
const compareResourceCommand = {
......@@ -363,9 +366,10 @@ MenuRegistry.appendMenuItem(MenuId.ExplorerContext, {
order: 20,
command: {
id: PASTE_FILE_ID,
title: PASTE_FILE_LABEL
title: PASTE_FILE_LABEL,
precondition: FileCopiedContext
},
when: ContextKeyExpr.and(ExplorerFolderContext, FileCopiedContext)
when: ExplorerFolderContext
});
MenuRegistry.appendMenuItem(MenuId.ExplorerContext, {
......
......@@ -66,6 +66,7 @@ export const SAVE_FILES_COMMAND_ID = 'workbench.command.files.saveFiles';
export const SAVE_FILES_LABEL = nls.localize('saveFiles', "Save All Files");
export const OpenEditorsGroupContext = new RawContextKey<boolean>('groupFocusedInOpenEditors', false);
export const DirtyEditorContext = new RawContextKey<boolean>('dirtyEditor', false);
export const ResourceSelectedForCompareContext = new RawContextKey<boolean>('resourceSelectedForCompare', false);
export const openWindowCommand = (accessor: ServicesAccessor, paths: string[], forceNewWindow: boolean) => {
......
......@@ -40,7 +40,7 @@ import { KeyCode } from 'vs/base/common/keyCodes';
import { IDisposable, dispose } from 'vs/base/common/lifecycle';
import { fillInActions } from 'vs/platform/actions/browser/menuItemActionItem';
import { IMenuService, MenuId, IMenu } from 'vs/platform/actions/common/actions';
import { OpenEditorsGroupContext } from 'vs/workbench/parts/files/electron-browser/fileCommands';
import { OpenEditorsGroupContext, DirtyEditorContext } from 'vs/workbench/parts/files/electron-browser/fileCommands';
import { ResourceContextKey } from 'vs/workbench/common/resources';
import { DataTransfers } from 'vs/base/browser/dnd';
import { getPathLabel, getBaseLabel } from 'vs/base/common/labels';
......@@ -64,6 +64,7 @@ export class OpenEditorsView extends ViewsViewletPanel {
private needsRefresh: boolean;
private resourceContext: ResourceContextKey;
private groupFocusedContext: IContextKey<boolean>;
private dirtyEditorFocusedContext: IContextKey<boolean>;
constructor(
options: IViewletViewOptions,
......@@ -159,13 +160,16 @@ export class OpenEditorsView extends ViewsViewletPanel {
this.resourceContext = this.instantiationService.createInstance(ResourceContextKey);
this.groupFocusedContext = OpenEditorsGroupContext.bindTo(this.contextKeyService);
this.dirtyEditorFocusedContext = DirtyEditorContext.bindTo(this.contextKeyService);
this.disposables.push(this.list.onContextMenu(e => this.onListContextMenu(e)));
this.list.onFocusChange(e => {
this.resourceContext.reset();
this.groupFocusedContext.reset();
this.dirtyEditorFocusedContext.reset();
const element = e.elements.length ? e.elements[0] : undefined;
if (element instanceof OpenEditor) {
this.dirtyEditorFocusedContext.set(this.textFileService.isDirty(element.getResource()));
this.resourceContext.set(element.getResource());
} else if (!!element) {
this.groupFocusedContext.set(true);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册