aboutsummaryrefslogtreecommitdiff
path: root/quantum/quantum.c
diff options
context:
space:
mode:
authorfauxpark <fauxpark@gmail.com>2019-10-16 10:02:09 +1100
committerJoel Challis <git@zvecr.com>2019-10-16 00:02:09 +0100
commit63f4806d7a67100fdf37b5f557ceb9d0982c0775 (patch)
treec942f96e391b32e91753516fe0b07af639fc5b97 /quantum/quantum.c
parent45225190794b438129d5b27d4fe5b756fdf2efc4 (diff)
downloadqmk_firmware-63f4806d7a67100fdf37b5f557ceb9d0982c0775.tar.gz
qmk_firmware-63f4806d7a67100fdf37b5f557ceb9d0982c0775.zip
Fix bug in `do_code16()` (#6935)
* Fix bug in `do_code16()` * Remove qk_ mods functions
Diffstat (limited to 'quantum/quantum.c')
-rw-r--r--quantum/quantum.c50
1 files changed, 17 insertions, 33 deletions
diff --git a/quantum/quantum.c b/quantum/quantum.c
index f4999456e..e615cfc0f 100644
--- a/quantum/quantum.c
+++ b/quantum/quantum.c
@@ -85,44 +85,28 @@ static void do_code16(uint16_t code, void (*f)(uint8_t)) {
85 return; 85 return;
86 } 86 }
87 87
88 if (code & QK_LCTL) f(KC_LCTL); 88 uint8_t mods_to_send = 0;
89 if (code & QK_LSFT) f(KC_LSFT);
90 if (code & QK_LALT) f(KC_LALT);
91 if (code & QK_LGUI) f(KC_LGUI);
92 89
93 if (code < QK_RMODS_MIN) return; 90 if (code & QK_RMODS_MIN) { // Right mod flag is set
94 91 if (code & QK_LCTL) mods_to_send |= MOD_BIT(KC_RCTL);
95 if (code & QK_RCTL) f(KC_RCTL); 92 if (code & QK_LSFT) mods_to_send |= MOD_BIT(KC_RSFT);
96 if (code & QK_RSFT) f(KC_RSFT); 93 if (code & QK_LALT) mods_to_send |= MOD_BIT(KC_RALT);
97 if (code & QK_RALT) f(KC_RALT); 94 if (code & QK_LGUI) mods_to_send |= MOD_BIT(KC_RGUI);
98 if (code & QK_RGUI) f(KC_RGUI); 95 } else {
99} 96 if (code & QK_LCTL) mods_to_send |= MOD_BIT(KC_LCTL);
100 97 if (code & QK_LSFT) mods_to_send |= MOD_BIT(KC_LSFT);
101static inline void qk_register_weak_mods(uint8_t kc) { 98 if (code & QK_LALT) mods_to_send |= MOD_BIT(KC_LALT);
102 add_weak_mods(MOD_BIT(kc)); 99 if (code & QK_LGUI) mods_to_send |= MOD_BIT(KC_LGUI);
103 send_keyboard_report(); 100 }
104}
105
106static inline void qk_unregister_weak_mods(uint8_t kc) {
107 del_weak_mods(MOD_BIT(kc));
108 send_keyboard_report();
109}
110
111static inline void qk_register_mods(uint8_t kc) {
112 add_weak_mods(MOD_BIT(kc));
113 send_keyboard_report();
114}
115 101
116static inline void qk_unregister_mods(uint8_t kc) { 102 f(mods_to_send);
117 del_weak_mods(MOD_BIT(kc));
118 send_keyboard_report();
119} 103}
120 104
121void register_code16(uint16_t code) { 105void register_code16(uint16_t code) {
122 if (IS_MOD(code) || code == KC_NO) { 106 if (IS_MOD(code) || code == KC_NO) {
123 do_code16(code, qk_register_mods); 107 do_code16(code, register_mods);
124 } else { 108 } else {
125 do_code16(code, qk_register_weak_mods); 109 do_code16(code, register_weak_mods);
126 } 110 }
127 register_code(code); 111 register_code(code);
128} 112}
@@ -130,9 +114,9 @@ void register_code16(uint16_t code) {
130void unregister_code16(uint16_t code) { 114void unregister_code16(uint16_t code) {
131 unregister_code(code); 115 unregister_code(code);
132 if (IS_MOD(code) || code == KC_NO) { 116 if (IS_MOD(code) || code == KC_NO) {
133 do_code16(code, qk_unregister_mods); 117 do_code16(code, unregister_mods);
134 } else { 118 } else {
135 do_code16(code, qk_unregister_weak_mods); 119 do_code16(code, unregister_weak_mods);
136 } 120 }
137} 121}
138 122