From 1739c99c7255a22c588d9a1aaa141fdc38c90813 Mon Sep 17 00:00:00 2001 From: Johannes Rieken Date: Wed, 29 Jun 2016 20:04:25 +0200 Subject: [PATCH] make sure ALT doesn't stick, #8435 --- .../actions/browser/menuItemActionItem.ts | 33 ++++++++++--------- 1 file changed, 17 insertions(+), 16 deletions(-) diff --git a/src/vs/platform/actions/browser/menuItemActionItem.ts b/src/vs/platform/actions/browser/menuItemActionItem.ts index 4911507fccb..fd38c4317bd 100644 --- a/src/vs/platform/actions/browser/menuItemActionItem.ts +++ b/src/vs/platform/actions/browser/menuItemActionItem.ts @@ -54,19 +54,16 @@ const _altKey = new class extends Emitter { private _subscriptions: IDisposable[] = []; constructor() { - super({ - onFirstListenerAdd: () => { - domEvent(document.body, 'keydown')(this._key, this, this._subscriptions); - domEvent(document.body, 'keyup')(this._key, this, this._subscriptions); - }, - onLastListenerRemove: () => { - this._subscriptions = dispose(this._subscriptions); - } - }); + 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))); } - private _key(e: KeyboardEvent) { - this.fire(e.type === 'keydown' && e.altKey); + dispose() { + super.dispose(); + this._subscriptions = dispose(this._subscriptions); } }; @@ -102,21 +99,25 @@ class MenuItemActionItem extends ActionItem { let altSubscription: IDisposable; let mouseOver: boolean; this._callOnDispose.push(domEvent(container, 'mouseleave')(_ => { + mouseOver = false; if (!this._altKeyDown) { - dispose(altSubscription); + // stop listen on ALT + altSubscription.dispose(); } - mouseOver = false; })); this._callOnDispose.push(domEvent(container, 'mouseenter')(e => { mouseOver = true; altSubscription = _altKey.event(value => { - if (!mouseOver) { - dispose(altSubscription); - } + this._altKeyDown = value; this._updateLabel(); this._updateTooltip(); this._updateClass(); + + if (!mouseOver) { + // stop listening on ALT + altSubscription.dispose(); + } }); })); } -- GitLab