From 12917aa8e4820dc5dbf293865686890b4ec877e9 Mon Sep 17 00:00:00 2001 From: cyber-sushi Date: Thu, 19 Dec 2024 11:52:50 +0100 Subject: [PATCH] Fixed a bug that prematurely ended a long press if another key was lifted --- src/event_reader.rs | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/src/event_reader.rs b/src/event_reader.rs index 426aeb5..6278fe1 100644 --- a/src/event_reader.rs +++ b/src/event_reader.rs @@ -998,12 +998,14 @@ impl EventReader { ) { let mut virt_dev = self.virt_dev.lock().await; let mut modifier_was_activated = self.modifier_was_activated.lock().await; - if release_keys { + if release_keys && value != 2 { let released_keys: Vec = self.released_keys(&modifiers, &config).await; for key in released_keys { - self.toggle_modifiers(Event::Key(key), 0, &config).await; - let virtual_event: InputEvent = InputEvent::new_now(EventType::KEY, key.code(), 0); - virt_dev.keys.emit(&[virtual_event]).unwrap(); + if config.mapped_modifiers.all.contains(&Event::Key(key)) { + self.toggle_modifiers(Event::Key(key), 0, &config).await; + let virtual_event: InputEvent = InputEvent::new_now(EventType::KEY, key.code(), 0); + virt_dev.keys.emit(&[virtual_event]).unwrap(); + } } } else if ignore_modifiers { for key in modifiers.iter() { @@ -1015,7 +1017,7 @@ impl EventReader { } } for key in event_list { - if release_keys { + if release_keys && value != 2 { self.toggle_modifiers(Event::Key(*key), value, &config) .await; } @@ -1050,11 +1052,13 @@ impl EventReader { ) { let mut virt_dev = self.virt_dev.lock().await; let mut modifier_was_activated = self.modifier_was_activated.lock().await; - let released_keys: Vec = self.released_keys(&modifiers, &config).await; - for key in released_keys { - self.toggle_modifiers(Event::Key(key), 0, &config).await; - let virtual_event: InputEvent = InputEvent::new_now(EventType::KEY, key.code(), 0); - virt_dev.keys.emit(&[virtual_event]).unwrap() + if config.mapped_modifiers.all.contains(&event) && value != 2 { + let released_keys: Vec = self.released_keys(&modifiers, &config).await; + for key in released_keys { + self.toggle_modifiers(Event::Key(key), 0, &config).await; + let virtual_event: InputEvent = InputEvent::new_now(EventType::KEY, key.code(), 0); + virt_dev.keys.emit(&[virtual_event]).unwrap() + } } self.toggle_modifiers(event, value, &config).await; if config.mapped_modifiers.custom.contains(&event) {