diff options
Diffstat (limited to 'quantum/quantum.c')
| -rw-r--r-- | quantum/quantum.c | 32 |
1 files changed, 30 insertions, 2 deletions
diff --git a/quantum/quantum.c b/quantum/quantum.c index 63ffe2074..0aecd238e 100644 --- a/quantum/quantum.c +++ b/quantum/quantum.c | |||
| @@ -33,14 +33,42 @@ static void do_code16 (uint16_t code, void (*f) (uint8_t)) { | |||
| 33 | f(KC_RGUI); | 33 | f(KC_RGUI); |
| 34 | } | 34 | } |
| 35 | 35 | ||
| 36 | static inline void qk_register_weak_mods(uint8_t kc) { | ||
| 37 | add_weak_mods(MOD_BIT(kc)); | ||
| 38 | send_keyboard_report(); | ||
| 39 | } | ||
| 40 | |||
| 41 | static inline void qk_unregister_weak_mods(uint8_t kc) { | ||
| 42 | del_weak_mods(MOD_BIT(kc)); | ||
| 43 | send_keyboard_report(); | ||
| 44 | } | ||
| 45 | |||
| 46 | static inline void qk_register_mods(uint8_t kc) { | ||
| 47 | add_weak_mods(MOD_BIT(kc)); | ||
| 48 | send_keyboard_report(); | ||
| 49 | } | ||
| 50 | |||
| 51 | static inline void qk_unregister_mods(uint8_t kc) { | ||
| 52 | del_weak_mods(MOD_BIT(kc)); | ||
| 53 | send_keyboard_report(); | ||
| 54 | } | ||
| 55 | |||
| 36 | void register_code16 (uint16_t code) { | 56 | void register_code16 (uint16_t code) { |
| 37 | do_code16 (code, register_code); | 57 | if (IS_MOD(code) || code == KC_NO) { |
| 58 | do_code16 (code, qk_register_mods); | ||
| 59 | } else { | ||
| 60 | do_code16 (code, qk_register_weak_mods); | ||
| 61 | } | ||
| 38 | register_code (code); | 62 | register_code (code); |
| 39 | } | 63 | } |
| 40 | 64 | ||
| 41 | void unregister_code16 (uint16_t code) { | 65 | void unregister_code16 (uint16_t code) { |
| 42 | unregister_code (code); | 66 | unregister_code (code); |
| 43 | do_code16 (code, unregister_code); | 67 | if (IS_MOD(code) || code == KC_NO) { |
| 68 | do_code16 (code, qk_unregister_mods); | ||
| 69 | } else { | ||
| 70 | do_code16 (code, qk_unregister_weak_mods); | ||
| 71 | } | ||
| 44 | } | 72 | } |
| 45 | 73 | ||
| 46 | __attribute__ ((weak)) | 74 | __attribute__ ((weak)) |
