Repository navigation
fix(cursor,input): review findings: stuck key, monitor-edge clamp, sprite size and scheme, nudge, Inspect clip (#494) - #500
Merged
Conversation
… side-button records (#494) A reinstalled or resumed keyboard hook met a held bound key at its auto-repeat, treated it as a fresh press, swallowed it and then its UP, leaving the key stuck down system-wide (and the watchdog reinstalling every 250 ms). The firstDown branch now skips the swallow when GetAsyncKeyState shows the system saw the DOWN. An unswallowed XBUTTON DOWN now drops a stale swallow record, as the click and key paths do, so its UP is not eaten. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TdjopXZfsUiesYxYLYHEdH
…Inspect replaced (#494) The lens centre clamps to w/h, so the rounded click point could be the first pixel of the monitor to the right: render welds, Inspect clicks and Inspect exit warps then put the real pointer there. The click point and the exit warps are now held to [0, w-1] / [0, h-1] (PointerPixel); the un-rounded centre keeps the edge for the transform anchor. Inspect's exits set the clip to NULL, dropping a work-area utility's or windowed game's clip. Inspect now saves the clip its freeze replaced (the one beneath Wind's own edge clip when that holds the pointer) and gives it back at toggle-off, teardown and device-lost when it confined something (SavedClipWorthRestoring), re-reading the baseline afterwards. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TdjopXZfsUiesYxYLYHEdH
…level above 1x (#494) NudgePointer always stepped +1 x, which SetCursorPos clamps back onto the pointer at the right edge of the clip (the session edge clip holds it exactly there) or the screen: no cursor event, so the composed pointer and DWM centring were lost there. The step now goes to a pixel the clip allows (PickNudgeStep), and the shell-panel clip nudge stays on the virtual screen. A Wind (sprite) session is active from the first tick above 1.0 with the cursor set blanked, but the sprite branch needed level > 1.001, so a zoom settling in (1.0, 1.001] showed no pointer at all. The sprite branch now covers any level above 1.0. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TdjopXZfsUiesYxYLYHEdH
…ointer scheme changes (#494) refreshShape clamped any cursor over 64 px to 32 px while keeping the native hotspot, so large accessibility pointers drew tiny and centred hotspots sat away from the click point. The shape canvas now grows with the pointer up to 256 px, and a larger shape scales with its hotspot (FitSpriteShape, tested). The crosshair keeps its 64 px canvas. The blanker's shape copies were taken once at construction, so after a pointer scheme or size change the sprite drew the old one until Wind restarted. WM_SETTINGCHANGE / SPI_SETCURSORS now marks them stale, and the next idle tick re-takes them (CursorBlanker::recapture, on the worker behind any queued restore) and makes the sprite repaint. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TdjopXZfsUiesYxYLYHEdH
…ve 1x (#494) The legacy sprite branch already runs at level > 1.0; the panel branch in presentCursor and the panel freeze in MapPointer still used 1.001, so a zoom settling just above 1.0 with a panel open got the sprite under the panel. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TdjopXZfsUiesYxYLYHEdH
…gain (#494) The edge clamp (finding from the code review, not a field report) held the drawn cursor on the last pixel, so part of it always stayed visible at the right and bottom edges while zoomed. Back to the old behaviour, which hides it fully like 1x. The Inspect clip restore from the same commit stays. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TdjopXZfsUiesYxYLYHEdH
The 1 px edge clip (#240) exists for the contested outermost pixel at the left/top edge, but it inset all four sides, so while zoomed the pointer could never reach the last column or row and part of the cursor stayed visible at the right and bottom edges in both mouse tracking modes (owner field report). Right and bottom are open again; the cursor slides off the screen there as at 1x. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TdjopXZfsUiesYxYLYHEdH
Reverts the revert: the clamp was not what kept the cursor visible at the right and bottom edges (that was the edge clip), and it keeps welds, Inspect clicks and warps off a monitor to the right. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TdjopXZfsUiesYxYLYHEdH
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.
Closes #494. Fixes from the 2026-10-16 full code review (research/wind/2026-10-16-full-code-review.md), each finding adversarially verified, each diff reviewed by a second agent with follow-ups applied.
Commits:
Gates: build.bat check, build.bat test, Playwright and test:rules pass on this branch and on the combined test build (669 unit tests, 212 Playwright). Combined build deployed signed for owner testing.
🤖 Generated with Claude Code
https://claude.ai/code/session_01TdjopXZfsUiesYxYLYHEdH