Rev 3942 | Rev 3944 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 3942 | Rev 3943 | ||
---|---|---|---|
Line 61... | Line 61... | ||
61 | keybuffer_t keybuffer; |
61 | keybuffer_t keybuffer; |
62 | 62 | ||
63 | /** Currently active modifiers. */ |
63 | /** Currently active modifiers. */ |
64 | static unsigned mods = KM_NUM_LOCK; |
64 | static unsigned mods = KM_NUM_LOCK; |
65 | 65 | ||
- | 66 | /** Currently pressed lock keys. We track these to tackle autorepeat. */ |
|
- | 67 | static unsigned lock_keys; |
|
- | 68 | ||
66 | void kbd_push_scancode(int scancode) |
69 | void kbd_push_scancode(int scancode) |
67 | { |
70 | { |
68 | printf("scancode: 0x%x\n", scancode); |
71 | printf("scancode: 0x%x\n", scancode); |
69 | kbd_ctl_parse_scancode(scancode); |
72 | kbd_ctl_parse_scancode(scancode); |
70 | } |
73 | } |
Line 96... | Line 99... | ||
96 | case KC_NUM_LOCK: mod_mask = KM_NUM_LOCK; break; |
99 | case KC_NUM_LOCK: mod_mask = KM_NUM_LOCK; break; |
97 | case KC_SCROLL_LOCK: mod_mask = KM_SCROLL_LOCK; break; |
100 | case KC_SCROLL_LOCK: mod_mask = KM_SCROLL_LOCK; break; |
98 | default: mod_mask = 0; break; |
101 | default: mod_mask = 0; break; |
99 | } |
102 | } |
100 | 103 | ||
- | 104 | if (mod_mask != 0) { |
|
101 | if (mod_mask != 0 && type == KE_PRESS) |
105 | if (type == KE_PRESS) { |
- | 106 | /* |
|
- | 107 | * Only change lock state on transition from released |
|
- | 108 | * to pressed. This prevents autorepeat from messing |
|
- | 109 | * up the lock state. |
|
- | 110 | */ |
|
102 | mods = mods ^ mod_mask; |
111 | mods = mods ^ (mod_mask & ~lock_keys); |
- | 112 | lock_keys = lock_keys | mod_mask; |
|
- | 113 | } else { |
|
- | 114 | lock_keys = lock_keys & ~mod_mask; |
|
- | 115 | } |
|
- | 116 | } |
|
103 | 117 | ||
104 | printf("type: %d\n", type); |
118 | printf("type: %d\n", type); |
105 | printf("mods: 0x%x\n", mods); |
119 | printf("mods: 0x%x\n", mods); |
106 | printf("keycode: %u\n", key); |
120 | printf("keycode: %u\n", key); |
107 | 121 |