- commit
- 7e35f388eaba74ee3e1a44ca0050327a43016bcd
- parent
- e25820446df5cdea8ab2a6003c66b655e02365ca
- author
- Dami <dami.etoile@gmail.com>
| M | src/ | 19 | +++++-------------- |
| A | src/ | 22 | ++++++++++++++++++++++ |
@@ -2143,11 +2143,10 @@ canvas.addEventListener('mousemove', (e) => {
21432143 sendInput({ t: 'mm', x, y });21442144 });21452145 2146-function handlePointerDown(e) {2146+function handleMouseDown(e) {21472147 if (!controlMode || !pointerInputAvailable()) return;21482148 if (inputCapabilities.relativePointer) e.stopPropagation();21492149 else if (e.target !== canvas) return;2150- if (e.pointerType !== 'mouse') return;21512150 const btn = browserMouseButtonCode(e.button);21522151 if (btn === null) return;21532152 e.preventDefault();@@ -2157,33 +2156,25 @@ function handlePointerDown(e) {
21572156 });21582157 }21592158 if (!heldInputs.trackMouseButton(btn)) return;2160- try { canvas.setPointerCapture(e.pointerId); } catch (_) {}21612159 if (!sendInput({ t: 'md', b: btn })) heldInputs.takeMouseButtonRelease(btn);21622160 }21632161 2164-window.addEventListener('pointerdown', handlePointerDown, { capture: true });2162+window.addEventListener('mousedown', handleMouseDown, { capture: true });21652163 2166-function releasePointerButton(e) {2164+function releaseMouseButton(e) {21672165 if (!connected || !pointerInputAvailable()) return;2168- if (e.pointerType !== 'mouse') return;21692166 const btn = browserMouseButtonCode(e.button);21702167 if (btn === null) return;21712168 const release = heldInputs.takeMouseButtonRelease(btn);21722169 if (!release) return;21732170 e.preventDefault();2174- try {2175- if (canvas.hasPointerCapture(e.pointerId)) canvas.releasePointerCapture(e.pointerId);2176- } catch (_) {}21772171 sendInput(release, { release: true });21782172 }21792173 2180-window.addEventListener('pointerup', (e) => {2174+window.addEventListener('mouseup', (e) => {21812175 if (controlMode && inputCapabilities.relativePointer) e.stopPropagation();2182- releasePointerButton(e);2176+ releaseMouseButton(e);21832177 }, { capture: true });2184-window.addEventListener('pointercancel', (e) => {2185- if (e.pointerType === 'mouse') releaseHeldInputs();2186-});21872178 21882179 window.addEventListener('contextmenu', (e) => {21892180 if (!controlMode || !pointerInputAvailable()) return;@@ -0,0 +1,22 @@
1+import assert from 'node:assert/strict';2+import { readFile } from 'node:fs/promises';3+import test from 'node:test';4+5+const main = await readFile(new URL('./main.js', import.meta.url), 'utf8');6+7+test('mouse buttons use the same WebKit event family as motion and scrolling', () => {8+ assert.match(9+ main,10+ /window\.addEventListener\('mousedown', handleMouseDown, \{ capture: true \}\);/,11+ );12+ assert.match(13+ main,14+ /window\.addEventListener\('mouseup', \(e\) => \{[\s\S]*?releaseMouseButton\(e\);[\s\S]*?\}, \{ capture: true \}\);/,15+ );16+17+ const buttonHandlers = main.slice(18+ main.indexOf('function handleMouseDown'),19+ main.indexOf("window.addEventListener('contextmenu'"),20+ );21+ assert.doesNotMatch(buttonHandlers, /pointer(?:down|up|cancel)|pointerType|PointerCapture/);22+});