diff options
Diffstat (limited to 'ext/js/language')
| -rw-r--r-- | ext/js/language/text-scanner.js | 38 | 
1 files changed, 37 insertions, 1 deletions
| diff --git a/ext/js/language/text-scanner.js b/ext/js/language/text-scanner.js index bdbc117e..13db91d5 100644 --- a/ext/js/language/text-scanner.js +++ b/ext/js/language/text-scanner.js @@ -88,6 +88,9 @@ export class TextScanner extends EventDispatcher {          /** @type {?import('text-scanner').SelectionRestoreInfo} */          this._selectionRestoreInfo = null; +        /** @type {MouseEvent | null} */ +        this._lastMouseMove = null; +          /** @type {boolean} */          this._deepContentScan = false;          /** @type {boolean} */ @@ -546,6 +549,7 @@ export class TextScanner extends EventDispatcher {       */      _onMouseMove(e) {          this._scanTimerClear(); +        this._lastMouseMove = e;          const inputInfo = this._getMatchingInputGroupFromEvent('mouse', 'mouseMove', e);          if (inputInfo === null) { return; } @@ -554,6 +558,28 @@ export class TextScanner extends EventDispatcher {      }      /** +     * @param {KeyboardEvent} e +     */ +    _onKeyDown(e) { +        if (this._lastMouseMove !== null && (e.ctrlKey || e.shiftKey || e.altKey || e.metaKey)) { +            const syntheticMouseEvent = new MouseEvent(this._lastMouseMove.type, { +                screenX: this._lastMouseMove.screenX, +                screenY: this._lastMouseMove.screenY, +                clientX: this._lastMouseMove.clientX, +                clientY: this._lastMouseMove.clientY, +                ctrlKey: e.ctrlKey, +                shiftKey: e.shiftKey, +                altKey: e.altKey, +                metaKey: e.metaKey, +                button: this._lastMouseMove.button, +                buttons: this._lastMouseMove.buttons, +                relatedTarget: this._lastMouseMove.relatedTarget +            }); +            this._onMouseMove(syntheticMouseEvent); +        } +    } + +    /**       * @param {MouseEvent} e       * @returns {boolean|void}       */ @@ -1050,7 +1076,7 @@ export class TextScanner extends EventDispatcher {          } else if (this._arePointerEventsSupported()) {              eventListenerInfos = this._getPointerEventListeners(capture);          } else { -            eventListenerInfos = this._getMouseEventListeners(capture); +            eventListenerInfos = [...this._getMouseEventListeners(capture), ...this._getKeyboardEventListeners(capture)];              if (this._touchInputEnabled) {                  eventListenerInfos.push(...this._getTouchEventListeners(capture));              } @@ -1103,6 +1129,16 @@ export class TextScanner extends EventDispatcher {       * @param {boolean} capture       * @returns {import('event-listener-collection').AddEventListenerArgs[]}       */ +    _getKeyboardEventListeners(capture) { +        return [ +            [this._node, 'keydown', this._onKeyDown.bind(this), capture] +        ]; +    } + +    /** +     * @param {boolean} capture +     * @returns {import('event-listener-collection').AddEventListenerArgs[]} +     */      _getTouchEventListeners(capture) {          return [              [this._node, 'auxclick', this._onAuxClick.bind(this), capture], |