Skip to content

Commit 18e45bd

Browse files
committed
Fix key handling
When the map source key is pressed and another key is released, the source key is not pressed yet, so the down event of the source key and the up event of the current key must be fired.
1 parent 8d27fd4 commit 18e45bd

1 file changed

Lines changed: 5 additions & 8 deletions

File tree

src/lib.rs

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -63,12 +63,9 @@ fn translate_event(keymap: &KeyMap, ev: InputEvent, pending: Option<Key>) -> (Ve
6363
},
6464

6565
VAL_UP => {
66-
let evs = match pending {
67-
Some(pending) if pending == key => match keymap.get(&pending) {
68-
Some(dest) => vec![key_down(*dest), key_up(*dest)],
69-
_ => vec![ev],
70-
},
71-
Some(pending) => vec![key_up(pending), key_up(key)],
66+
let evs = match pending.map(|pend| (pend, keymap.get(&pend))) {
67+
Some((pend, Some(dest))) if pend == key => vec![key_down(*dest), key_up(*dest)],
68+
Some((pend, _)) => vec![key_down(pend), key_up(key)],
7269
_ => vec![ev],
7370
};
7471

@@ -127,7 +124,7 @@ mod tests {
127124
assert_eq!(pending, None);
128125

129126
let (evs, pending) = translate(key_up(Key::KEY_A), Some(Key::KEY_LEFTALT));
130-
assert_eq!(evs, vec![(Key::KEY_LEFTALT, VAL_UP), (Key::KEY_A, VAL_UP)]);
127+
assert_eq!(evs, vec![(Key::KEY_LEFTALT, VAL_DOWN), (Key::KEY_A, VAL_UP)]);
131128
assert_eq!(pending, None);
132129

133130
let (evs, pending) = translate(key_up(Key::KEY_LEFTALT), None);
@@ -139,7 +136,7 @@ mod tests {
139136
assert_eq!(pending, None);
140137

141138
let (evs, pending) = translate(key_up(Key::KEY_LEFTALT), Some(Key::KEY_RIGHTALT));
142-
assert_eq!(evs, vec![(Key::KEY_RIGHTALT, VAL_UP), (Key::KEY_LEFTALT, VAL_UP)]);
139+
assert_eq!(evs, vec![(Key::KEY_RIGHTALT, VAL_DOWN), (Key::KEY_LEFTALT, VAL_UP)]);
143140
assert_eq!(pending, None);
144141
}
145142
}

0 commit comments

Comments
 (0)