diff --git a/window/src/os/x11/keyboard.rs b/window/src/os/x11/keyboard.rs index 8fd3edeee..34b926d32 100644 --- a/window/src/os/x11/keyboard.rs +++ b/window/src/os/x11/keyboard.rs @@ -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 // for context. match fallback_feed { @@ -457,6 +463,17 @@ 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 + ) + } + fn mod_is_active(&self, modifier: &str) -> bool { // [TODO] consider state Depressed & consumed mods self.selected