diff options
author | toasted-nutbread <toasted-nutbread@users.noreply.github.com> | 2020-09-11 16:57:57 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-09-11 16:57:57 -0400 |
commit | a5845df123f4024db686d21c4f37f38be79fb8e5 (patch) | |
tree | 564efed3557fb237b595cefb418a65b5930a2538 /ext/bg/js | |
parent | 6afbda8dfe6451420b031fa376798610d48a389b (diff) |
Add support for pointer event input detection (#810)
Diffstat (limited to 'ext/bg/js')
-rw-r--r-- | ext/bg/js/settings/keyboard-mouse-input-field.js | 17 | ||||
-rw-r--r-- | ext/bg/js/settings/scan-inputs-controller.js | 11 |
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; + } } |