fix(scene): fix vertex snap not cancelling on V key release#756
Open
bofeng-song wants to merge 1 commit into
Open
fix(scene): fix vertex snap not cancelling on V key release#756bofeng-song wants to merge 1 commit into
bofeng-song wants to merge 1 commit into
Conversation
The engine's KeyboardInputSource calls stopPropagation() on canvas keyup events, which prevents them from bubbling to document. Switch the keyup listener to capture phase so it fires top-down before the event reaches the canvas.
knoxHuang
approved these changes
Jul 15, 2026
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.
Related issue: https://zentao.sud.center/index.php?m=bug&f=view&bugID=414
Summary
Vertex snapping (hold V) could not be cancelled by releasing the V key — the snap gizmo stayed active after key release.
Root cause
The engine's
KeyboardInputSource._handleKeyboardUpcallsevent.stopPropagation()on every canvaskeyupevent. Sinceinput-bridge.jsregistered itskeyuplistener ondocument(bubble phase), the stopped propagation meant the listener never fired.In Creator this is not an issue because the engine runs inside a separate iframe/webview, so its
stopPropagation()on the inner canvas does not affect the outer document's listeners. In the CLI, the engine andinput-bridge.jsshare the same document context.Fix
Switch the
keyuplistener from a normaldocumentlistener to capture phase (addEventListener('keyup', handler, true)). Capture runs top-down (window → document → ... → canvas) before the event reaches the canvas target, so it fires before the engine can stop propagation.Test plan