Fixed a bug that prematurely ended a long press if another key was lifted

This commit is contained in:
cyber-sushi 2024-12-19 11:52:50 +01:00
parent 7f48ef3ea4
commit 12917aa8e4

View file

@ -998,13 +998,15 @@ impl EventReader {
) { ) {
let mut virt_dev = self.virt_dev.lock().await; let mut virt_dev = self.virt_dev.lock().await;
let mut modifier_was_activated = self.modifier_was_activated.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<Key> = self.released_keys(&modifiers, &config).await; let released_keys: Vec<Key> = self.released_keys(&modifiers, &config).await;
for key in released_keys { for key in released_keys {
if config.mapped_modifiers.all.contains(&Event::Key(key)) {
self.toggle_modifiers(Event::Key(key), 0, &config).await; self.toggle_modifiers(Event::Key(key), 0, &config).await;
let virtual_event: InputEvent = InputEvent::new_now(EventType::KEY, key.code(), 0); let virtual_event: InputEvent = InputEvent::new_now(EventType::KEY, key.code(), 0);
virt_dev.keys.emit(&[virtual_event]).unwrap(); virt_dev.keys.emit(&[virtual_event]).unwrap();
} }
}
} else if ignore_modifiers { } else if ignore_modifiers {
for key in modifiers.iter() { for key in modifiers.iter() {
if let Event::Key(key) = key { if let Event::Key(key) = key {
@ -1015,7 +1017,7 @@ impl EventReader {
} }
} }
for key in event_list { for key in event_list {
if release_keys { if release_keys && value != 2 {
self.toggle_modifiers(Event::Key(*key), value, &config) self.toggle_modifiers(Event::Key(*key), value, &config)
.await; .await;
} }
@ -1050,12 +1052,14 @@ impl EventReader {
) { ) {
let mut virt_dev = self.virt_dev.lock().await; let mut virt_dev = self.virt_dev.lock().await;
let mut modifier_was_activated = self.modifier_was_activated.lock().await; let mut modifier_was_activated = self.modifier_was_activated.lock().await;
if config.mapped_modifiers.all.contains(&event) && value != 2 {
let released_keys: Vec<Key> = self.released_keys(&modifiers, &config).await; let released_keys: Vec<Key> = self.released_keys(&modifiers, &config).await;
for key in released_keys { for key in released_keys {
self.toggle_modifiers(Event::Key(key), 0, &config).await; self.toggle_modifiers(Event::Key(key), 0, &config).await;
let virtual_event: InputEvent = InputEvent::new_now(EventType::KEY, key.code(), 0); let virtual_event: InputEvent = InputEvent::new_now(EventType::KEY, key.code(), 0);
virt_dev.keys.emit(&[virtual_event]).unwrap() virt_dev.keys.emit(&[virtual_event]).unwrap()
} }
}
self.toggle_modifiers(event, value, &config).await; self.toggle_modifiers(event, value, &config).await;
if config.mapped_modifiers.custom.contains(&event) { if config.mapped_modifiers.custom.contains(&event) {
if value == 0 && !*modifier_was_activated { if value == 0 && !*modifier_was_activated {