Skip to content

Commit

Permalink
On macOS, fix globe key triggering assertion
Browse files Browse the repository at this point in the history
Sometimes FlagsChanged events don't carry any KeyCode information, thus
we can't create a synthetic presses events for them.

However in such cases, modifiers information is still accurate, thus
propagate it.

Fixes rust-windowing#2872.
  • Loading branch information
kchibisov committed Oct 17, 2023
1 parent 801fddb commit ecdb312
Show file tree
Hide file tree
Showing 2 changed files with 8 additions and 2 deletions.
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ And please only add new entries to the top of this list, right below the `# Unre
- Implement `AsFd`/`AsRawFd` for `EventLoop<T>` on X11 and Wayland.
- **Breaking:** Bump `ndk` version to `0.8.0`, ndk-sys to `0.5.0`, `android-activity` to `0.5.0`.
- Make `WindowBuilder` `Send + Sync`.
- On macOS, fix assertion when pressing `Globe` key.

# 0.29.1-beta

Expand Down
9 changes: 7 additions & 2 deletions src/platform_impl/macos/view.rs
Original file line number Diff line number Diff line change
Expand Up @@ -918,8 +918,13 @@ impl WinitView {

// This function was called form the flagsChanged event, which is triggered
// when the user presses/releases a modifier even if the same kind of modifier
// has already been pressed
if is_flags_changed_event {
// has already been pressed.
//
// When flags changed event has key code of zero it means that event doesn't carry any key
// event, thus we can't generate regular presses based on that. The `ModifiersChanged`
// later will work though, since the flags are attached to the event and contain valid
// information.
if is_flags_changed_event && ns_event.key_code() != 0 {
let scancode = ns_event.key_code();
let keycode = KeyCode::from_scancode(scancode as u32);

Expand Down

0 comments on commit ecdb312

Please sign in to comment.