2019-01-28 13:06:31 +01:00
|
|
|
use log::debug;
|
|
|
|
|
2019-01-09 10:10:55 +01:00
|
|
|
use wlroots::{
|
|
|
|
compositor,
|
|
|
|
input::{self, keyboard},
|
2019-01-28 13:22:15 +01:00
|
|
|
xkbcommon::xkb::{keysym_get_name, keysyms},
|
2019-01-28 13:06:31 +01:00
|
|
|
WLR_KEY_PRESSED,
|
2019-01-09 10:10:55 +01:00
|
|
|
};
|
|
|
|
|
|
|
|
pub struct Keyboard;
|
|
|
|
|
|
|
|
impl input::keyboard::Handler for Keyboard {
|
|
|
|
fn on_key(
|
|
|
|
&mut self,
|
|
|
|
compositor_handle: compositor::Handle,
|
|
|
|
_keyboard_handle: keyboard::Handle,
|
|
|
|
key_event: &keyboard::event::Key,
|
|
|
|
) {
|
2019-01-28 13:22:15 +01:00
|
|
|
if key_event.key_state() == WLR_KEY_PRESSED {
|
|
|
|
for key in key_event.pressed_keys() {
|
2019-01-28 13:06:31 +01:00
|
|
|
debug!("Key down: {}", keysym_get_name(key));
|
|
|
|
match key {
|
|
|
|
keysyms::KEY_Escape => compositor::terminate(),
|
|
|
|
keysyms::KEY_XF86Switch_VT_1..=keysyms::KEY_XF86Switch_VT_12 => {
|
|
|
|
compositor_handle
|
|
|
|
.run(|compositor| {
|
|
|
|
let backend = compositor.backend_mut();
|
|
|
|
if let Some(mut session) = backend.get_session() {
|
|
|
|
session.change_vt(key - keysyms::KEY_XF86Switch_VT_1 + 1);
|
|
|
|
}
|
|
|
|
})
|
|
|
|
.unwrap();
|
|
|
|
}
|
|
|
|
_ => {}
|
2019-01-09 10:10:55 +01:00
|
|
|
}
|
2019-01-28 13:22:15 +01:00
|
|
|
}
|
|
|
|
} else {
|
|
|
|
for key in key_event.pressed_keys() {
|
2019-01-28 13:06:31 +01:00
|
|
|
debug!("Key up: {}", keysym_get_name(key));
|
2019-01-09 10:10:55 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|