Trace window focus, blur and visibility in pen input

From the development repository at 0304046.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
ackandClaude Opus 4.8 committed 2026-10-11 19:10:25 +02:00
1 parent db4cb3a731
commit 2de843143d
2 files changed
+17 -2

No files matched your search

+16 -1
View File
@@ -178,7 +178,8 @@ export function attachPenInput(surface, target) {
/** @param {PointerEvent} event @returns {string} The press, for the trace. */ /** @param {PointerEvent} event @returns {string} The press, for the trace. */
function describe(event) { function describe(event) {
const where = event.target === surface ? '' : ` on ${describeTarget(event.target)}`; const where = event.target === surface ? '' : ` on ${describeTarget(event.target)}`;
return `${event.pointerType} ${event.pointerId} buttons ${event.buttons} pressure ${event.pressure.toFixed(2)}${where}`; const focus = document.hasFocus() ? 'in front' : 'behind';
return `${event.pointerType} ${event.pointerId} buttons ${event.buttons} pressure ${event.pressure.toFixed(2)} (${focus})${where}`;
} }
surface.addEventListener('pointerdown', (event) => { surface.addEventListener('pointerdown', (event) => {
@@ -314,6 +315,20 @@ export function attachPenInput(surface, target) {
// The side button of a pen asks for a context menu. // The side button of a pen asks for a context menu.
surface.addEventListener('contextmenu', (event) => event.preventDefault()); surface.addEventListener('contextmenu', (event) => event.preventDefault());
// The window's focus, blur and the tab's visibility, traced into the
// Session log but acting on nothing yet (2026-10-11): Andy's pages
// sometimes gained a lone dot when he clicked the page to bring the
// browser to the front from the terminal, with the Pen chosen. A
// press that only raised the window should draw nothing, but whether
// the browser reports the focus before that press or after it, and
// whether the document is focused when the press arrives, must be
// learned on his machine before the rule is written (a window focus
// is faked by the test harness on every tab switch, so it cannot be
// learned here). The press trace already carries "in front"/"behind".
window.addEventListener('focus', () => trace('window: focus'));
window.addEventListener('blur', () => trace('window: blur'));
document.addEventListener('visibilitychange', () => trace(`visibility: ${document.visibilityState}`));
// Safari on iOS: cancelling pointerdown leaves the touch's own // Safari on iOS: cancelling pointerdown leaves the touch's own
// behaviour (selection, the magnifier, the callout) to WebKit; only a // behaviour (selection, the magnifier, the callout) to WebKit; only a
// cancelled touchstart stops it. The text field is a child of the // cancelled touchstart stops it. The text field is a child of the
+1 -1
View File
@@ -781,7 +781,7 @@ class EndToEndTest(unittest.TestCase):
# and a release of the pen, after the browser's name. # and a release of the pen, after the browser's name.
shown = firefox.run("return document.getElementById('event_log').textContent;") shown = firefox.run("return document.getElementById('event_log').textContent;")
self.assertRegex(shown, r"^\d\d:\d\d:\d\d\.\d\d\d Browser: Mozilla") self.assertRegex(shown, r"^\d\d:\d\d:\d\d\.\d\d\d Browser: Mozilla")
self.assertRegex(shown, r"\n\S+ press pen \d+ buttons 1 pressure \d\.\d\d, pen\n") self.assertRegex(shown, r"\n\S+ press pen \d+ buttons 1 pressure \d\.\d\d \((?:in front|behind)\), pen\n")
self.assertRegex(shown, r"\n\S+ pointerup pen \d+, \d+ points") self.assertRegex(shown, r"\n\S+ pointerup pen \d+, \d+ points")
firefox.run("document.getElementById('session_close').click();") firefox.run("document.getElementById('session_close').click();")
self.assertFalse(firefox.run("return document.getElementById('session_dialog').open;")) self.assertFalse(firefox.run("return document.getElementById('session_dialog').open;"))