Skip to content

Commit

Permalink
menu actions: respect alt key when pressed
Browse files Browse the repository at this point in the history
fixes #41157
  • Loading branch information
isidorn committed Jan 5, 2018
1 parent 39f3f9a commit 17a5c2f
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 21 deletions.
52 changes: 32 additions & 20 deletions src/vs/platform/actions/browser/menuItemActionItem.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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<boolean> {

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);
Expand All @@ -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<IAction>(target) ? target : target.primary;
Expand Down Expand Up @@ -72,26 +104,6 @@ export function createActionItem(action: IAction, keybindingService: IKeybinding
return undefined;
}


const _altKey = new class extends Emitter<boolean> {

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;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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()
});

0 comments on commit 17a5c2f

Please sign in to comment.