aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortoasted-nutbread <toasted-nutbread@users.noreply.github.com>2020-09-13 11:28:13 -0400
committerGitHub <noreply@github.com>2020-09-13 11:28:13 -0400
commitefd0de6bc070c0c1476fef9d5a5434dbc108901e (patch)
treef1cbf0417436550241778096883769f698638322
parentfcb8806717fd4b099697c1247d4441e763575684 (diff)
Add workaround for Firefox bug not detecting pen input type correctly (#820)
-rw-r--r--ext/bg/js/settings/keyboard-mouse-input-field.js29
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();
}