mirror of https://github.com/k0kubun/xremap
Implement EventHandler as a mutable struct
parent
aa3dd2efe3
commit
0d5f37cae3
@ -0,0 +1,32 @@
|
||||
use evdev::uinput::VirtualDevice;
|
||||
use evdev::{EventType, InputEvent, Key};
|
||||
use std::error::Error;
|
||||
use crate::Config;
|
||||
|
||||
pub struct EventHandler {
|
||||
pub config: Config,
|
||||
pub device: VirtualDevice,
|
||||
}
|
||||
|
||||
impl EventHandler {
|
||||
// Handle EventType::KEY
|
||||
pub fn on_event(&mut self, event: InputEvent) -> Result<(), Box<dyn Error>> {
|
||||
let mut key = &Key::new(event.code());
|
||||
|
||||
// Perform modmap
|
||||
for modmap in &self.config.modmap {
|
||||
if let Some(modmap_key) = modmap.remap.get(&key) {
|
||||
key = modmap_key;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
self.device.emit(&[InputEvent::new(EventType::KEY, key.code(), event.value())])?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
pub fn send_event(&mut self, event: InputEvent) -> Result<(), Box<dyn Error>> {
|
||||
self.device.emit(&[event])?;
|
||||
Ok(())
|
||||
}
|
||||
}
|
@ -1,20 +0,0 @@
|
||||
use evdev::uinput::VirtualDevice;
|
||||
use evdev::{EventType, InputEvent, Key};
|
||||
use std::error::Error;
|
||||
use crate::Config;
|
||||
|
||||
// Handle EventType::KEY
|
||||
pub fn on_event(event: InputEvent, device: &mut VirtualDevice, config: &Config) -> Result<(), Box<dyn Error>> {
|
||||
let mut key = &Key::new(event.code());
|
||||
|
||||
// Perform modmap
|
||||
for modmap in &config.modmap {
|
||||
if let Some(modmap_key) = modmap.remap.get(&key) {
|
||||
key = modmap_key;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
device.emit(&[InputEvent::new(EventType::KEY, key.code(), event.value())])?;
|
||||
Ok(())
|
||||
}
|
Loading…
Reference in New Issue