From 17a5c2f420a4fc0fe7aacf8753e296e1fe0ff28f Mon Sep 17 00:00:00 2001 From: isidor Date: Fri, 5 Jan 2018 18:33:47 +0100 Subject: [PATCH] menu actions: respect alt key when pressed fixes #41157 --- .../actions/browser/menuItemActionItem.ts | 52 ++++++++++++------- .../fileActions.contribution.ts | 2 +- 2 files changed, 33 insertions(+), 21 deletions(-) diff --git a/src/vs/platform/actions/browser/menuItemActionItem.ts b/src/vs/platform/actions/browser/menuItemActionItem.ts index 1ae5594a9f4c6..036b35f6c6250 100644 --- a/src/vs/platform/actions/browser/menuItemActionItem.ts +++ b/src/vs/platform/actions/browser/menuItemActionItem.ts @@ -16,6 +16,34 @@ import { ActionItem, Separator } from 'vs/base/browser/ui/actionbar/actionbar'; import { domEvent } from 'vs/base/browser/event'; import { Emitter } from 'vs/base/common/event'; +const _altKey = new class extends Emitter { + + private _subscriptions: IDisposable[] = []; + private _isPressed: boolean; + + constructor() { + super(); + + this._subscriptions.push(domEvent(document.body, 'keydown')(e => this.isPressed = e.altKey)); + this._subscriptions.push(domEvent(document.body, 'keyup')(e => this.isPressed = false)); + this._subscriptions.push(domEvent(document.body, 'mouseleave')(e => this.isPressed = false)); + this._subscriptions.push(domEvent(document.body, 'blur')(e => this.isPressed = false)); + } + + get isPressed(): boolean { + return this._isPressed; + } + + set isPressed(value: boolean) { + this._isPressed = value; + this.fire(this._isPressed); + } + + dispose() { + super.dispose(); + this._subscriptions = dispose(this._subscriptions); + } +}; export function fillInActions(menu: IMenu, options: IMenuActionOptions, target: IAction[] | { primary: IAction[]; secondary: IAction[]; }, isPrimaryGroup: (group: string) => boolean = group => group === 'navigation'): void { const groups = menu.getActions(options); @@ -25,6 +53,10 @@ export function fillInActions(menu: IMenu, options: IMenuActionOptions, target: for (let tuple of groups) { let [group, actions] = tuple; + if (_altKey.isPressed) { + actions = actions.map(a => !!a.alt ? a.alt : a); + } + if (isPrimaryGroup(group)) { const head = Array.isArray(target) ? target : target.primary; @@ -72,26 +104,6 @@ export function createActionItem(action: IAction, keybindingService: IKeybinding return undefined; } - -const _altKey = new class extends Emitter { - - private _subscriptions: IDisposable[] = []; - - constructor() { - super(); - - this._subscriptions.push(domEvent(document.body, 'keydown')(e => this.fire(e.altKey))); - this._subscriptions.push(domEvent(document.body, 'keyup')(e => this.fire(false))); - this._subscriptions.push(domEvent(document.body, 'mouseleave')(e => this.fire(false))); - this._subscriptions.push(domEvent(document.body, 'blur')(e => this.fire(false))); - } - - dispose() { - super.dispose(); - this._subscriptions = dispose(this._subscriptions); - } -}; - export class MenuItemActionItem extends ActionItem { private _wantsAltCommand: boolean = false; 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 2a5bc1a008470..c198e31c93b28 100644 --- a/src/vs/workbench/parts/files/electron-browser/fileActions.contribution.ts +++ b/src/vs/workbench/parts/files/electron-browser/fileActions.contribution.ts @@ -424,7 +424,7 @@ MenuRegistry.appendMenuItem(MenuId.ExplorerContext, { }, alt: { id: DELETE_FILE_ID, - title: MOVE_FILE_TO_TRASH_LABEL + title: nls.localize('deleteFile', "Delete Permanently") }, when: ExplorerRootContext.toNegated() });