Skip to content

fix(mac): AppKit tooltips while zoomed (0.5.3) - #556

Merged
Maxaubert merged 4 commits into
mainfrom
fix/mac-tooltips-while-zoomed
Nov 6, 2026
Merged

Maxaubert merged 4 commits into
mainfrom
fix/mac-tooltips-while-zoomed

Conversation

@Maxaubert

@Maxaubert Maxaubert commented Nov 6, 2026 •

Copy link
Copy Markdown
Owner

Owner 2026-11-06: no tooltips in Xcode while zoomed, hover effects fine.

Cause. 0.5.2 hides the real cursor while the pointer moves (the tiny-cursor fix). AppKit's -[NSToolTipManager mouseEnteredToolTip:inWindow:pointInWindow:] checks NSCursor._isHidden once, when the pointer enters the tooltip's rect, and starts no timer if hidden (ipsw dyld disass). Later moves never start one: a zero-distance recheck, one moved by 0.5 pt, one with a delta, and a second recheck were all tried. So no tooltip ever came, on any engine.

Fix: TooltipNudge.

  • At rest, one Accessibility look (own queue, 0.25 s timeout): does the element under the pointer, or one of its first ancestors, have tooltip text (AXHelp) in the frontmost app?
  • If so, a 4x4 near-transparent, non-activating panel sits under the pointer for 25 ms. The app sees the pointer leave and come back with the cursor shown, and the tooltip starts.
  • It fires once per visit, and re-arms when the pointer leaves the element's frame.
  • No polling.
  • Flashing at once on every stop without the Accessibility look was tried; the owner found it worse (2026-11-07), so it was reverted.

Also.

  • The draw engine's hand-over log line now names the window (owner, layer, size).
  • 0.5.3.

Tests.

Suite Result
scripts/tooltip_truth.py (new) tooltip after every stop on Backdrop and Render at 1x and 3x; one flash per visit; no flash over the SwiftUI half; the probe app stays active
glimpse_truth --pauses 0 frames
churn_truth pass
e2e_settings_mouse pass
backdrop_truth pass
hitch_truth pass
wind-checks pass
SwiftUI hover after a stop unchanged
  • e2e_draw: passed 3 times. The flaky Inspect crosshair check failed once; it failed before this change too. Earlier, the edge zoom-out check failed 3 times running and has not come back in 5 runs since. The new log line names the window if it does.
  • e2e_hover: not run. Its notification banner can't be posted on this Mac right now, probably a Focus mode.

Not changed: Transform with Wind's cursor keeps the real cursor hidden throughout, so it has no tooltips there.

🤖 Generated with Claude Code

https://claude.ai/code/session_01SkyGaTJWN7aoebcu1GASvL

Maxaubert and others added 4 commits November 7, 2026 00:35
Hiding the real cursor during motion (0.5.2) killed every AppKit tooltip: NSToolTipManager checks
NSCursor._isHidden once, when the pointer enters the tooltip rect. TooltipNudge: at rest, if the
element under the pointer has AXHelp in the frontmost app, a 4x4 near-transparent panel sits under
the pointer for 25 ms so the app sees a re-entry with the cursor shown. Once per visit.
scripts/tooltip_truth.py; the hand-over log names the window.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SkyGaTJWN7aoebcu1GASvL
…flicker seen)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SkyGaTJWN7aoebcu1GASvL
…per element (owner 2026-11-07: worse)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SkyGaTJWN7aoebcu1GASvL
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SkyGaTJWN7aoebcu1GASvL
@Maxaubert
Maxaubert merged commit f91dc5e into main Nov 6, 2026
@Maxaubert
Maxaubert deleted the fix/mac-tooltips-while-zoomed branch November 6, 2026 23:47
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant