From 292848eb92f6e0b21b287657093a708a86654433 Mon Sep 17 00:00:00 2001 From: William Edwards Date: Fri, 14 Jun 2024 00:40:41 -0700 Subject: [PATCH] fix(CompositeDevice): don't run blocked source devices --- src/input/composite_device/mod.rs | 26 +++++++++++++++++++++----- 1 file changed, 21 insertions(+), 5 deletions(-) diff --git a/src/input/composite_device/mod.rs b/src/input/composite_device/mod.rs index 54a40d2..4bf72f5 100644 --- a/src/input/composite_device/mod.rs +++ b/src/input/composite_device/mod.rs @@ -545,6 +545,12 @@ impl CompositeDevice { let sources = self.source_devices_discovered.drain(..); for mut source_device in sources { let device_id = source_device.get_id(); + // If the source device is blocked, don't bother running it + if self.source_devices_blocked.contains(&device_id) { + log::debug!("Source device '{device_id}' blocked. Skipping running."); + continue; + } + let source_tx = source_device.transmitter(); self.source_devices.insert(device_id.clone(), source_tx); let tx = self.tx.clone(); @@ -1380,15 +1386,25 @@ impl CompositeDevice { } }; + // Check to see if this source device should be blocked. + let mut is_blocked = false; + if let Some(source_config) = self.config.get_matching_device(&device_info) { + if let Some(blocked) = source_config.blocked { + is_blocked = blocked; + } + } + // Get the capabilities of the source device. // TODO: When we *remove* a source device, we also need to remove // capabilities - let capabilities = source_device.get_capabilities()?; - for cap in capabilities { - if self.translatable_capabilities.contains(&cap) { - continue; + if !is_blocked { + let capabilities = source_device.get_capabilities()?; + for cap in capabilities { + if self.translatable_capabilities.contains(&cap) { + continue; + } + self.capabilities.insert(cap); } - self.capabilities.insert(cap); } // TODO: Based on the capability map in the config, translate