Skip to content
This repository has been archived by the owner on Feb 25, 2023. It is now read-only.

Commit

Permalink
Add support for pointer event input detection (#810)
Browse files Browse the repository at this point in the history
  • Loading branch information
toasted-nutbread authored Sep 11, 2020
1 parent 6afbda8 commit a5845df
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 3 deletions.
17 changes: 16 additions & 1 deletion ext/bg/js/settings/keyboard-mouse-input-field.js
Original file line number Diff line number Diff line change
Expand Up @@ -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([
Expand Down Expand Up @@ -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]
);
Expand Down Expand Up @@ -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();
}
Expand Down
11 changes: 9 additions & 2 deletions ext/bg/js/settings/scan-inputs-controller.js
Original file line number Diff line number Diff line change
Expand Up @@ -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');

Expand Down Expand Up @@ -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;
}
}

0 comments on commit a5845df

Please sign in to comment.