summary refs log tree commit diff
diff options
context:
space:
mode:
authorDidier Loiseau <didierloiseau+git@gmail.com>2016-04-06 00:19:12 +0200
committerDidier Loiseau <didierloiseau+git@gmail.com>2016-04-06 00:30:50 +0200
commit08871e56f78c08340bb229300c457c852105d155 (patch)
tree49a2f34cd63d06c0f7af4add7247284ca311a6ee
parent931b0a79fc071498c229b0051be0ebadd934a549 (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)
-rw-r--r--tmk_core/common/action.c14
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();
                     }
                 }