From a5e342540e02a93aca30a4a24e5c68b1313a3ca5 Mon Sep 17 00:00:00 2001 From: Piotr Podusowski Date: Mon, 29 Jul 2024 20:32:25 +0200 Subject: [PATCH] Set `KeyboardInput::text` when `logical_key` can be represented as character. --- src/changelog/unreleased.md | 4 ++++ src/platform_impl/android/mod.rs | 12 ++++++++++-- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/src/changelog/unreleased.md b/src/changelog/unreleased.md index f3a0f6d2c336..b3a2a4c346b8 100644 --- a/src/changelog/unreleased.md +++ b/src/changelog/unreleased.md @@ -39,3 +39,7 @@ The migration guide could reference other migration examples in the current changelog entry. ## Unreleased + +### Changed + +- On Android, when `keycode` can be represented as character, its textual representation is provided in `KeyEvent::text`. diff --git a/src/platform_impl/android/mod.rs b/src/platform_impl/android/mod.rs index bc0ad680e563..6fe818aca4d6 100644 --- a/src/platform_impl/android/mod.rs +++ b/src/platform_impl/android/mod.rs @@ -10,6 +10,7 @@ use android_activity::input::{InputEvent, KeyAction, Keycode, MotionAction}; use android_activity::{ AndroidApp, AndroidAppWaker, ConfigurationRef, InputStatus, MainEvent, Rect, }; +use smol_str::SmolStr; use tracing::{debug, trace, warn}; use crate::cursor::Cursor; @@ -446,6 +447,13 @@ impl EventLoop { &mut self.combining_accent, ); + let logical_key = keycodes::to_logical(key_char, keycode); + let text = if state == event::ElementState::Pressed { + logical_key.to_text().map(SmolStr::new) + } else { + None + }; + let event = event::Event::WindowEvent { window_id: window::WindowId(WindowId), event: event::WindowEvent::KeyboardInput { @@ -453,10 +461,10 @@ impl EventLoop { event: event::KeyEvent { state, physical_key: keycodes::to_physical_key(keycode), - logical_key: keycodes::to_logical(key_char, keycode), + logical_key, location: keycodes::to_location(keycode), repeat: key.repeat_count() > 0, - text: None, + text, platform_specific: KeyEventExtra {}, }, is_synthetic: false, -- 2.47.0