Skip to content

Commit

Permalink
Fix Emits of Additional ANSI Characters
Browse files Browse the repository at this point in the history
This commit ensures that ANSI chars won't be emitted when pressing
non-standard modifier keys.

Fixes #4975
  • Loading branch information
schrieveslaach committed Sep 26, 2024
1 parent 2b76c63 commit 8d41379
Showing 1 changed file with 20 additions and 1 deletion.
21 changes: 20 additions & 1 deletion window/src/os/x11/keyboard.rs
Original file line number Diff line number Diff line change
Expand Up @@ -396,7 +396,13 @@ impl KeyboardWithFallback {
}
_ => sym,
}
} else if kc.is_none() && key_code_from_sym.is_none() {
} else if kc.is_none()
&& key_code_from_sym.is_none()
// Make sure that non-standard modifier keys of Neo2 layout are not mapped
// to a fallback because that would result in extra emitions of the
// original ANSI characters
&& !Self::is_keysym_iso_modifier(xsym)
{
// Not sure if this is a good idea, see
// <https://github.com/wez/wezterm/issues/4910> for context.
match fallback_feed {
Expand Down Expand Up @@ -457,6 +463,19 @@ impl KeyboardWithFallback {
}
}

fn is_keysym_iso_modifier(xsym: xkbcommon::xkb::Keysym) -> bool {
use xkbcommon::xkb::Keysym;
matches!(
xsym,
Keysym::ISO_Level3_Lock
| Keysym::ISO_Level3_Shift
| Keysym::ISO_Level5_Lock
| Keysym::ISO_Level5_Shift
| Keysym::ISO_Level3_Latch
| Keysym::ISO_Level5_Latch
)
}

fn mod_is_active(&self, modifier: &str) -> bool {
// [TODO] consider state Depressed & consumed mods
self.selected
Expand Down

0 comments on commit 8d41379

Please sign in to comment.