Skip to content

Commit ac19fdf

Browse files
Update to keyboard-types 0.8.3; migrate to NamedKey across platforms
- Replace deprecated `Key::<Variant>` usages with `Key::Named(NamedKey::<Variant>)` - 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.
1 parent 101c864 commit ac19fdf

File tree

4 files changed

+217
-217
lines changed

4 files changed

+217
-217
lines changed

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ default = []
1919
opengl = ["uuid", "x11/glx"]
2020

2121
[dependencies]
22-
keyboard-types = { version = "0.6.1", default-features = false }
22+
keyboard-types = { version = "0.8.3", default-features = false }
2323
raw-window-handle = "0.5"
2424

2525
[target.'cfg(target_os="linux")'.dependencies]

src/macos/keyboard.rs

Lines changed: 43 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ use std::cell::Cell;
2323
use cocoa::appkit::{NSEvent, NSEventModifierFlags, NSEventType};
2424
use cocoa::base::id;
2525
use cocoa::foundation::NSString;
26-
use keyboard_types::{Code, Key, KeyState, KeyboardEvent, Modifiers};
26+
use keyboard_types::{Code, Key, KeyState, KeyboardEvent, Modifiers, NamedKey};
2727
use objc::{msg_send, sel, sel_impl};
2828

2929
use crate::keyboard::code_to_location;
@@ -198,50 +198,50 @@ fn key_code_to_code(key_code: u16) -> Code {
198198
/// NativeKeyToDOMKeyName.h.
199199
fn code_to_key(code: Code) -> Option<Key> {
200200
Some(match code {
201-
Code::Escape => Key::Escape,
202-
Code::ShiftLeft | Code::ShiftRight => Key::Shift,
203-
Code::AltLeft | Code::AltRight => Key::Alt,
204-
Code::MetaLeft | Code::MetaRight => Key::Meta,
205-
Code::ControlLeft | Code::ControlRight => Key::Control,
206-
Code::CapsLock => Key::CapsLock,
201+
Code::Escape => Key::Named(NamedKey::Escape),
202+
Code::ShiftLeft | Code::ShiftRight => Key::Named(NamedKey::Shift),
203+
Code::AltLeft | Code::AltRight => Key::Named(NamedKey::Alt),
204+
Code::MetaLeft | Code::MetaRight => Key::Named(NamedKey::Meta),
205+
Code::ControlLeft | Code::ControlRight => Key::Named(NamedKey::Control),
206+
Code::CapsLock => Key::Named(NamedKey::CapsLock),
207207
// kVK_ANSI_KeypadClear
208-
Code::NumLock => Key::Clear,
209-
Code::Fn => Key::Fn,
210-
Code::F1 => Key::F1,
211-
Code::F2 => Key::F2,
212-
Code::F3 => Key::F3,
213-
Code::F4 => Key::F4,
214-
Code::F5 => Key::F5,
215-
Code::F6 => Key::F6,
216-
Code::F7 => Key::F7,
217-
Code::F8 => Key::F8,
218-
Code::F9 => Key::F9,
219-
Code::F10 => Key::F10,
220-
Code::F11 => Key::F11,
221-
Code::F12 => Key::F12,
222-
Code::Pause => Key::Pause,
223-
Code::ScrollLock => Key::ScrollLock,
224-
Code::PrintScreen => Key::PrintScreen,
225-
Code::Insert => Key::Insert,
226-
Code::Delete => Key::Delete,
227-
Code::Tab => Key::Tab,
228-
Code::Backspace => Key::Backspace,
229-
Code::ContextMenu => Key::ContextMenu,
208+
Code::NumLock => Key::Named(NamedKey::Clear),
209+
Code::Fn => Key::Named(NamedKey::Fn),
210+
Code::F1 => Key::Named(NamedKey::F1),
211+
Code::F2 => Key::Named(NamedKey::F2),
212+
Code::F3 => Key::Named(NamedKey::F3),
213+
Code::F4 => Key::Named(NamedKey::F4),
214+
Code::F5 => Key::Named(NamedKey::F5),
215+
Code::F6 => Key::Named(NamedKey::F6),
216+
Code::F7 => Key::Named(NamedKey::F7),
217+
Code::F8 => Key::Named(NamedKey::F8),
218+
Code::F9 => Key::Named(NamedKey::F9),
219+
Code::F10 => Key::Named(NamedKey::F10),
220+
Code::F11 => Key::Named(NamedKey::F11),
221+
Code::F12 => Key::Named(NamedKey::F12),
222+
Code::Pause => Key::Named(NamedKey::Pause),
223+
Code::ScrollLock => Key::Named(NamedKey::ScrollLock),
224+
Code::PrintScreen => Key::Named(NamedKey::PrintScreen),
225+
Code::Insert => Key::Named(NamedKey::Insert),
226+
Code::Delete => Key::Named(NamedKey::Delete),
227+
Code::Tab => Key::Named(NamedKey::Tab),
228+
Code::Backspace => Key::Named(NamedKey::Backspace),
229+
Code::ContextMenu => Key::Named(NamedKey::ContextMenu),
230230
// kVK_JIS_Kana
231-
Code::Lang1 => Key::KanjiMode,
231+
Code::Lang1 => Key::Named(NamedKey::KanjiMode),
232232
// kVK_JIS_Eisu
233-
Code::Lang2 => Key::Eisu,
234-
Code::Home => Key::Home,
235-
Code::End => Key::End,
236-
Code::PageUp => Key::PageUp,
237-
Code::PageDown => Key::PageDown,
238-
Code::ArrowLeft => Key::ArrowLeft,
239-
Code::ArrowRight => Key::ArrowRight,
240-
Code::ArrowUp => Key::ArrowUp,
241-
Code::ArrowDown => Key::ArrowDown,
242-
Code::Enter => Key::Enter,
243-
Code::NumpadEnter => Key::Enter,
244-
Code::Help => Key::Help,
233+
Code::Lang2 => Key::Named(NamedKey::Eisu),
234+
Code::Home => Key::Named(NamedKey::Home),
235+
Code::End => Key::Named(NamedKey::End),
236+
Code::PageUp => Key::Named(NamedKey::PageUp),
237+
Code::PageDown => Key::Named(NamedKey::PageDown),
238+
Code::ArrowLeft => Key::Named(NamedKey::ArrowLeft),
239+
Code::ArrowRight => Key::Named(NamedKey::ArrowRight),
240+
Code::ArrowUp => Key::Named(NamedKey::ArrowUp),
241+
Code::ArrowDown => Key::Named(NamedKey::ArrowDown),
242+
Code::Enter => Key::Named(NamedKey::Enter),
243+
Code::NumpadEnter => Key::Named(NamedKey::Enter),
244+
Code::Help => Key::Named(NamedKey::Help),
245245
_ => return None,
246246
})
247247
}
@@ -327,7 +327,7 @@ impl KeyboardState {
327327
Key::Character(chars_ignoring)
328328
} else {
329329
// There may be more heroic things we can do here.
330-
Key::Unidentified
330+
Key::Named(NamedKey::Unidentified)
331331
}
332332
}
333333
};

src/win/keyboard.rs

Lines changed: 86 additions & 86 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ use std::collections::{HashMap, HashSet};
2222
use std::mem;
2323
use std::ops::RangeInclusive;
2424

25-
use keyboard_types::{Code, Key, KeyState, KeyboardEvent, Location, Modifiers};
25+
use keyboard_types::{Code, Key, KeyState, KeyboardEvent, Location, Modifiers, NamedKey};
2626

2727
use winapi::shared::minwindef::{HKL, INT, LPARAM, UINT, WPARAM};
2828
use winapi::shared::ntdef::SHORT;
@@ -260,104 +260,104 @@ fn scan_to_code(scan_code: u32) -> Code {
260260

261261
fn vk_to_key(vk: VkCode) -> Option<Key> {
262262
Some(match vk as INT {
263-
VK_CANCEL => Key::Cancel,
264-
VK_BACK => Key::Backspace,
265-
VK_TAB => Key::Tab,
266-
VK_CLEAR => Key::Clear,
267-
VK_RETURN => Key::Enter,
268-
VK_SHIFT | VK_LSHIFT | VK_RSHIFT => Key::Shift,
269-
VK_CONTROL | VK_LCONTROL | VK_RCONTROL => Key::Control,
270-
VK_MENU | VK_LMENU | VK_RMENU => Key::Alt,
271-
VK_PAUSE => Key::Pause,
272-
VK_CAPITAL => Key::CapsLock,
263+
VK_CANCEL => Key::Named(NamedKey::Cancel),
264+
VK_BACK => Key::Named(NamedKey::Backspace),
265+
VK_TAB => Key::Named(NamedKey::Tab),
266+
VK_CLEAR => Key::Named(NamedKey::Clear),
267+
VK_RETURN => Key::Named(NamedKey::Enter),
268+
VK_SHIFT | VK_LSHIFT | VK_RSHIFT => Key::Named(NamedKey::Shift),
269+
VK_CONTROL | VK_LCONTROL | VK_RCONTROL => Key::Named(NamedKey::Control),
270+
VK_MENU | VK_LMENU | VK_RMENU => Key::Named(NamedKey::Alt),
271+
VK_PAUSE => Key::Named(NamedKey::Pause),
272+
VK_CAPITAL => Key::Named(NamedKey::CapsLock),
273273
// TODO: disambiguate kana and hangul? same vk
274-
VK_KANA => Key::KanaMode,
275-
VK_JUNJA => Key::JunjaMode,
276-
VK_FINAL => Key::FinalMode,
277-
VK_KANJI => Key::KanjiMode,
278-
VK_ESCAPE => Key::Escape,
279-
VK_NONCONVERT => Key::NonConvert,
280-
VK_ACCEPT => Key::Accept,
281-
VK_PRIOR => Key::PageUp,
282-
VK_NEXT => Key::PageDown,
283-
VK_END => Key::End,
284-
VK_HOME => Key::Home,
285-
VK_LEFT => Key::ArrowLeft,
286-
VK_UP => Key::ArrowUp,
287-
VK_RIGHT => Key::ArrowRight,
288-
VK_DOWN => Key::ArrowDown,
289-
VK_SELECT => Key::Select,
290-
VK_PRINT => Key::Print,
291-
VK_EXECUTE => Key::Execute,
292-
VK_SNAPSHOT => Key::PrintScreen,
293-
VK_INSERT => Key::Insert,
294-
VK_DELETE => Key::Delete,
295-
VK_HELP => Key::Help,
296-
VK_LWIN | VK_RWIN => Key::Meta,
297-
VK_APPS => Key::ContextMenu,
298-
VK_SLEEP => Key::Standby,
299-
VK_F1 => Key::F1,
300-
VK_F2 => Key::F2,
301-
VK_F3 => Key::F3,
302-
VK_F4 => Key::F4,
303-
VK_F5 => Key::F5,
304-
VK_F6 => Key::F6,
305-
VK_F7 => Key::F7,
306-
VK_F8 => Key::F8,
307-
VK_F9 => Key::F9,
308-
VK_F10 => Key::F10,
309-
VK_F11 => Key::F11,
310-
VK_F12 => Key::F12,
311-
VK_NUMLOCK => Key::NumLock,
312-
VK_SCROLL => Key::ScrollLock,
313-
VK_BROWSER_BACK => Key::BrowserBack,
314-
VK_BROWSER_FORWARD => Key::BrowserForward,
315-
VK_BROWSER_REFRESH => Key::BrowserRefresh,
316-
VK_BROWSER_STOP => Key::BrowserStop,
317-
VK_BROWSER_SEARCH => Key::BrowserSearch,
318-
VK_BROWSER_FAVORITES => Key::BrowserFavorites,
319-
VK_BROWSER_HOME => Key::BrowserHome,
320-
VK_VOLUME_MUTE => Key::AudioVolumeMute,
321-
VK_VOLUME_DOWN => Key::AudioVolumeDown,
322-
VK_VOLUME_UP => Key::AudioVolumeUp,
323-
VK_MEDIA_NEXT_TRACK => Key::MediaTrackNext,
324-
VK_MEDIA_PREV_TRACK => Key::MediaTrackPrevious,
325-
VK_MEDIA_STOP => Key::MediaStop,
326-
VK_MEDIA_PLAY_PAUSE => Key::MediaPlayPause,
327-
VK_LAUNCH_MAIL => Key::LaunchMail,
328-
VK_LAUNCH_MEDIA_SELECT => Key::LaunchMediaPlayer,
329-
VK_LAUNCH_APP1 => Key::LaunchApplication1,
330-
VK_LAUNCH_APP2 => Key::LaunchApplication2,
331-
VK_OEM_ATTN => Key::Alphanumeric,
332-
VK_CONVERT => Key::Convert,
333-
VK_MODECHANGE => Key::ModeChange,
334-
VK_PROCESSKEY => Key::Process,
335-
VK_ATTN => Key::Attn,
336-
VK_CRSEL => Key::CrSel,
337-
VK_EXSEL => Key::ExSel,
338-
VK_EREOF => Key::EraseEof,
339-
VK_PLAY => Key::Play,
340-
VK_ZOOM => Key::ZoomToggle,
341-
VK_OEM_CLEAR => Key::Clear,
274+
VK_KANA => Key::Named(NamedKey::KanaMode),
275+
VK_JUNJA => Key::Named(NamedKey::JunjaMode),
276+
VK_FINAL => Key::Named(NamedKey::FinalMode),
277+
VK_KANJI => Key::Named(NamedKey::KanjiMode),
278+
VK_ESCAPE => Key::Named(NamedKey::Escape),
279+
VK_NONCONVERT => Key::Named(NamedKey::NonConvert),
280+
VK_ACCEPT => Key::Named(NamedKey::Accept),
281+
VK_PRIOR => Key::Named(NamedKey::PageUp),
282+
VK_NEXT => Key::Named(NamedKey::PageDown),
283+
VK_END => Key::Named(NamedKey::End),
284+
VK_HOME => Key::Named(NamedKey::Home),
285+
VK_LEFT => Key::Named(NamedKey::ArrowLeft),
286+
VK_UP => Key::Named(NamedKey::ArrowUp),
287+
VK_RIGHT => Key::Named(NamedKey::ArrowRight),
288+
VK_DOWN => Key::Named(NamedKey::ArrowDown),
289+
VK_SELECT => Key::Named(NamedKey::Select),
290+
VK_PRINT => Key::Named(NamedKey::Print),
291+
VK_EXECUTE => Key::Named(NamedKey::Execute),
292+
VK_SNAPSHOT => Key::Named(NamedKey::PrintScreen),
293+
VK_INSERT => Key::Named(NamedKey::Insert),
294+
VK_DELETE => Key::Named(NamedKey::Delete),
295+
VK_HELP => Key::Named(NamedKey::Help),
296+
VK_LWIN | VK_RWIN => Key::Named(NamedKey::Meta),
297+
VK_APPS => Key::Named(NamedKey::ContextMenu),
298+
VK_SLEEP => Key::Named(NamedKey::Standby),
299+
VK_F1 => Key::Named(NamedKey::F1),
300+
VK_F2 => Key::Named(NamedKey::F2),
301+
VK_F3 => Key::Named(NamedKey::F3),
302+
VK_F4 => Key::Named(NamedKey::F4),
303+
VK_F5 => Key::Named(NamedKey::F5),
304+
VK_F6 => Key::Named(NamedKey::F6),
305+
VK_F7 => Key::Named(NamedKey::F7),
306+
VK_F8 => Key::Named(NamedKey::F8),
307+
VK_F9 => Key::Named(NamedKey::F9),
308+
VK_F10 => Key::Named(NamedKey::F10),
309+
VK_F11 => Key::Named(NamedKey::F11),
310+
VK_F12 => Key::Named(NamedKey::F12),
311+
VK_NUMLOCK => Key::Named(NamedKey::NumLock),
312+
VK_SCROLL => Key::Named(NamedKey::ScrollLock),
313+
VK_BROWSER_BACK => Key::Named(NamedKey::BrowserBack),
314+
VK_BROWSER_FORWARD => Key::Named(NamedKey::BrowserForward),
315+
VK_BROWSER_REFRESH => Key::Named(NamedKey::BrowserRefresh),
316+
VK_BROWSER_STOP => Key::Named(NamedKey::BrowserStop),
317+
VK_BROWSER_SEARCH => Key::Named(NamedKey::BrowserSearch),
318+
VK_BROWSER_FAVORITES => Key::Named(NamedKey::BrowserFavorites),
319+
VK_BROWSER_HOME => Key::Named(NamedKey::BrowserHome),
320+
VK_VOLUME_MUTE => Key::Named(NamedKey::AudioVolumeMute),
321+
VK_VOLUME_DOWN => Key::Named(NamedKey::AudioVolumeDown),
322+
VK_VOLUME_UP => Key::Named(NamedKey::AudioVolumeUp),
323+
VK_MEDIA_NEXT_TRACK => Key::Named(NamedKey::MediaTrackNext),
324+
VK_MEDIA_PREV_TRACK => Key::Named(NamedKey::MediaTrackPrevious),
325+
VK_MEDIA_STOP => Key::Named(NamedKey::MediaStop),
326+
VK_MEDIA_PLAY_PAUSE => Key::Named(NamedKey::MediaPlayPause),
327+
VK_LAUNCH_MAIL => Key::Named(NamedKey::LaunchMail),
328+
VK_LAUNCH_MEDIA_SELECT => Key::Named(NamedKey::LaunchMediaPlayer),
329+
VK_LAUNCH_APP1 => Key::Named(NamedKey::LaunchApplication1),
330+
VK_LAUNCH_APP2 => Key::Named(NamedKey::LaunchApplication2),
331+
VK_OEM_ATTN => Key::Named(NamedKey::Alphanumeric),
332+
VK_CONVERT => Key::Named(NamedKey::Convert),
333+
VK_MODECHANGE => Key::Named(NamedKey::ModeChange),
334+
VK_PROCESSKEY => Key::Named(NamedKey::Process),
335+
VK_ATTN => Key::Named(NamedKey::Attn),
336+
VK_CRSEL => Key::Named(NamedKey::CrSel),
337+
VK_EXSEL => Key::Named(NamedKey::ExSel),
338+
VK_EREOF => Key::Named(NamedKey::EraseEof),
339+
VK_PLAY => Key::Named(NamedKey::Play),
340+
VK_ZOOM => Key::Named(NamedKey::ZoomToggle),
341+
VK_OEM_CLEAR => Key::Named(NamedKey::Clear),
342342
_ => return None,
343343
})
344344
}
345345

346346
fn code_unit_to_key(code_unit: u32) -> Key {
347347
match code_unit {
348-
0x8 | 0x7F => Key::Backspace,
349-
0x9 => Key::Tab,
350-
0xA | 0xD => Key::Enter,
351-
0x1B => Key::Escape,
348+
0x8 | 0x7F => Key::Named(NamedKey::Backspace),
349+
0x9 => Key::Named(NamedKey::Tab),
350+
0xA | 0xD => Key::Named(NamedKey::Enter),
351+
0x1B => Key::Named(NamedKey::Escape),
352352
_ if code_unit >= 0x20 => {
353353
if let Some(c) = std::char::from_u32(code_unit) {
354354
Key::Character(c.to_string())
355355
} else {
356356
// UTF-16 error, very unlikely
357-
Key::Unidentified
357+
Key::Named(NamedKey::Unidentified)
358358
}
359359
}
360-
_ => Key::Unidentified,
360+
_ => Key::Named(NamedKey::Unidentified),
361361
}
362362
}
363363

@@ -672,7 +672,7 @@ impl KeyboardState {
672672
} else {
673673
let mapped = self.map_vk(vk);
674674
if mapped >= (1 << 31) {
675-
Key::Dead
675+
Key::Named(NamedKey::Dead)
676676
} else {
677677
code_unit_to_key(mapped)
678678
}

0 commit comments

Comments
 (0)