fix(engine): swallow game-mutating hotkeys during pointer drags #185

Merged
funman300 merged 1 commits from fix/keyboard-during-drag into master 2026-07-14 18:49:18 +00:00

1 Commits

Author SHA1 Message Date
funman300 5430d4c3ab fix(engine): swallow game-mutating hotkeys during pointer drags
Test / fmt (pull_request) Successful in 6s
Test / test (pull_request) Successful in 4m43s
U (undo), N (new game), Z (zen), D/Space (draw) and G (forfeit) were
not gated on an active drag, so pressing one mid-drag fired a
StateChangedEvent whose card re-sync inserted a `CardAnim` on the
dragged cards — fighting `follow_drag`'s per-frame Transform writes
(jittering XY, animated Z) and leaving `DragState` origin indices
stale against the mutated state.

`handle_keyboard_core` and `handle_keyboard_forfeit` now reuse the
mutual-exclusion guard `handle_selection_keys` already documents: skip
while `DragState` is non-idle, unless it is the keyboard-lift sentinel
(`KEYBOARD_DRAG_TOUCH_ID`), whose lift is already dropped cleanly by
`clear_selection_on_state_change`.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-14 11:35:47 -07:00