~ruther/qmk_firmware

08871e56f78c08340bb229300c457c852105d155 — Didier Loiseau 9 years ago 931b0a7
Fix issue #221: LGUI(KC_LSFT) does not work

on mod keys, register LGUI, LSFT etc. as normal mods
 instead of weak mods:
 - they won't be cleared when pressing another key (#188)
 - they won't be cleared by layer switching
 - LSFT(KC_LGUI) will now have the same behavior as LGUI(KC_LSFT)
1 files changed, 12 insertions(+), 2 deletions(-)

M tmk_core/common/action.c
M tmk_core/common/action.c => tmk_core/common/action.c +12 -2
@@ 88,14 88,24 @@ void process_action(keyrecord_t *record)
                                                                action.key.mods<<4;
                if (event.pressed) {
                    if (mods) {
                        add_weak_mods(mods);
                        if (IS_MOD(action.key.code)) {
                            // e.g. LSFT(KC_LGUI): we don't want the LSFT to be weak as it would make it useless.
                            // this also makes LSFT(KC_LGUI) behave exactly the same as LGUI(KC_LSFT)
                            add_mods(mods);
                        } else {
                            add_weak_mods(mods);
                        }
                        send_keyboard_report();
                    }
                    register_code(action.key.code);
                } else {
                    unregister_code(action.key.code);
                    if (mods) {
                        del_weak_mods(mods);
                        if (IS_MOD(action.key.code)) {
                            del_mods(mods);
                        } else {
                            del_weak_mods(mods);
                        }
                        send_keyboard_report();
                    }
                }