Fix bug in do_code16() (#6935)
				
					
				
			* Fix bug in `do_code16()` * Remove qk_ mods functions
This commit is contained in:
		
							parent
							
								
									4522519079
								
							
						
					
					
						commit
						63f4806d7a
					
				
					 3 changed files with 45 additions and 37 deletions
				
			
		| 
						 | 
				
			
			@ -85,44 +85,28 @@ static void do_code16(uint16_t code, void (*f)(uint8_t)) {
 | 
			
		|||
            return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (code & QK_LCTL) f(KC_LCTL);
 | 
			
		||||
    if (code & QK_LSFT) f(KC_LSFT);
 | 
			
		||||
    if (code & QK_LALT) f(KC_LALT);
 | 
			
		||||
    if (code & QK_LGUI) f(KC_LGUI);
 | 
			
		||||
    uint8_t mods_to_send = 0;
 | 
			
		||||
 | 
			
		||||
    if (code < QK_RMODS_MIN) return;
 | 
			
		||||
    if (code & QK_RMODS_MIN) { // Right mod flag is set
 | 
			
		||||
        if (code & QK_LCTL) mods_to_send |= MOD_BIT(KC_RCTL);
 | 
			
		||||
        if (code & QK_LSFT) mods_to_send |= MOD_BIT(KC_RSFT);
 | 
			
		||||
        if (code & QK_LALT) mods_to_send |= MOD_BIT(KC_RALT);
 | 
			
		||||
        if (code & QK_LGUI) mods_to_send |= MOD_BIT(KC_RGUI);
 | 
			
		||||
    } else {
 | 
			
		||||
        if (code & QK_LCTL) mods_to_send |= MOD_BIT(KC_LCTL);
 | 
			
		||||
        if (code & QK_LSFT) mods_to_send |= MOD_BIT(KC_LSFT);
 | 
			
		||||
        if (code & QK_LALT) mods_to_send |= MOD_BIT(KC_LALT);
 | 
			
		||||
        if (code & QK_LGUI) mods_to_send |= MOD_BIT(KC_LGUI);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (code & QK_RCTL) f(KC_RCTL);
 | 
			
		||||
    if (code & QK_RSFT) f(KC_RSFT);
 | 
			
		||||
    if (code & QK_RALT) f(KC_RALT);
 | 
			
		||||
    if (code & QK_RGUI) f(KC_RGUI);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static inline void qk_register_weak_mods(uint8_t kc) {
 | 
			
		||||
    add_weak_mods(MOD_BIT(kc));
 | 
			
		||||
    send_keyboard_report();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static inline void qk_unregister_weak_mods(uint8_t kc) {
 | 
			
		||||
    del_weak_mods(MOD_BIT(kc));
 | 
			
		||||
    send_keyboard_report();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static inline void qk_register_mods(uint8_t kc) {
 | 
			
		||||
    add_weak_mods(MOD_BIT(kc));
 | 
			
		||||
    send_keyboard_report();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static inline void qk_unregister_mods(uint8_t kc) {
 | 
			
		||||
    del_weak_mods(MOD_BIT(kc));
 | 
			
		||||
    send_keyboard_report();
 | 
			
		||||
    f(mods_to_send);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void register_code16(uint16_t code) {
 | 
			
		||||
    if (IS_MOD(code) || code == KC_NO) {
 | 
			
		||||
        do_code16(code, qk_register_mods);
 | 
			
		||||
        do_code16(code, register_mods);
 | 
			
		||||
    } else {
 | 
			
		||||
        do_code16(code, qk_register_weak_mods);
 | 
			
		||||
        do_code16(code, register_weak_mods);
 | 
			
		||||
    }
 | 
			
		||||
    register_code(code);
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -130,9 +114,9 @@ void register_code16(uint16_t code) {
 | 
			
		|||
void unregister_code16(uint16_t code) {
 | 
			
		||||
    unregister_code(code);
 | 
			
		||||
    if (IS_MOD(code) || code == KC_NO) {
 | 
			
		||||
        do_code16(code, qk_unregister_mods);
 | 
			
		||||
        do_code16(code, unregister_mods);
 | 
			
		||||
    } else {
 | 
			
		||||
        do_code16(code, qk_unregister_weak_mods);
 | 
			
		||||
        do_code16(code, unregister_weak_mods);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -868,9 +868,9 @@ void tap_code(uint8_t code) {
 | 
			
		|||
    unregister_code(code);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/** \brief Utilities for actions. (FIXME: Needs better description)
 | 
			
		||||
/** \brief Adds the given physically pressed modifiers and sends a keyboard report immediately.
 | 
			
		||||
 *
 | 
			
		||||
 * FIXME: Needs documentation.
 | 
			
		||||
 * \param mods A bitfield of modifiers to unregister.
 | 
			
		||||
 */
 | 
			
		||||
void register_mods(uint8_t mods) {
 | 
			
		||||
    if (mods) {
 | 
			
		||||
| 
						 | 
				
			
			@ -879,9 +879,9 @@ void register_mods(uint8_t mods) {
 | 
			
		|||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/** \brief Utilities for actions. (FIXME: Needs better description)
 | 
			
		||||
/** \brief Removes the given physically pressed modifiers and sends a keyboard report immediately.
 | 
			
		||||
 *
 | 
			
		||||
 * FIXME: Needs documentation.
 | 
			
		||||
 * \param mods A bitfield of modifiers to unregister.
 | 
			
		||||
 */
 | 
			
		||||
void unregister_mods(uint8_t mods) {
 | 
			
		||||
    if (mods) {
 | 
			
		||||
| 
						 | 
				
			
			@ -890,6 +890,28 @@ void unregister_mods(uint8_t mods) {
 | 
			
		|||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/** \brief Adds the given weak modifiers and sends a keyboard report immediately.
 | 
			
		||||
 *
 | 
			
		||||
 * \param mods A bitfield of modifiers to register.
 | 
			
		||||
 */
 | 
			
		||||
void register_weak_mods(uint8_t mods) {
 | 
			
		||||
    if (mods) {
 | 
			
		||||
        add_weak_mods(mods);
 | 
			
		||||
        send_keyboard_report();
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/** \brief Removes the given weak modifiers and sends a keyboard report immediately.
 | 
			
		||||
 *
 | 
			
		||||
 * \param mods A bitfield of modifiers to unregister.
 | 
			
		||||
 */
 | 
			
		||||
void unregister_weak_mods(uint8_t mods) {
 | 
			
		||||
    if (mods) {
 | 
			
		||||
        del_weak_mods(mods);
 | 
			
		||||
        send_keyboard_report();
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/** \brief Utilities for actions. (FIXME: Needs better description)
 | 
			
		||||
 *
 | 
			
		||||
 * FIXME: Needs documentation.
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -90,6 +90,8 @@ void unregister_code(uint8_t code);
 | 
			
		|||
void tap_code(uint8_t code);
 | 
			
		||||
void register_mods(uint8_t mods);
 | 
			
		||||
void unregister_mods(uint8_t mods);
 | 
			
		||||
void register_weak_mods(uint8_t mods);
 | 
			
		||||
void unregister_weak_mods(uint8_t mods);
 | 
			
		||||
// void set_mods(uint8_t mods);
 | 
			
		||||
void clear_keyboard(void);
 | 
			
		||||
void clear_keyboard_but_mods(void);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue