Modifiers { state: ModifiersState(CONTROL), pressed_mods: ModifiersKeys(0x0) }
KeyEvent {
physical_key: ControlLeft,
logical_key: Control,
text: None,
location: Left,
state: Pressed,
repeat: false,
platform_specific: KeyEventExtra {
text_with_all_modifers: None,
key_without_modifiers: Control,
},
}
Modifiers { state: ModifiersState(0x0), pressed_mods: ModifiersKeys(0x0) }
KeyEvent {
physical_key: AltRight,
logical_key: AltGraph,
text: None,
location: Right,
state: Pressed,
repeat: false,
platform_specific: KeyEventExtra {
text_with_all_modifers: None,
key_without_modifiers: AltGraph,
},
}
KeyEvent {
physical_key: AltRight,
logical_key: AltGraph,
text: None,
location: Right,
state: Pressed,
repeat: true,
platform_specific: KeyEventExtra {
text_with_all_modifers: None,
key_without_modifiers: AltGraph,
},
}
KeyEvent {
physical_key: AltRight,
logical_key: AltGraph,
text: None,
location: Right,
state: Pressed,
repeat: true,
platform_specific: KeyEventExtra {
text_with_all_modifers: None,
key_without_modifiers: AltGraph,
},
}
KeyEvent {
physical_key: AltRight,
logical_key: AltGraph,
text: None,
location: Right,
state: Pressed,
repeat: true,
platform_specific: KeyEventExtra {
text_with_all_modifers: None,
key_without_modifiers: AltGraph,
},
}
KeyEvent {
physical_key: AltRight,
logical_key: AltGraph,
text: None,
location: Right,
state: Pressed,
repeat: true,
platform_specific: KeyEventExtra {
text_with_all_modifers: None,
key_without_modifiers: AltGraph,
},
}
KeyEvent {
physical_key: KeyE,
logical_key: Character(
"€",
),
text: Some(
"€",
),
location: Standard,
state: Pressed,
repeat: false,
platform_specific: KeyEventExtra {
text_with_all_modifers: Some(
"€",
),
key_without_modifiers: Character(
"e",
),
},
}
KeyEvent {
physical_key: KeyE,
logical_key: Character(
"€",
),
text: None,
location: Standard,
state: Released,
repeat: false,
platform_specific: KeyEventExtra {
text_with_all_modifers: None,
key_without_modifiers: Character(
"e",
),
},
}
Modifiers { state: ModifiersState(CONTROL), pressed_mods: ModifiersKeys(0x0) }
KeyEvent {
physical_key: AltRight,
logical_key: AltGraph,
text: None,
location: Right,
state: Released,
repeat: false,
platform_specific: KeyEventExtra {
text_with_all_modifers: None,
key_without_modifiers: AltGraph,
},
}
Modifiers { state: ModifiersState(0x0), pressed_mods: ModifiersKeys(0x0) }
KeyEvent {
physical_key: ControlLeft,
logical_key: Control,
text: None,
location: Left,
state: Released,
repeat: false,
platform_specific: KeyEventExtra {
text_with_all_modifers: None,
key_without_modifiers: Control,
},
}
On Windows, when pressing a key in combination with altgr for example
ctrl+alt-gr+e, which produces€, the CTRL state is not reported correctly. Here's the log fromWindowEvent::KeyboardEvent, andWindowEvent::ModifiersChangedAs soon as
AltGraphis pressedModifiers::statestops reportingControl, and only starts reporting it again whenAltGris released. Therefore, it's impossible to determine that control is held down using the modifiers state alone.Note that there's also another, not as critical bug shown in the logs,
AltGraphis repeated, although I don't think there should be a key repeat on that since it's a modifier, I'm not even sure if it makes sense to report it as a key press at all, rather than a modifier state.This was reproduced using Neovide and Winit 0.29.0-beta.0
I think a similar issue was reported by @dhardy here in this comment #2898 (comment)