kiwmi/src/input/keyboard.rs

63 lines
1.9 KiB
Rust
Raw Normal View History

2019-01-31 16:37:27 +01:00
use crate::CompositorState;
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-31 16:37:27 +01:00
wlroots_dehandle,
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
};
2019-01-31 16:37:27 +01:00
use std::{process::Command, thread};
2019-01-09 10:10:55 +01:00
pub struct Keyboard;
impl input::keyboard::Handler for Keyboard {
2019-01-31 16:37:27 +01:00
#[wlroots_dehandle(compositor, seat)]
2019-01-09 10:10:55 +01:00
fn on_key(
&mut self,
compositor_handle: compositor::Handle,
_keyboard_handle: keyboard::Handle,
key_event: &keyboard::event::Key,
) {
2019-01-31 16:37:27 +01:00
use compositor_handle as compositor;
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));
2019-01-31 16:37:27 +01:00
2019-01-28 13:06:31 +01:00
match key {
keysyms::KEY_Escape => compositor::terminate(),
2019-01-31 16:37:27 +01:00
keysyms::KEY_F1 => {
thread::spawn(move || {
Command::new("weston-terminal").output().unwrap();
});
}
2019-01-28 13:06:31 +01:00
keysyms::KEY_XF86Switch_VT_1..=keysyms::KEY_XF86Switch_VT_12 => {
2019-01-31 16:37:27 +01:00
let backend = compositor.backend_mut();
if let Some(mut session) = backend.get_session() {
session.change_vt(key - keysyms::KEY_XF86Switch_VT_1 + 1);
}
2019-01-28 13:06:31 +01:00
}
_ => {}
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
}
}
2019-01-31 16:37:27 +01:00
let state: &mut CompositorState = compositor.downcast();
let seat_handle = state.seat_handle.clone().unwrap();
use seat_handle as seat;
seat.keyboard_notify_key(
key_event.time_msec(),
key_event.keycode(),
key_event.key_state() as u32,
);
2019-01-09 10:10:55 +01:00
}
}