From 89ff895be086201ef159caa72491a180bd9e8c6c Mon Sep 17 00:00:00 2001 From: Takashi Kokubun Date: Fri, 1 Apr 2022 21:40:43 -0700 Subject: [PATCH] Ungrab devices on ReloadDevices --- src/device.rs | 8 ++++++++ src/main.rs | 3 +++ 2 files changed, 11 insertions(+) diff --git a/src/device.rs b/src/device.rs index 1747ae4..07b4964 100644 --- a/src/device.rs +++ b/src/device.rs @@ -171,9 +171,17 @@ impl InputDevice { true } } + + pub fn ungrab(&mut self) { + if let Err(error) = self.device.ungrab() { + println!("Failed to ungrab device '{}' at '{}' due to: {error}", self.device_name(), self.path.display()); + } + } + pub fn fetch_events(&mut self) -> io::Result { self.device.fetch_events() } + fn device_name(&self) -> &str { self.device.name().unwrap_or("") } diff --git a/src/main.rs b/src/main.rs index c21fe5d..90274b9 100644 --- a/src/main.rs +++ b/src/main.rs @@ -182,6 +182,9 @@ fn main() -> anyhow::Result<()> { } } { Event::ReloadDevices => { + for input_device in input_devices.values_mut() { + input_device.ungrab(); + } input_devices = match get_input_devices(&device_filter, &ignore_filter, watch_devices) { Ok(input_devices) => input_devices, Err(e) => bail!("Failed to prepare input devices: {}", e),