Skip to content

Commit 928f89b

Browse files
waywardmonkeysprokopyl
authored andcommitted
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 91e3b4a commit 928f89b

4 files changed

Lines changed: 216 additions & 216 deletions

File tree

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ opengl = [
3434
uuid = [] # Deprecated; this feature was provided by the now unneeded uuid dependency
3535

3636
[dependencies]
37-
keyboard-types = { version = "0.6.1", default-features = false }
37+
keyboard-types = { version = "0.8.3", default-features = false }
3838
raw-window-handle = "0.5"
3939

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

src/platform/macos/keyboard.rs

Lines changed: 42 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -185,50 +185,50 @@ fn key_code_to_code(key_code: u16) -> Code {
185185
/// NativeKeyToDOMKeyName.h.
186186
fn code_to_key(code: Code) -> Option<Key> {
187187
Some(match code {
188-
Code::Escape => Key::Escape,
189-
Code::ShiftLeft | Code::ShiftRight => Key::Shift,
190-
Code::AltLeft | Code::AltRight => Key::Alt,
191-
Code::MetaLeft | Code::MetaRight => Key::Meta,
192-
Code::ControlLeft | Code::ControlRight => Key::Control,
193-
Code::CapsLock => Key::CapsLock,
188+
Code::Escape => Key::Named(NamedKey::Escape),
189+
Code::ShiftLeft | Code::ShiftRight => Key::Named(NamedKey::Shift),
190+
Code::AltLeft | Code::AltRight => Key::Named(NamedKey::Alt),
191+
Code::MetaLeft | Code::MetaRight => Key::Named(NamedKey::Meta),
192+
Code::ControlLeft | Code::ControlRight => Key::Named(NamedKey::Control),
193+
Code::CapsLock => Key::Named(NamedKey::CapsLock),
194194
// kVK_ANSI_KeypadClear
195-
Code::NumLock => Key::Clear,
196-
Code::Fn => Key::Fn,
197-
Code::F1 => Key::F1,
198-
Code::F2 => Key::F2,
199-
Code::F3 => Key::F3,
200-
Code::F4 => Key::F4,
201-
Code::F5 => Key::F5,
202-
Code::F6 => Key::F6,
203-
Code::F7 => Key::F7,
204-
Code::F8 => Key::F8,
205-
Code::F9 => Key::F9,
206-
Code::F10 => Key::F10,
207-
Code::F11 => Key::F11,
208-
Code::F12 => Key::F12,
209-
Code::Pause => Key::Pause,
210-
Code::ScrollLock => Key::ScrollLock,
211-
Code::PrintScreen => Key::PrintScreen,
212-
Code::Insert => Key::Insert,
213-
Code::Delete => Key::Delete,
214-
Code::Tab => Key::Tab,
215-
Code::Backspace => Key::Backspace,
216-
Code::ContextMenu => Key::ContextMenu,
195+
Code::NumLock => Key::Named(NamedKey::Clear),
196+
Code::Fn => Key::Named(NamedKey::Fn),
197+
Code::F1 => Key::Named(NamedKey::F1),
198+
Code::F2 => Key::Named(NamedKey::F2),
199+
Code::F3 => Key::Named(NamedKey::F3),
200+
Code::F4 => Key::Named(NamedKey::F4),
201+
Code::F5 => Key::Named(NamedKey::F5),
202+
Code::F6 => Key::Named(NamedKey::F6),
203+
Code::F7 => Key::Named(NamedKey::F7),
204+
Code::F8 => Key::Named(NamedKey::F8),
205+
Code::F9 => Key::Named(NamedKey::F9),
206+
Code::F10 => Key::Named(NamedKey::F10),
207+
Code::F11 => Key::Named(NamedKey::F11),
208+
Code::F12 => Key::Named(NamedKey::F12),
209+
Code::Pause => Key::Named(NamedKey::Pause),
210+
Code::ScrollLock => Key::Named(NamedKey::ScrollLock),
211+
Code::PrintScreen => Key::Named(NamedKey::PrintScreen),
212+
Code::Insert => Key::Named(NamedKey::Insert),
213+
Code::Delete => Key::Named(NamedKey::Delete),
214+
Code::Tab => Key::Named(NamedKey::Tab),
215+
Code::Backspace => Key::Named(NamedKey::Backspace),
216+
Code::ContextMenu => Key::Named(NamedKey::ContextMenu),
217217
// kVK_JIS_Kana
218-
Code::Lang1 => Key::KanjiMode,
218+
Code::Lang1 => Key::Named(NamedKey::KanjiMode),
219219
// kVK_JIS_Eisu
220-
Code::Lang2 => Key::Eisu,
221-
Code::Home => Key::Home,
222-
Code::End => Key::End,
223-
Code::PageUp => Key::PageUp,
224-
Code::PageDown => Key::PageDown,
225-
Code::ArrowLeft => Key::ArrowLeft,
226-
Code::ArrowRight => Key::ArrowRight,
227-
Code::ArrowUp => Key::ArrowUp,
228-
Code::ArrowDown => Key::ArrowDown,
229-
Code::Enter => Key::Enter,
230-
Code::NumpadEnter => Key::Enter,
231-
Code::Help => Key::Help,
220+
Code::Lang2 => Key::Named(NamedKey::Eisu),
221+
Code::Home => Key::Named(NamedKey::Home),
222+
Code::End => Key::Named(NamedKey::End),
223+
Code::PageUp => Key::Named(NamedKey::PageUp),
224+
Code::PageDown => Key::Named(NamedKey::PageDown),
225+
Code::ArrowLeft => Key::Named(NamedKey::ArrowLeft),
226+
Code::ArrowRight => Key::Named(NamedKey::ArrowRight),
227+
Code::ArrowUp => Key::Named(NamedKey::ArrowUp),
228+
Code::ArrowDown => Key::Named(NamedKey::ArrowDown),
229+
Code::Enter => Key::Named(NamedKey::Enter),
230+
Code::NumpadEnter => Key::Named(NamedKey::Enter),
231+
Code::Help => Key::Named(NamedKey::Help),
232232
_ => return None,
233233
})
234234
}
@@ -315,7 +315,7 @@ impl KeyboardState {
315315
Key::Character(chars_ignoring)
316316
} else {
317317
// There may be more heroic things we can do here.
318-
Key::Unidentified
318+
Key::Named(NamedKey::Unidentified)
319319
}
320320
}
321321
};

src/platform/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
use windows_sys::Win32::{
2727
Foundation::{HWND, LPARAM, WPARAM},
2828
System::SystemServices::{MK_CONTROL, MK_SHIFT},
@@ -247,104 +247,104 @@ fn scan_to_code(scan_code: u32) -> Code {
247247

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

333333
fn code_unit_to_key(code_unit: u32) -> Key {
334334
match code_unit {
335-
0x8 | 0x7F => Key::Backspace,
336-
0x9 => Key::Tab,
337-
0xA | 0xD => Key::Enter,
338-
0x1B => Key::Escape,
335+
0x8 | 0x7F => Key::Named(NamedKey::Backspace),
336+
0x9 => Key::Named(NamedKey::Tab),
337+
0xA | 0xD => Key::Named(NamedKey::Enter),
338+
0x1B => Key::Named(NamedKey::Escape),
339339
_ if code_unit >= 0x20 => {
340340
if let Some(c) = std::char::from_u32(code_unit) {
341341
Key::Character(c.to_string())
342342
} else {
343343
// UTF-16 error, very unlikely
344-
Key::Unidentified
344+
Key::Named(NamedKey::Unidentified)
345345
}
346346
}
347-
_ => Key::Unidentified,
347+
_ => Key::Named(NamedKey::Unidentified),
348348
}
349349
}
350350

@@ -659,7 +659,7 @@ impl KeyboardState {
659659
} else {
660660
let mapped = self.map_vk(vk);
661661
if mapped >= (1 << 31) {
662-
Key::Dead
662+
Key::Named(NamedKey::Dead)
663663
} else {
664664
code_unit_to_key(mapped)
665665
}

0 commit comments

Comments
 (0)