mirror of
https://github.com/storytold/vectorcraft.git
synced 2026-10-14 19:26:56 -04:00
`has()` on an X11 clipboard owner that never answers can block for seconds; the app called it every 0.25 s on the UI thread to decide whether Paste is enabled, so a stuck owner froze the frame loop (the window stopped drawing and could not be closed). `clipboard_probe` owns a second clipboard handle on a worker thread, publishes its verdict over a channel and wakes the UI only when it changes; the frame reads the latest verdict without ever blocking. Without a factory the check stays in line, throttled, exactly as before (the web shows SVG text only; hosts that don't install one keep the old path). The factory is installed on Linux only for now (the environment the bug reproduces in); other platforms keep the in-line check, so this cannot change their behaviour. Tests: a fake clipboard whose `has()` blocks on a gate, a probe factory sharing a recorder, and a headless frame whose elapsed time is measured. They assert the frame does not wait on the clipboard and that the check runs on the probe thread, that the probe's verdict reaches `system_paste` and the Paste menu, that dropping the app stops the probe, and that the in-line check (no factory: the web, older hosts) still works.