Commit bf301cf5de2f
tarball2 files changed+19-6
@@ -336,19 +336,30 @@
336336
};337337
let pointerAt: { x: number; y: number } | null = null;338338
let pointerScroller: HTMLElement | null = null;339
+ const wakePointer = () => {340
+ document.documentElement.classList.remove('pointer-inert');341
+ pointerScroller?.removeAttribute('data-pointer-scroll');342
+ pointerScroller = null;343
+ };339344
const hidePointer = (e: KeyboardEvent) => {340
- if (e.ctrlKey || e.metaKey || e.altKey || !isEditable(e.target)) return;345
+ if (!isEditable(e.target)) {346
+ wakePointer();347
+ return;348
+ }349
+ if (e.ctrlKey || e.metaKey || e.altKey) return;341350
if (e.key.length !== 1 && e.key !== 'Backspace' && e.key !== 'Delete' && e.key !== 'Enter') return;342351
const root = document.documentElement;343
- if (root.classList.contains('pointer-hidden')) return;352
+ if (root.classList.contains('pointer-inert')) return;344353
pointerScroller = pointerAt ? scrollerAt(pointerAt.x, pointerAt.y) : null;345354
pointerScroller?.setAttribute('data-pointer-scroll', '');346
- root.classList.add('pointer-hidden');355
+ root.classList.add('pointer-hidden', 'pointer-inert');347356
};348357
const showPointer = () => {349358
document.documentElement.classList.remove('pointer-hidden');350
- pointerScroller?.removeAttribute('data-pointer-scroll');351
- pointerScroller = null;359
+ wakePointer();360
+ };361
+ const leaveEditable = (e: FocusEvent) => {362
+ if (isEditable(e.target)) wakePointer();352363
};353364
const movePointer = (e: PointerEvent) => {354365
pointerAt = { x: e.clientX, y: e.clientY };@@ -362,6 +373,7 @@
362373
window.addEventListener('keydown', hidePointer, true);363374
window.addEventListener('pointermove', movePointer);364375
window.addEventListener('pointerdown', showPointer);376
+ window.addEventListener('focusout', leaveEditable);365377
const stopMuteSync = startMuteSync();366378
const stopNotifications = startNotifications((roomId) => {367379
selectedSpaceId = null;@@ -379,6 +391,7 @@
379391
window.removeEventListener('keydown', hidePointer, true);380392
window.removeEventListener('pointermove', movePointer);381393
window.removeEventListener('pointerdown', showPointer);394
+ window.removeEventListener('focusout', leaveEditable);382395
showPointer();383396
disconnectEvents();384397
stopTyping();@@ -157,7 +157,7 @@ html, body, #app {
157157
158158
html.pointer-hidden, html.pointer-hidden * { cursor: none !important; }159159
/* A still pointer keeps hovering whatever scrolls under it, lighting rows and the browser's link URL bubble. The scroller under it keeps the wheel. */160
-html.pointer-hidden body *:not([data-pointer-scroll]) { pointer-events: none !important; }160
+html.pointer-inert body *:not([data-pointer-scroll]) { pointer-events: none !important; }161161
162162
body {163163
background: var(--bg);