Repository navigation
fix(mac): no tiny cursor on hover changes (0.5.2) - #555
Merged
Merged
Conversation
An app's single cursor change (a hover effect) showed the real cursor on screen in about 1 of 5 changes: Wind's look read the app's cursor image before clearing it, and that read took longer than the wait between looks. The look now hides the real cursor first, reads, clears, shows again, and looks every 0.25 ms (CPU unchanged). glimpse_truth.py counts real-cursor frames on screen: about 7 per 35 changes before, 0-2 now. churn_truth's stop check no longer assumes a pointer travel. Fixes #554 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01SkyGaTJWN7aoebcu1GASvL
…rest Even with the hide first and a look every 0.25 ms, about 1 in 20 hover changes still flashed (0.2 ms exposure against a 6.9 ms refresh; 5 seen in a minute in the owner's browser). Apps set the cursor on mouse moves, so the real cursor is now hidden while moving and transparent again 0.15 s after it stops, with a hover recheck. Event driven from the tap, no polling. SwiftUI hover comes about 0.1 s after stopping. glimpse_truth: 0 frames in 4 runs. e2e_settings_mouse no longer expects the transparent cursor shown while moving. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01SkyGaTJWN7aoebcu1GASvL
glimpse_truth --pauses (hand-like 20-200 ms stops) showed 0 real-cursor frames at 150, 60 and 40 ms on both engines; 60 keeps a margin for slow trackpad moves. WIND_REST_MS test override. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01SkyGaTJWN7aoebcu1GASvL
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
Fixes #554. On Render and Backdrop, an app's cursor change on hover (arrow to pointing hand) showed the real, unmagnified cursor for a frame or two on many hovers.
Wind's check read the app's cursor image before clearing it. That read is a WindowServer round trip and took longer than the wait between checks, so faster checks alone changed nothing. Two changes:
glimpse_truth.py --pauses, hand-like stops); AppKit and web hover are unchanged.Measured on screen
glimpse_truth.pycaptures every frame with the cursor, about 35 hover changes per run, and counts frames showing the real cursor:Tests
glimpse_truth 4/4 (twice), backdrop_truth 18/18, churn_truth all pass (also over ChatGPT), e2e_hover 43/43, e2e_draw 75/75, e2e_screenshot 62/62, e2e 18/18, e2e_settings_mouse 11/11, hitch_truth pass, wind-checks pass. e2e_mouse: the edge game-lock check fails on main and here alike (main 1 and 3 failures over two runs, this PR 0 and 1).
Test fixes: e2e_settings_mouse no longer expects the transparent cursor shown while moving, churn_truth's stop check assumed a fixed pointer travel (the owner's mouse settings changed), and backdrop_truth now waits for the recording dot of a previous suite to clear.
Not tested: the owner's real case, a file label in Internxt in the ChatGPT browser, with the final build.
Version 0.5.2. Mac release is unsigned (ad hoc).
🤖 Generated with Claude Code
https://claude.ai/code/session_01SkyGaTJWN7aoebcu1GASvL