diff options
author | Didier Loiseau <didierloiseau+git@gmail.com> | 2016-04-06 00:19:12 +0200 |
---|---|---|
committer | Didier Loiseau <didierloiseau+git@gmail.com> | 2016-04-06 00:30:50 +0200 |
commit | 08871e56f78c08340bb229300c457c852105d155 (patch) | |
tree | 49a2f34cd63d06c0f7af4add7247284ca311a6ee /tmk_core | |
parent | 931b0a79fc071498c229b0051be0ebadd934a549 (diff) |
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)
Diffstat (limited to 'tmk_core')
-rw-r--r-- | tmk_core/common/action.c | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/tmk_core/common/action.c b/tmk_core/common/action.c index 2ccc0e0b94..9010896343 100644 --- a/tmk_core/common/action.c +++ b/tmk_core/common/action.c @@ -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(); } } |