summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortoasted-nutbread <toasted-nutbread@users.noreply.github.com>2020-09-11 16:57:57 -0400
committerGitHub <noreply@github.com>2020-09-11 16:57:57 -0400
commita5845df123f4024db686d21c4f37f38be79fb8e5 (patch)
tree564efed3557fb237b595cefb418a65b5930a2538
parent6afbda8dfe6451420b031fa376798610d48a389b (diff)
Add support for pointer event input detection (#810)
-rw-r--r--ext/bg/js/settings/keyboard-mouse-input-field.js17
-rw-r--r--ext/bg/js/settings/scan-inputs-controller.js11
2 files changed, 25 insertions, 3 deletions
diff --git a/ext/bg/js/settings/keyboard-mouse-input-field.js b/ext/bg/js/settings/keyboard-mouse-input-field.js
index 4ba0d3ed..2c6a6476 100644
--- a/ext/bg/js/settings/keyboard-mouse-input-field.js
+++ b/ext/bg/js/settings/keyboard-mouse-input-field.js
@@ -20,10 +20,11 @@
*/
class KeyboardMouseInputField extends EventDispatcher {
- constructor(inputNode, mouseButton, os) {
+ constructor(inputNode, mouseButton, os, isPointerTypeSupported=null) {
super();
this._inputNode = inputNode;
this._mouseButton = mouseButton;
+ this._isPointerTypeSupported = isPointerTypeSupported;
this._keySeparator = ' + ';
this._inputNameMap = new Map(DocumentUtil.getModifierKeys(os));
this._keyPriorities = new Map([
@@ -54,6 +55,7 @@ class KeyboardMouseInputField extends EventDispatcher {
if (type === 'modifierInputs' && this._mouseButton !== null) {
events.push(
[this._mouseButton, 'mousedown', this._onMouseButtonMouseDown.bind(this), false],
+ [this._mouseButton, 'pointerdown', this._onMouseButtonPointerDown.bind(this), false],
[this._mouseButton, 'mouseup', this._onMouseButtonMouseUp.bind(this), false],
[this._mouseButton, 'contextmenu', this._onMouseButtonContextMenu.bind(this), false]
);
@@ -175,6 +177,19 @@ class KeyboardMouseInputField extends EventDispatcher {
this._addInputs(DocumentUtil.getActiveButtons(e));
}
+ _onMouseButtonPointerDown(e) {
+ const {isPrimary, pointerType} = e;
+ if (
+ !isPrimary ||
+ typeof this._isPointerTypeSupported !== 'function' ||
+ !this._isPointerTypeSupported(pointerType)
+ ) {
+ return;
+ }
+ e.preventDefault();
+ this._addInputs(DocumentUtil.getActiveButtons(e));
+ }
+
_onMouseButtonMouseUp(e) {
e.preventDefault();
}
diff --git a/ext/bg/js/settings/scan-inputs-controller.js b/ext/bg/js/settings/scan-inputs-controller.js
index 84621094..3151e4fd 100644
--- a/ext/bg/js/settings/scan-inputs-controller.js
+++ b/ext/bg/js/settings/scan-inputs-controller.js
@@ -138,8 +138,9 @@ class ScanInputField {
this._node = node;
container.appendChild(node);
- this._includeInputField = new KeyboardMouseInputField(includeInputNode, includeMouseButton, this._os);
- this._excludeInputField = new KeyboardMouseInputField(excludeInputNode, excludeMouseButton, this._os);
+ const isPointerTypeSupported = this._isPointerTypeSupported.bind(this);
+ this._includeInputField = new KeyboardMouseInputField(includeInputNode, includeMouseButton, this._os, isPointerTypeSupported);
+ this._excludeInputField = new KeyboardMouseInputField(excludeInputNode, excludeMouseButton, this._os, isPointerTypeSupported);
this._includeInputField.prepare(include, 'modifierInputs');
this._excludeInputField.prepare(exclude, 'modifierInputs');
@@ -184,4 +185,10 @@ class ScanInputField {
const content = document.importNode(template.content, true);
return content.firstChild;
}
+
+ _isPointerTypeSupported(pointerType) {
+ if (this._node === null) { return false; }
+ const node = this._node.querySelector(`input.scan-input-type-checkbox[data-type=${pointerType}]`);
+ return node !== null && node.checked;
+ }
}