From 178b7b133b5c36422e6e9ce137ef6dbaa4d066d2 Mon Sep 17 00:00:00 2001 From: Victor Berger Date: Fri, 15 May 2015 12:20:25 +0200 Subject: [PATCH] UTF8 keyboard events for wayland. --- src/api/wayland/context.rs | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/src/api/wayland/context.rs b/src/api/wayland/context.rs index d69a254d..3b6c0b86 100644 --- a/src/api/wayland/context.rs +++ b/src/api/wayland/context.rs @@ -137,17 +137,27 @@ impl WaylandContext { KeyState::WL_KEYBOARD_KEY_STATE_RELEASED => ElementState::Released, KeyState::WL_KEYBOARD_KEY_STATE_PRESSED => ElementState::Pressed }; - let event = Event::KeyboardInput( + let mut events = Vec::new(); + // key event + events.push(Event::KeyboardInput( kstate, (keycode & 0xff) as u8, keycode_to_vkey(state, keycode) - ); + )); + // utf8 events + if kstate == ElementState::Pressed { + if let Some(txt) = state.get_utf8(keycode) { + events.extend( + txt.chars().map(Event::ReceivedCharacter) + ); + } + } // dispatch to the appropriate queue let sid = *current_surface.lock().unwrap(); if let Some(sid) = sid { let map = event_queues.lock().unwrap(); if let Some(queue) = map.get(&sid) { - queue.lock().unwrap().push_back(event); + queue.lock().unwrap().extend(events.into_iter()); } } });