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 | |
| parent | 6afbda8dfe6451420b031fa376798610d48a389b (diff) | |
Add support for pointer event input detection (#810)
| -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; +    }  } |