Fix F10 and Alt+F handling on Windows (#24745)
Closes #24744 and should also fix #17819 The change is split into two commits, first one adds F10 handling (it needs to be handled inside `parse_syskeydown_msg_keystroke`, the second one properly handles `Alt+Fn` combinations, this also needs to happen in `parse_syskeydown_msg_keystroke` and is similar to a fragment inside `parse_keydown_msg_keystroke` Release Notes: - Fixes F10 and Alt+Fn handling on windows
This commit is contained in:
parent
58491807a4
commit
8b088b3985
1 changed files with 32 additions and 7 deletions
|
@ -1201,14 +1201,23 @@ fn handle_system_theme_changed(
|
||||||
|
|
||||||
fn parse_syskeydown_msg_keystroke(wparam: WPARAM) -> Option<Keystroke> {
|
fn parse_syskeydown_msg_keystroke(wparam: WPARAM) -> Option<Keystroke> {
|
||||||
let modifiers = current_modifiers();
|
let modifiers = current_modifiers();
|
||||||
if !modifiers.alt {
|
|
||||||
// on Windows, F10 can trigger this event, not just the alt key
|
|
||||||
// and we just don't care about F10
|
|
||||||
return None;
|
|
||||||
}
|
|
||||||
|
|
||||||
let vk_code = wparam.loword();
|
let vk_code = wparam.loword();
|
||||||
|
|
||||||
|
// on Windows, F10 can trigger this event, not just the alt key,
|
||||||
|
// so when F10 was pressed, handle only it
|
||||||
|
if !modifiers.alt {
|
||||||
|
if vk_code == VK_F10.0 {
|
||||||
|
let offset = vk_code - VK_F1.0;
|
||||||
|
return Some(Keystroke {
|
||||||
|
modifiers,
|
||||||
|
key: format!("f{}", offset + 1),
|
||||||
|
key_char: None,
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
return None;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
let key = match VIRTUAL_KEY(vk_code) {
|
let key = match VIRTUAL_KEY(vk_code) {
|
||||||
VK_BACK => "backspace",
|
VK_BACK => "backspace",
|
||||||
VK_RETURN => "enter",
|
VK_RETURN => "enter",
|
||||||
|
@ -1226,7 +1235,23 @@ fn parse_syskeydown_msg_keystroke(wparam: WPARAM) -> Option<Keystroke> {
|
||||||
VK_ESCAPE => "escape",
|
VK_ESCAPE => "escape",
|
||||||
VK_INSERT => "insert",
|
VK_INSERT => "insert",
|
||||||
VK_DELETE => "delete",
|
VK_DELETE => "delete",
|
||||||
_ => return basic_vkcode_to_string(vk_code, modifiers),
|
_ => {
|
||||||
|
let basic_key = basic_vkcode_to_string(vk_code, modifiers);
|
||||||
|
if basic_key.is_some() {
|
||||||
|
return basic_key;
|
||||||
|
} else {
|
||||||
|
if vk_code >= VK_F1.0 && vk_code <= VK_F24.0 {
|
||||||
|
let offset = vk_code - VK_F1.0;
|
||||||
|
return Some(Keystroke {
|
||||||
|
modifiers,
|
||||||
|
key: format!("f{}", offset + 1),
|
||||||
|
key_char: None,
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
return None;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
.to_owned();
|
.to_owned();
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue