From ac19fdfc650454148512ff9827a91fec679cc32a Mon Sep 17 00:00:00 2001 From: Bruce Mitchener Date: Sun, 9 Nov 2025 11:59:30 +0700 Subject: [PATCH] Update to `keyboard-types` 0.8.3; migrate to `NamedKey` across platforms - Replace deprecated `Key::` usages with `Key::Named(NamedKey::)` - Map unidentified and dead keys to `Key::Named(NamedKey::Unidentified)` and `Key::Named(NamedKey::Dead)` - Keep `Key::Character(String)` for printable characters - Update platform keymaps (macOS, X11, Windows) to 0.8 API keyboard-types 0.8 moved non-character keys into `NamedKey`. This adapts the platform mappings to the new API, aligning emitted `KeyboardEvent.key` with the spec-compliant representation. --- Cargo.toml | 2 +- src/macos/keyboard.rs | 86 ++++++++++----------- src/win/keyboard.rs | 172 ++++++++++++++++++++--------------------- src/x11/keyboard.rs | 174 +++++++++++++++++++++--------------------- 4 files changed, 217 insertions(+), 217 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 2d65e460..a5fcb170 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -19,7 +19,7 @@ default = [] opengl = ["uuid", "x11/glx"] [dependencies] -keyboard-types = { version = "0.6.1", default-features = false } +keyboard-types = { version = "0.8.3", default-features = false } raw-window-handle = "0.5" [target.'cfg(target_os="linux")'.dependencies] diff --git a/src/macos/keyboard.rs b/src/macos/keyboard.rs index 18f3bfe5..431f5405 100644 --- a/src/macos/keyboard.rs +++ b/src/macos/keyboard.rs @@ -23,7 +23,7 @@ use std::cell::Cell; use cocoa::appkit::{NSEvent, NSEventModifierFlags, NSEventType}; use cocoa::base::id; use cocoa::foundation::NSString; -use keyboard_types::{Code, Key, KeyState, KeyboardEvent, Modifiers}; +use keyboard_types::{Code, Key, KeyState, KeyboardEvent, Modifiers, NamedKey}; use objc::{msg_send, sel, sel_impl}; use crate::keyboard::code_to_location; @@ -198,50 +198,50 @@ fn key_code_to_code(key_code: u16) -> Code { /// NativeKeyToDOMKeyName.h. fn code_to_key(code: Code) -> Option { Some(match code { - Code::Escape => Key::Escape, - Code::ShiftLeft | Code::ShiftRight => Key::Shift, - Code::AltLeft | Code::AltRight => Key::Alt, - Code::MetaLeft | Code::MetaRight => Key::Meta, - Code::ControlLeft | Code::ControlRight => Key::Control, - Code::CapsLock => Key::CapsLock, + Code::Escape => Key::Named(NamedKey::Escape), + Code::ShiftLeft | Code::ShiftRight => Key::Named(NamedKey::Shift), + Code::AltLeft | Code::AltRight => Key::Named(NamedKey::Alt), + Code::MetaLeft | Code::MetaRight => Key::Named(NamedKey::Meta), + Code::ControlLeft | Code::ControlRight => Key::Named(NamedKey::Control), + Code::CapsLock => Key::Named(NamedKey::CapsLock), // kVK_ANSI_KeypadClear - Code::NumLock => Key::Clear, - Code::Fn => Key::Fn, - Code::F1 => Key::F1, - Code::F2 => Key::F2, - Code::F3 => Key::F3, - Code::F4 => Key::F4, - Code::F5 => Key::F5, - Code::F6 => Key::F6, - Code::F7 => Key::F7, - Code::F8 => Key::F8, - Code::F9 => Key::F9, - Code::F10 => Key::F10, - Code::F11 => Key::F11, - Code::F12 => Key::F12, - Code::Pause => Key::Pause, - Code::ScrollLock => Key::ScrollLock, - Code::PrintScreen => Key::PrintScreen, - Code::Insert => Key::Insert, - Code::Delete => Key::Delete, - Code::Tab => Key::Tab, - Code::Backspace => Key::Backspace, - Code::ContextMenu => Key::ContextMenu, + Code::NumLock => Key::Named(NamedKey::Clear), + Code::Fn => Key::Named(NamedKey::Fn), + Code::F1 => Key::Named(NamedKey::F1), + Code::F2 => Key::Named(NamedKey::F2), + Code::F3 => Key::Named(NamedKey::F3), + Code::F4 => Key::Named(NamedKey::F4), + Code::F5 => Key::Named(NamedKey::F5), + Code::F6 => Key::Named(NamedKey::F6), + Code::F7 => Key::Named(NamedKey::F7), + Code::F8 => Key::Named(NamedKey::F8), + Code::F9 => Key::Named(NamedKey::F9), + Code::F10 => Key::Named(NamedKey::F10), + Code::F11 => Key::Named(NamedKey::F11), + Code::F12 => Key::Named(NamedKey::F12), + Code::Pause => Key::Named(NamedKey::Pause), + Code::ScrollLock => Key::Named(NamedKey::ScrollLock), + Code::PrintScreen => Key::Named(NamedKey::PrintScreen), + Code::Insert => Key::Named(NamedKey::Insert), + Code::Delete => Key::Named(NamedKey::Delete), + Code::Tab => Key::Named(NamedKey::Tab), + Code::Backspace => Key::Named(NamedKey::Backspace), + Code::ContextMenu => Key::Named(NamedKey::ContextMenu), // kVK_JIS_Kana - Code::Lang1 => Key::KanjiMode, + Code::Lang1 => Key::Named(NamedKey::KanjiMode), // kVK_JIS_Eisu - Code::Lang2 => Key::Eisu, - Code::Home => Key::Home, - Code::End => Key::End, - Code::PageUp => Key::PageUp, - Code::PageDown => Key::PageDown, - Code::ArrowLeft => Key::ArrowLeft, - Code::ArrowRight => Key::ArrowRight, - Code::ArrowUp => Key::ArrowUp, - Code::ArrowDown => Key::ArrowDown, - Code::Enter => Key::Enter, - Code::NumpadEnter => Key::Enter, - Code::Help => Key::Help, + Code::Lang2 => Key::Named(NamedKey::Eisu), + Code::Home => Key::Named(NamedKey::Home), + Code::End => Key::Named(NamedKey::End), + Code::PageUp => Key::Named(NamedKey::PageUp), + Code::PageDown => Key::Named(NamedKey::PageDown), + Code::ArrowLeft => Key::Named(NamedKey::ArrowLeft), + Code::ArrowRight => Key::Named(NamedKey::ArrowRight), + Code::ArrowUp => Key::Named(NamedKey::ArrowUp), + Code::ArrowDown => Key::Named(NamedKey::ArrowDown), + Code::Enter => Key::Named(NamedKey::Enter), + Code::NumpadEnter => Key::Named(NamedKey::Enter), + Code::Help => Key::Named(NamedKey::Help), _ => return None, }) } @@ -327,7 +327,7 @@ impl KeyboardState { Key::Character(chars_ignoring) } else { // There may be more heroic things we can do here. - Key::Unidentified + Key::Named(NamedKey::Unidentified) } } }; diff --git a/src/win/keyboard.rs b/src/win/keyboard.rs index ed696ccd..2e7eb9fa 100644 --- a/src/win/keyboard.rs +++ b/src/win/keyboard.rs @@ -22,7 +22,7 @@ use std::collections::{HashMap, HashSet}; use std::mem; use std::ops::RangeInclusive; -use keyboard_types::{Code, Key, KeyState, KeyboardEvent, Location, Modifiers}; +use keyboard_types::{Code, Key, KeyState, KeyboardEvent, Location, Modifiers, NamedKey}; use winapi::shared::minwindef::{HKL, INT, LPARAM, UINT, WPARAM}; use winapi::shared::ntdef::SHORT; @@ -260,104 +260,104 @@ fn scan_to_code(scan_code: u32) -> Code { fn vk_to_key(vk: VkCode) -> Option { Some(match vk as INT { - VK_CANCEL => Key::Cancel, - VK_BACK => Key::Backspace, - VK_TAB => Key::Tab, - VK_CLEAR => Key::Clear, - VK_RETURN => Key::Enter, - VK_SHIFT | VK_LSHIFT | VK_RSHIFT => Key::Shift, - VK_CONTROL | VK_LCONTROL | VK_RCONTROL => Key::Control, - VK_MENU | VK_LMENU | VK_RMENU => Key::Alt, - VK_PAUSE => Key::Pause, - VK_CAPITAL => Key::CapsLock, + VK_CANCEL => Key::Named(NamedKey::Cancel), + VK_BACK => Key::Named(NamedKey::Backspace), + VK_TAB => Key::Named(NamedKey::Tab), + VK_CLEAR => Key::Named(NamedKey::Clear), + VK_RETURN => Key::Named(NamedKey::Enter), + VK_SHIFT | VK_LSHIFT | VK_RSHIFT => Key::Named(NamedKey::Shift), + VK_CONTROL | VK_LCONTROL | VK_RCONTROL => Key::Named(NamedKey::Control), + VK_MENU | VK_LMENU | VK_RMENU => Key::Named(NamedKey::Alt), + VK_PAUSE => Key::Named(NamedKey::Pause), + VK_CAPITAL => Key::Named(NamedKey::CapsLock), // TODO: disambiguate kana and hangul? same vk - VK_KANA => Key::KanaMode, - VK_JUNJA => Key::JunjaMode, - VK_FINAL => Key::FinalMode, - VK_KANJI => Key::KanjiMode, - VK_ESCAPE => Key::Escape, - VK_NONCONVERT => Key::NonConvert, - VK_ACCEPT => Key::Accept, - VK_PRIOR => Key::PageUp, - VK_NEXT => Key::PageDown, - VK_END => Key::End, - VK_HOME => Key::Home, - VK_LEFT => Key::ArrowLeft, - VK_UP => Key::ArrowUp, - VK_RIGHT => Key::ArrowRight, - VK_DOWN => Key::ArrowDown, - VK_SELECT => Key::Select, - VK_PRINT => Key::Print, - VK_EXECUTE => Key::Execute, - VK_SNAPSHOT => Key::PrintScreen, - VK_INSERT => Key::Insert, - VK_DELETE => Key::Delete, - VK_HELP => Key::Help, - VK_LWIN | VK_RWIN => Key::Meta, - VK_APPS => Key::ContextMenu, - VK_SLEEP => Key::Standby, - VK_F1 => Key::F1, - VK_F2 => Key::F2, - VK_F3 => Key::F3, - VK_F4 => Key::F4, - VK_F5 => Key::F5, - VK_F6 => Key::F6, - VK_F7 => Key::F7, - VK_F8 => Key::F8, - VK_F9 => Key::F9, - VK_F10 => Key::F10, - VK_F11 => Key::F11, - VK_F12 => Key::F12, - VK_NUMLOCK => Key::NumLock, - VK_SCROLL => Key::ScrollLock, - VK_BROWSER_BACK => Key::BrowserBack, - VK_BROWSER_FORWARD => Key::BrowserForward, - VK_BROWSER_REFRESH => Key::BrowserRefresh, - VK_BROWSER_STOP => Key::BrowserStop, - VK_BROWSER_SEARCH => Key::BrowserSearch, - VK_BROWSER_FAVORITES => Key::BrowserFavorites, - VK_BROWSER_HOME => Key::BrowserHome, - VK_VOLUME_MUTE => Key::AudioVolumeMute, - VK_VOLUME_DOWN => Key::AudioVolumeDown, - VK_VOLUME_UP => Key::AudioVolumeUp, - VK_MEDIA_NEXT_TRACK => Key::MediaTrackNext, - VK_MEDIA_PREV_TRACK => Key::MediaTrackPrevious, - VK_MEDIA_STOP => Key::MediaStop, - VK_MEDIA_PLAY_PAUSE => Key::MediaPlayPause, - VK_LAUNCH_MAIL => Key::LaunchMail, - VK_LAUNCH_MEDIA_SELECT => Key::LaunchMediaPlayer, - VK_LAUNCH_APP1 => Key::LaunchApplication1, - VK_LAUNCH_APP2 => Key::LaunchApplication2, - VK_OEM_ATTN => Key::Alphanumeric, - VK_CONVERT => Key::Convert, - VK_MODECHANGE => Key::ModeChange, - VK_PROCESSKEY => Key::Process, - VK_ATTN => Key::Attn, - VK_CRSEL => Key::CrSel, - VK_EXSEL => Key::ExSel, - VK_EREOF => Key::EraseEof, - VK_PLAY => Key::Play, - VK_ZOOM => Key::ZoomToggle, - VK_OEM_CLEAR => Key::Clear, + VK_KANA => Key::Named(NamedKey::KanaMode), + VK_JUNJA => Key::Named(NamedKey::JunjaMode), + VK_FINAL => Key::Named(NamedKey::FinalMode), + VK_KANJI => Key::Named(NamedKey::KanjiMode), + VK_ESCAPE => Key::Named(NamedKey::Escape), + VK_NONCONVERT => Key::Named(NamedKey::NonConvert), + VK_ACCEPT => Key::Named(NamedKey::Accept), + VK_PRIOR => Key::Named(NamedKey::PageUp), + VK_NEXT => Key::Named(NamedKey::PageDown), + VK_END => Key::Named(NamedKey::End), + VK_HOME => Key::Named(NamedKey::Home), + VK_LEFT => Key::Named(NamedKey::ArrowLeft), + VK_UP => Key::Named(NamedKey::ArrowUp), + VK_RIGHT => Key::Named(NamedKey::ArrowRight), + VK_DOWN => Key::Named(NamedKey::ArrowDown), + VK_SELECT => Key::Named(NamedKey::Select), + VK_PRINT => Key::Named(NamedKey::Print), + VK_EXECUTE => Key::Named(NamedKey::Execute), + VK_SNAPSHOT => Key::Named(NamedKey::PrintScreen), + VK_INSERT => Key::Named(NamedKey::Insert), + VK_DELETE => Key::Named(NamedKey::Delete), + VK_HELP => Key::Named(NamedKey::Help), + VK_LWIN | VK_RWIN => Key::Named(NamedKey::Meta), + VK_APPS => Key::Named(NamedKey::ContextMenu), + VK_SLEEP => Key::Named(NamedKey::Standby), + VK_F1 => Key::Named(NamedKey::F1), + VK_F2 => Key::Named(NamedKey::F2), + VK_F3 => Key::Named(NamedKey::F3), + VK_F4 => Key::Named(NamedKey::F4), + VK_F5 => Key::Named(NamedKey::F5), + VK_F6 => Key::Named(NamedKey::F6), + VK_F7 => Key::Named(NamedKey::F7), + VK_F8 => Key::Named(NamedKey::F8), + VK_F9 => Key::Named(NamedKey::F9), + VK_F10 => Key::Named(NamedKey::F10), + VK_F11 => Key::Named(NamedKey::F11), + VK_F12 => Key::Named(NamedKey::F12), + VK_NUMLOCK => Key::Named(NamedKey::NumLock), + VK_SCROLL => Key::Named(NamedKey::ScrollLock), + VK_BROWSER_BACK => Key::Named(NamedKey::BrowserBack), + VK_BROWSER_FORWARD => Key::Named(NamedKey::BrowserForward), + VK_BROWSER_REFRESH => Key::Named(NamedKey::BrowserRefresh), + VK_BROWSER_STOP => Key::Named(NamedKey::BrowserStop), + VK_BROWSER_SEARCH => Key::Named(NamedKey::BrowserSearch), + VK_BROWSER_FAVORITES => Key::Named(NamedKey::BrowserFavorites), + VK_BROWSER_HOME => Key::Named(NamedKey::BrowserHome), + VK_VOLUME_MUTE => Key::Named(NamedKey::AudioVolumeMute), + VK_VOLUME_DOWN => Key::Named(NamedKey::AudioVolumeDown), + VK_VOLUME_UP => Key::Named(NamedKey::AudioVolumeUp), + VK_MEDIA_NEXT_TRACK => Key::Named(NamedKey::MediaTrackNext), + VK_MEDIA_PREV_TRACK => Key::Named(NamedKey::MediaTrackPrevious), + VK_MEDIA_STOP => Key::Named(NamedKey::MediaStop), + VK_MEDIA_PLAY_PAUSE => Key::Named(NamedKey::MediaPlayPause), + VK_LAUNCH_MAIL => Key::Named(NamedKey::LaunchMail), + VK_LAUNCH_MEDIA_SELECT => Key::Named(NamedKey::LaunchMediaPlayer), + VK_LAUNCH_APP1 => Key::Named(NamedKey::LaunchApplication1), + VK_LAUNCH_APP2 => Key::Named(NamedKey::LaunchApplication2), + VK_OEM_ATTN => Key::Named(NamedKey::Alphanumeric), + VK_CONVERT => Key::Named(NamedKey::Convert), + VK_MODECHANGE => Key::Named(NamedKey::ModeChange), + VK_PROCESSKEY => Key::Named(NamedKey::Process), + VK_ATTN => Key::Named(NamedKey::Attn), + VK_CRSEL => Key::Named(NamedKey::CrSel), + VK_EXSEL => Key::Named(NamedKey::ExSel), + VK_EREOF => Key::Named(NamedKey::EraseEof), + VK_PLAY => Key::Named(NamedKey::Play), + VK_ZOOM => Key::Named(NamedKey::ZoomToggle), + VK_OEM_CLEAR => Key::Named(NamedKey::Clear), _ => return None, }) } fn code_unit_to_key(code_unit: u32) -> Key { match code_unit { - 0x8 | 0x7F => Key::Backspace, - 0x9 => Key::Tab, - 0xA | 0xD => Key::Enter, - 0x1B => Key::Escape, + 0x8 | 0x7F => Key::Named(NamedKey::Backspace), + 0x9 => Key::Named(NamedKey::Tab), + 0xA | 0xD => Key::Named(NamedKey::Enter), + 0x1B => Key::Named(NamedKey::Escape), _ if code_unit >= 0x20 => { if let Some(c) = std::char::from_u32(code_unit) { Key::Character(c.to_string()) } else { // UTF-16 error, very unlikely - Key::Unidentified + Key::Named(NamedKey::Unidentified) } } - _ => Key::Unidentified, + _ => Key::Named(NamedKey::Unidentified), } } @@ -672,7 +672,7 @@ impl KeyboardState { } else { let mapped = self.map_vk(vk); if mapped >= (1 << 31) { - Key::Dead + Key::Named(NamedKey::Dead) } else { code_unit_to_key(mapped) } diff --git a/src/x11/keyboard.rs b/src/x11/keyboard.rs index 4985e641..442e18cf 100644 --- a/src/x11/keyboard.rs +++ b/src/x11/keyboard.rs @@ -99,105 +99,105 @@ fn code_to_key(code: Code, m: Modifiers) -> Key { Code::Space => a(" "), - Code::Escape => Key::Escape, - Code::Backspace => Key::Backspace, - Code::Tab => Key::Tab, - Code::Enter => Key::Enter, - Code::ControlLeft => Key::Control, - Code::ShiftLeft => Key::Shift, - Code::ShiftRight => Key::Shift, + Code::Escape => Key::Named(NamedKey::Escape), + Code::Backspace => Key::Named(NamedKey::Backspace), + Code::Tab => Key::Named(NamedKey::Tab), + Code::Enter => Key::Named(NamedKey::Enter), + Code::ControlLeft => Key::Named(NamedKey::Control), + Code::ShiftLeft => Key::Named(NamedKey::Shift), + Code::ShiftRight => Key::Named(NamedKey::Shift), Code::NumpadMultiply => a("*"), - Code::AltLeft => Key::Alt, - Code::CapsLock => Key::CapsLock, - Code::F1 => Key::F1, - Code::F2 => Key::F2, - Code::F3 => Key::F3, - Code::F4 => Key::F4, - Code::F5 => Key::F5, - Code::F6 => Key::F6, - Code::F7 => Key::F7, - Code::F8 => Key::F8, - Code::F9 => Key::F9, - Code::F10 => Key::F10, - Code::NumLock => Key::NumLock, - Code::ScrollLock => Key::ScrollLock, - Code::Numpad0 => n(m, Key::Insert, "0"), - Code::Numpad1 => n(m, Key::End, "1"), - Code::Numpad2 => n(m, Key::ArrowDown, "2"), - Code::Numpad3 => n(m, Key::PageDown, "3"), - Code::Numpad4 => n(m, Key::ArrowLeft, "4"), - Code::Numpad5 => n(m, Key::Clear, "5"), - Code::Numpad6 => n(m, Key::ArrowRight, "6"), - Code::Numpad7 => n(m, Key::Home, "7"), - Code::Numpad8 => n(m, Key::ArrowUp, "8"), - Code::Numpad9 => n(m, Key::PageUp, "9"), + Code::AltLeft => Key::Named(NamedKey::Alt), + Code::CapsLock => Key::Named(NamedKey::CapsLock), + Code::F1 => Key::Named(NamedKey::F1), + Code::F2 => Key::Named(NamedKey::F2), + Code::F3 => Key::Named(NamedKey::F3), + Code::F4 => Key::Named(NamedKey::F4), + Code::F5 => Key::Named(NamedKey::F5), + Code::F6 => Key::Named(NamedKey::F6), + Code::F7 => Key::Named(NamedKey::F7), + Code::F8 => Key::Named(NamedKey::F8), + Code::F9 => Key::Named(NamedKey::F9), + Code::F10 => Key::Named(NamedKey::F10), + Code::NumLock => Key::Named(NamedKey::NumLock), + Code::ScrollLock => Key::Named(NamedKey::ScrollLock), + Code::Numpad0 => n(m, Key::Named(NamedKey::Insert), "0"), + Code::Numpad1 => n(m, Key::Named(NamedKey::End), "1"), + Code::Numpad2 => n(m, Key::Named(NamedKey::ArrowDown), "2"), + Code::Numpad3 => n(m, Key::Named(NamedKey::PageDown), "3"), + Code::Numpad4 => n(m, Key::Named(NamedKey::ArrowLeft), "4"), + Code::Numpad5 => n(m, Key::Named(NamedKey::Clear), "5"), + Code::Numpad6 => n(m, Key::Named(NamedKey::ArrowRight), "6"), + Code::Numpad7 => n(m, Key::Named(NamedKey::Home), "7"), + Code::Numpad8 => n(m, Key::Named(NamedKey::ArrowUp), "8"), + Code::Numpad9 => n(m, Key::Named(NamedKey::PageUp), "9"), Code::NumpadSubtract => a("-"), Code::NumpadAdd => a("+"), Code::NumpadDecimal => n(m, Key::Delete, "."), Code::IntlBackslash => s(m, "\\", "|"), - Code::F11 => Key::F11, - Code::F12 => Key::F12, + Code::F11 => Key::Named(NamedKey::F11), + Code::F12 => Key::Named(NamedKey::F12), // This mapping is based on the picture in the w3c spec. Code::IntlRo => a("\\"), - Code::Convert => Key::Convert, - Code::KanaMode => Key::KanaMode, - Code::NonConvert => Key::NonConvert, - Code::NumpadEnter => Key::Enter, - Code::ControlRight => Key::Control, + Code::Convert => Key::Named(NamedKey::Convert), + Code::KanaMode => Key::Named(NamedKey::KanaMode), + Code::NonConvert => Key::Named(NamedKey::NonConvert), + Code::NumpadEnter => Key::Named(NamedKey::Enter), + Code::ControlRight => Key::Named(NamedKey::Control), Code::NumpadDivide => a("/"), - Code::PrintScreen => Key::PrintScreen, - Code::AltRight => Key::Alt, - Code::Home => Key::Home, - Code::ArrowUp => Key::ArrowUp, - Code::PageUp => Key::PageUp, - Code::ArrowLeft => Key::ArrowLeft, - Code::ArrowRight => Key::ArrowRight, - Code::End => Key::End, - Code::ArrowDown => Key::ArrowDown, - Code::PageDown => Key::PageDown, - Code::Insert => Key::Insert, - Code::Delete => Key::Delete, - Code::AudioVolumeMute => Key::AudioVolumeMute, - Code::AudioVolumeDown => Key::AudioVolumeDown, - Code::AudioVolumeUp => Key::AudioVolumeUp, + Code::PrintScreen => Key::Named(NamedKey::PrintScreen), + Code::AltRight => Key::Named(NamedKey::Alt), + Code::Home => Key::Named(NamedKey::Home), + Code::ArrowUp => Key::Named(NamedKey::ArrowUp), + Code::PageUp => Key::Named(NamedKey::PageUp), + Code::ArrowLeft => Key::Named(NamedKey::ArrowLeft), + Code::ArrowRight => Key::Named(NamedKey::ArrowRight), + Code::End => Key::Named(NamedKey::End), + Code::ArrowDown => Key::Named(NamedKey::ArrowDown), + Code::PageDown => Key::Named(NamedKey::PageDown), + Code::Insert => Key::Named(NamedKey::Insert), + Code::Delete => Key::Named(NamedKey::Delete), + Code::AudioVolumeMute => Key::Named(NamedKey::AudioVolumeMute), + Code::AudioVolumeDown => Key::Named(NamedKey::AudioVolumeDown), + Code::AudioVolumeUp => Key::Named(NamedKey::AudioVolumeUp), Code::NumpadEqual => a("="), - Code::Pause => Key::Pause, + Code::Pause => Key::Named(NamedKey::Pause), Code::NumpadComma => a(","), - Code::Lang1 => Key::HangulMode, - Code::Lang2 => Key::HanjaMode, + Code::Lang1 => Key::Named(NamedKey::HangulMode), + Code::Lang2 => Key::Named(NamedKey::HanjaMode), Code::IntlYen => a("¥"), - Code::MetaLeft => Key::Meta, - Code::MetaRight => Key::Meta, - Code::ContextMenu => Key::ContextMenu, - Code::BrowserStop => Key::BrowserStop, - Code::Again => Key::Again, - Code::Props => Key::Props, - Code::Undo => Key::Undo, - Code::Select => Key::Select, - Code::Copy => Key::Copy, - Code::Open => Key::Open, - Code::Paste => Key::Paste, - Code::Find => Key::Find, - Code::Cut => Key::Cut, - Code::Help => Key::Help, - Code::LaunchApp2 => Key::LaunchApplication2, - Code::WakeUp => Key::WakeUp, - Code::LaunchApp1 => Key::LaunchApplication1, - Code::LaunchMail => Key::LaunchMail, - Code::BrowserFavorites => Key::BrowserFavorites, - Code::BrowserBack => Key::BrowserBack, - Code::BrowserForward => Key::BrowserForward, - Code::Eject => Key::Eject, - Code::MediaTrackNext => Key::MediaTrackNext, - Code::MediaPlayPause => Key::MediaPlayPause, - Code::MediaTrackPrevious => Key::MediaTrackPrevious, - Code::MediaStop => Key::MediaStop, - Code::MediaSelect => Key::LaunchMediaPlayer, - Code::BrowserHome => Key::BrowserHome, - Code::BrowserRefresh => Key::BrowserRefresh, - Code::BrowserSearch => Key::BrowserSearch, + Code::MetaLeft => Key::Named(NamedKey::Meta), + Code::MetaRight => Key::Named(NamedKey::Meta), + Code::ContextMenu => Key::Named(NamedKey::ContextMenu), + Code::BrowserStop => Key::Named(NamedKey::BrowserStop), + Code::Again => Key::Named(NamedKey::Again), + Code::Props => Key::Named(NamedKey::Props), + Code::Undo => Key::Named(NamedKey::Undo), + Code::Select => Key::Named(NamedKey::Select), + Code::Copy => Key::Named(NamedKey::Copy), + Code::Open => Key::Named(NamedKey::Open), + Code::Paste => Key::Named(NamedKey::Paste), + Code::Find => Key::Named(NamedKey::Find), + Code::Cut => Key::Named(NamedKey::Cut), + Code::Help => Key::Named(NamedKey::Help), + Code::LaunchApp2 => Key::Named(NamedKey::LaunchApplication2), + Code::WakeUp => Key::Named(NamedKey::WakeUp), + Code::LaunchApp1 => Key::Named(NamedKey::LaunchApplication1), + Code::LaunchMail => Key::Named(NamedKey::LaunchMail), + Code::BrowserFavorites => Key::Named(NamedKey::BrowserFavorites), + Code::BrowserBack => Key::Named(NamedKey::BrowserBack), + Code::BrowserForward => Key::Named(NamedKey::BrowserForward), + Code::Eject => Key::Named(NamedKey::Eject), + Code::MediaTrackNext => Key::Named(NamedKey::MediaTrackNext), + Code::MediaPlayPause => Key::Named(NamedKey::MediaPlayPause), + Code::MediaTrackPrevious => Key::Named(NamedKey::MediaTrackPrevious), + Code::MediaStop => Key::Named(NamedKey::MediaStop), + Code::MediaSelect => Key::Named(NamedKey::LaunchMediaPlayer), + Code::BrowserHome => Key::Named(NamedKey::BrowserHome), + Code::BrowserRefresh => Key::Named(NamedKey::BrowserRefresh), + Code::BrowserSearch => Key::Named(NamedKey::BrowserSearch), - _ => Key::Unidentified, + _ => Key::Named(NamedKey::Unidentified), } }