From 88b1a0d3d80391b81a35230f3c781bea1600989b Mon Sep 17 00:00:00 2001 From: Evgeniy Tatarkin Date: Thu, 20 Feb 2025 13:53:32 +0300 Subject: [PATCH] fix: long pressed keys on hidapi --- helix-view/src/scancode.rs | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/helix-view/src/scancode.rs b/helix-view/src/scancode.rs index 8c613c143..c5dee7415 100644 --- a/helix-view/src/scancode.rs +++ b/helix-view/src/scancode.rs @@ -410,9 +410,9 @@ mod keyboard_state { } _ => (), }; - - for i in 2..8 { - let hid_keycode = report[i]; + let mut key = 0; + for i in 0..6 { + let hid_keycode = report[7 - i]; if hid_keycode == 0 { continue; }; @@ -423,10 +423,12 @@ mod keyboard_state { log::trace!( "{device_name} hid_keycode: {hid_keycode} scancode: {scancode}" ); - k1.store(scancode, Ordering::Relaxed); + key = scancode; break; } + k1.store(key, Ordering::Relaxed); + k2.store(hid_modifier_to_scancode(&report[0]).unwrap_or(0), Ordering::Relaxed); } })); @@ -445,8 +447,8 @@ mod keyboard_state { pub fn get_scancodes(&mut self) -> [u16; 2] { [ - self.codes[0].swap(0, Ordering::Relaxed), // key - self.codes[1].swap(0, Ordering::Relaxed), // modifier + self.codes[0].load(Ordering::Relaxed), // key + self.codes[1].load(Ordering::Relaxed), // modifier ] } }