Skip to content

feat(input): scroll-wheel zoom, click binds and safe keybind rules (#285) - #294

Merged
Maxaubert merged 9 commits into
mainfrom
feat/285-wheel-zoom
Sep 30, 2026
Merged

Maxaubert merged 9 commits into
mainfrom
feat/285-wheel-zoom

Conversation

@Maxaubert

@Maxaubert Maxaubert commented Sep 30, 2026 •

Copy link
Copy Markdown
Owner

Closes #285.

What

  • Scroll-wheel zoom: hold the chosen modifiers (never Ctrl or Shift alone) and turn the wheel. A notch zooms as far as holding the bind does in 0.1 s at the same speed slider (zoomInSpeed up, zoomOutSpeed down), so about 10 notches a second feels like holding. No separate step setting.
  • Click binds: left/right/middle click with modifiers; side buttons can carry modifiers too.
  • One safety rule set (src/keybind_rules.h, mirrored in ui/src/lib/keybindRules.js, both tested against one fixture): typing keys alone, Shift/AltGr + a typing key, Windows-reserved combos and Win shortcuts are refused with a reason. Stored binds the rules refuse are reset once, with a notice in Settings.
  • Alt/Win combos inject one mask key so Start and app menu bars do not activate.
  • A key bind is swallowed only with its modifiers held (Ctrl+F1 leaves a plain F1 alone).
  • The native Magnifier model passes each wheel notch on.

Review

A 4-area review with adversarial verification confirmed 8 findings; all fixed in 8ff5966.

Verified

  • 360 unit tests on the branch, 379 on the combined build; 70/72 Playwright tests.
  • Live on the owner's PC (signed UIAccess build, SendInput): Ctrl+Alt+wheel x3 at speed 2.7 -> 4.07x with no app scroll; plain and Ctrl wheel reach the app; Ctrl+Alt+left held zooms and the app gets no click; Win+PageUp zooms without opening Start; Alt+PageDown zooms out without activating the menu bar; plain PageUp/PageDown reach the app.
  • Not live-tested: the raw-input net for a lost click UP (needs a hook eviction), and the native Magnifier wheel path.

Notes

🤖 Generated with Claude Code

https://claude.ai/code/session_01KPUNAWcwghXdHCApcKKjSG

Maxaubert and others added 9 commits September 30, 2026 08:18
…troke for Alt/Win combos (#285)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KPUNAWcwghXdHCApcKKjSG
…d wheel capture (#285)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KPUNAWcwghXdHCApcKKjSG
…om; version 0.12.0 (#285)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KPUNAWcwghXdHCApcKKjSG
#285)

- a key bind is swallowed only with its modifiers held (Ctrl+F1 no longer eats F1)
- right-click binds with modifiers are no longer cleared by the contextmenu event
- raw-input safety net for left/right/middle click binds (lost UP)
- stored binds the rules refuse are reset once with a notice in Settings
- onboarding saves click-bind modifiers; side buttons keep their modifiers
- native Magnifier model passes every wheel notch on
- all binds are set before the hooks go live
- wheel notch = 0.1 s of holding at zoomInSpeed/zoomOutSpeed; zoomWheelStepPct removed

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KPUNAWcwghXdHCApcKKjSG
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KPUNAWcwghXdHCApcKKjSG
@Maxaubert
Maxaubert merged commit 532377a into main Sep 30, 2026
1 check passed
@Maxaubert
Maxaubert deleted the feat/285-wheel-zoom branch September 30, 2026 09:51
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.

Scroll-wheel zoom with a modifier (e.g. Ctrl+Alt+scroll)

1 participant