diff --git a/CHANGELOG.md b/CHANGELOG.md index a082a568d2..bb04a8fa84 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,11 +13,13 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Black images when using OpenGL backend in `iced_wgpu`. [#2259](https://github.com/iced-rs/iced/pull/2259) - Documentation for `horizontal_space` and `vertical_space` helpers. [#2265](https://github.com/iced-rs/iced/pull/2265) - WebAssembly platform. [#2271](https://github.com/iced-rs/iced/pull/2271) +- Decouple `Key` from `keyboard::Modifiers` and apply them to `text` in `KeyboardInput`. [#2238](https://github.com/iced-rs/iced/pull/2238) Many thanks to... - @PolyMeilex - @rizzen-yazston +- @wash2 ## [0.12.0] - 2024-02-15 ### Added diff --git a/winit/src/conversion.rs b/winit/src/conversion.rs index 478dbddddd..3d2ba0a418 100644 --- a/winit/src/conversion.rs +++ b/winit/src/conversion.rs @@ -195,17 +195,40 @@ pub fn window_event( })) } }, - WindowEvent::KeyboardInput { - event: - winit::event::KeyEvent { - logical_key, - state, - text, - location, - .. - }, - .. - } => Some(Event::Keyboard({ + WindowEvent::KeyboardInput { event, .. } => Some(Event::Keyboard({ + let logical_key = { + #[cfg(not(target_arch = "wasm32"))] + { + use winit::platform::modifier_supplement::KeyEventExtModifierSupplement; + event.key_without_modifiers() + } + + #[cfg(target_arch = "wasm32")] + { + // TODO: Fix inconsistent API on Wasm + event.logical_key + } + }; + + let text = { + #[cfg(not(target_arch = "wasm32"))] + { + use crate::core::SmolStr; + use winit::platform::modifier_supplement::KeyEventExtModifierSupplement; + + event.text_with_all_modifiers().map(SmolStr::new) + } + + #[cfg(target_arch = "wasm32")] + { + // TODO: Fix inconsistent API on Wasm + event.text + } + }; + + let winit::event::KeyEvent { + state, location, .. + } = event; let key = key(logical_key); let modifiers = self::modifiers(modifiers);