fix: don't clear ime_last_event when a key is UP #6388
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.
Issue
When certain keys [1] are pressed and held before a previously held key is released, the key up event from the previously held key will prevent the new key from repeating. More details in #4061.
Approach
The immediate reason of this is that the key up event clears
ime_last_event
which subsequently clearsime_state
hence breaks the logic guarded by this comment:Since, IMO, IME events are generally associated with key being pressed down, I'm adding a simple check in
key_common
to prevent the event from being cleared by a key up event.Technically there're other places that clear
ime_last_event
, but I'm limiting my change to the immediate blast radius of the issue for simplicity.Test Plan
cargo test --all
k
-> holdingj
-> releasingk
.[1] - b, f, j, m, p, q, v, x to be exact. The accent menu won't be loaded for these characters on macOS anyway.