diff options
author | toasted-nutbread <toasted-nutbread@users.noreply.github.com> | 2020-09-13 11:28:13 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-09-13 11:28:13 -0400 |
commit | efd0de6bc070c0c1476fef9d5a5434dbc108901e (patch) | |
tree | f1cbf0417436550241778096883769f698638322 | |
parent | fcb8806717fd4b099697c1247d4441e763575684 (diff) |
Add workaround for Firefox bug not detecting pen input type correctly (#820)
-rw-r--r-- | ext/bg/js/settings/keyboard-mouse-input-field.js | 29 |
1 files changed, 27 insertions, 2 deletions
diff --git a/ext/bg/js/settings/keyboard-mouse-input-field.js b/ext/bg/js/settings/keyboard-mouse-input-field.js index 2c6a6476..f05de4a7 100644 --- a/ext/bg/js/settings/keyboard-mouse-input-field.js +++ b/ext/bg/js/settings/keyboard-mouse-input-field.js @@ -37,6 +37,7 @@ class KeyboardMouseInputField extends EventDispatcher { this._eventListeners = new EventListenerCollection(); this._value = ''; this._type = null; + this._penPointerIds = new Set(); } get value() { @@ -56,6 +57,9 @@ class KeyboardMouseInputField extends EventDispatcher { events.push( [this._mouseButton, 'mousedown', this._onMouseButtonMouseDown.bind(this), false], [this._mouseButton, 'pointerdown', this._onMouseButtonPointerDown.bind(this), false], + [this._mouseButton, 'pointerover', this._onMouseButtonPointerOver.bind(this), false], + [this._mouseButton, 'pointerout', this._onMouseButtonPointerOut.bind(this), false], + [this._mouseButton, 'pointercancel', this._onMouseButtonPointerCancel.bind(this), false], [this._mouseButton, 'mouseup', this._onMouseButtonMouseUp.bind(this), false], [this._mouseButton, 'contextmenu', this._onMouseButtonContextMenu.bind(this), false] ); @@ -70,6 +74,7 @@ class KeyboardMouseInputField extends EventDispatcher { this._eventListeners.removeAllEventListeners(); this._value = ''; this._type = null; + this._penPointerIds.clear(); } // Private @@ -178,9 +183,13 @@ class KeyboardMouseInputField extends EventDispatcher { } _onMouseButtonPointerDown(e) { - const {isPrimary, pointerType} = e; + if (!e.isPrimary) { return; } + + let {pointerType, pointerId} = e; + // Workaround for Firefox bug not detecting certain 'touch' events as 'pen' events. + if (this._penPointerIds.has(pointerId)) { pointerType = 'pen'; } + if ( - !isPrimary || typeof this._isPointerTypeSupported !== 'function' || !this._isPointerTypeSupported(pointerType) ) { @@ -190,6 +199,22 @@ class KeyboardMouseInputField extends EventDispatcher { this._addInputs(DocumentUtil.getActiveButtons(e)); } + _onMouseButtonPointerOver(e) { + const {pointerType, pointerId} = e; + if (pointerType === 'pen') { + this._penPointerIds.add(pointerId); + } + } + + _onMouseButtonPointerOut(e) { + const {pointerId} = e; + this._penPointerIds.delete(pointerId); + } + + _onMouseButtonPointerCancel(e) { + this._onMouseButtonPointerOut(e); + } + _onMouseButtonMouseUp(e) { e.preventDefault(); } |