MCPcopy Create free account
hub / github.com/TyberiusPrime/KeyToKey / process_keys

Method process_keys

src/handlers/sequence.rs:47–104  ·  view source on GitHub ↗
(&mut self, events: &mut Vec<(Event, EventStatus)>, output: &mut T)

Source from the content-addressed store, hash-verified

45
46impl<T: USBKeyOut, M: Action> ProcessKeys<T> for Sequence<'_, M> {
47 fn process_keys(&mut self, events: &mut Vec<(Event, EventStatus)>, output: &mut T) ->HandlerResult {
48 let mut codes_to_delete: Vec<u32> = Vec::new();
49 // we need to scan for handled key releases if we don't see any unhandled ones -
50 // they might have triggered a different sequence, which set them to Handled
51 // but we still need to abort this one
52 let mut matched = false;
53 for (event, status) in iter_unhandled_mut(events).rev() {
54 match event {
55 Event::KeyRelease(kc) => {
56 matched = true;
57 if kc.keycode == self.sequence[self.pos as usize] {
58 if kc.keycode.is_private_keycode() {
59 *status = EventStatus::Handled;
60 }
61 self.pos += 1;
62 if self.pos == self.sequence.len() as u8 {
63 self.pos = 0;
64 for _ in 0..self.backspaces {
65 output.send_keys(&[KeyCode::BSpace]);
66 output.send_empty();
67 }
68 self.callback.on_trigger(output);
69 *status = EventStatus::Handled;
70 if !codes_to_delete.contains(&kc.original_keycode) {
71 codes_to_delete.push(kc.original_keycode);
72 }
73 }
74 } else {
75 self.pos = 0;
76 }
77 }
78 Event::KeyPress(kc) => {
79 if codes_to_delete.contains(&kc.original_keycode) {
80 *status = EventStatus::Handled;
81 }
82 if kc.keycode == self.sequence[self.pos as usize]
83 && kc.keycode.is_private_keycode()
84 {
85 *status = EventStatus::Handled;
86 }
87 }
88 _ => {}
89 }
90 }
91 if !matched {
92 for (event, _status) in events.iter() {
93 match event {
94 Event::KeyRelease(kc) => {
95 if kc.keycode != self.sequence[self.pos as usize] {
96 self.pos = 0;
97 }
98 }
99 _ => {}
100 }
101 }
102 }
103 HandlerResult::NoOp
104 }

Callers

nothing calls this directly

Calls 5

iter_unhandled_mutFunction · 0.85
is_private_keycodeMethod · 0.80
send_keysMethod · 0.80
send_emptyMethod · 0.80
on_triggerMethod · 0.45

Tested by

no test coverage detected