mirror of
https://github.com/rust-windowing/winit.git
synced 2026-08-31 13:50:05 -04:00
Implement KeyboardEvent ModifiersState for X11
This commit is contained in:
@@ -140,6 +140,8 @@ impl XInputEventHandler {
|
|||||||
|
|
||||||
let mut kp_keysym = 0;
|
let mut kp_keysym = 0;
|
||||||
|
|
||||||
|
let mut ev_mods = ModifiersState::default();
|
||||||
|
|
||||||
let written = unsafe {
|
let written = unsafe {
|
||||||
use std::str;
|
use std::str;
|
||||||
|
|
||||||
@@ -149,6 +151,26 @@ impl XInputEventHandler {
|
|||||||
mem::transmute(buffer.as_mut_ptr()),
|
mem::transmute(buffer.as_mut_ptr()),
|
||||||
buffer.len() as libc::c_int, &mut kp_keysym, ptr::null_mut());
|
buffer.len() as libc::c_int, &mut kp_keysym, ptr::null_mut());
|
||||||
|
|
||||||
|
{
|
||||||
|
// Translate x event state to mods
|
||||||
|
let state = event.state;
|
||||||
|
if (state & ffi::Mod1Mask) != 0 {
|
||||||
|
ev_mods.alt = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (state & ffi::ShiftMask) != 0 {
|
||||||
|
ev_mods.shift = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (state & ffi::ControlMask) != 0 {
|
||||||
|
ev_mods.ctrl = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (state & ffi::Mod4Mask) != 0 {
|
||||||
|
ev_mods.logo = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
str::from_utf8(&buffer[..count as usize]).unwrap_or("").to_string()
|
str::from_utf8(&buffer[..count as usize]).unwrap_or("").to_string()
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -166,7 +188,7 @@ impl XInputEventHandler {
|
|||||||
|
|
||||||
let vkey = events::keycode_to_element(keysym as libc::c_uint);
|
let vkey = events::keycode_to_element(keysym as libc::c_uint);
|
||||||
|
|
||||||
translated_events.push(KeyboardInput(state, event.keycode as u8, vkey, ModifiersState::default()));
|
translated_events.push(KeyboardInput(state, event.keycode as u8, vkey, ev_mods));
|
||||||
translated_events
|
translated_events
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user