diff --git a/src/vs/workbench/parts/files/electron-browser/fileActions.contribution.ts b/src/vs/workbench/parts/files/electron-browser/fileActions.contribution.ts index 34126738db911d974f25af2f4912ad794e4b4cc0..81c7b1de24d693a926b8788b33610b93ab6ddd88 100644 --- a/src/vs/workbench/parts/files/electron-browser/fileActions.contribution.ts +++ b/src/vs/workbench/parts/files/electron-browser/fileActions.contribution.ts @@ -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, { diff --git a/src/vs/workbench/parts/files/electron-browser/fileCommands.ts b/src/vs/workbench/parts/files/electron-browser/fileCommands.ts index 45dcc3156ad9956c176fb1256b9721fa6b557194..6f4b3a5486e6918e137b2b190d932620c351a79d 100644 --- a/src/vs/workbench/parts/files/electron-browser/fileCommands.ts +++ b/src/vs/workbench/parts/files/electron-browser/fileCommands.ts @@ -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('groupFocusedInOpenEditors', false); +export const DirtyEditorContext = new RawContextKey('dirtyEditor', false); export const ResourceSelectedForCompareContext = new RawContextKey('resourceSelectedForCompare', false); export const openWindowCommand = (accessor: ServicesAccessor, paths: string[], forceNewWindow: boolean) => { diff --git a/src/vs/workbench/parts/files/electron-browser/views/openEditorsView.ts b/src/vs/workbench/parts/files/electron-browser/views/openEditorsView.ts index 6e326f65acb7d8187975562c4d00566c43c574ed..d1971cbbbb4a12d3727b81e934b4ce9cf4f84962 100644 --- a/src/vs/workbench/parts/files/electron-browser/views/openEditorsView.ts +++ b/src/vs/workbench/parts/files/electron-browser/views/openEditorsView.ts @@ -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; + private dirtyEditorFocusedContext: IContextKey; 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);