diff options
| -rw-r--r-- | quantum/keycode_config.c | 28 | ||||
| -rw-r--r-- | quantum/keycode_config.h | 2 | ||||
| -rw-r--r-- | quantum/keymap_common.c | 3 | 
3 files changed, 32 insertions, 1 deletions
| diff --git a/quantum/keycode_config.c b/quantum/keycode_config.c index 4f7bc525ec..eb39c8fe00 100644 --- a/quantum/keycode_config.c +++ b/quantum/keycode_config.c @@ -88,3 +88,31 @@ uint16_t keycode_config(uint16_t keycode) {              return keycode;      }  } + +uint8_t mod_config(uint8_t mod) { +    keymap_config.raw = eeconfig_read_keymap(); +    if (keymap_config.swap_lalt_lgui) { +        if ((mod & MOD_RGUI) == MOD_LGUI) { +            mod &= ~MOD_LGUI; +            mod |= MOD_LALT; +        } else if ((mod & MOD_RALT) == MOD_LALT) { +            mod &= ~MOD_LALT; +            mod |= MOD_LGUI; +        } +    } +    if (keymap_config.swap_ralt_rgui) { +        if ((mod & MOD_RGUI) == MOD_RGUI) { +            mod &= ~MOD_RGUI; +            mod |= MOD_RALT; +        } else if ((mod & MOD_RALT) == MOD_RALT) { +            mod &= ~MOD_RALT; +            mod |= MOD_RGUI; +        } +    } +    if (keymap_config.no_gui) { +        mod &= ~MOD_LGUI; +        mod &= ~MOD_RGUI; +    } + +    return mod; +}
\ No newline at end of file diff --git a/quantum/keycode_config.h b/quantum/keycode_config.h index 293fefecfb..022f4bd19b 100644 --- a/quantum/keycode_config.h +++ b/quantum/keycode_config.h @@ -16,11 +16,13 @@  #include "eeconfig.h"  #include "keycode.h" +#include "action_code.h"  #ifndef KEYCODE_CONFIG_H  #define KEYCODE_CONFIG_H  uint16_t keycode_config(uint16_t keycode); +uint8_t mod_config(uint8_t mod);  /* NOTE: Not portable. Bit field order depends on implementation */  typedef union { diff --git a/quantum/keymap_common.c b/quantum/keymap_common.c index 9dafc8b516..b1460c53cc 100644 --- a/quantum/keymap_common.c +++ b/quantum/keymap_common.c @@ -123,7 +123,8 @@ action_t action_for_key(uint8_t layer, keypos_t key)              action.code = ACTION_LAYER_TAP_TOGGLE(keycode & 0xFF);              break;          case QK_MOD_TAP ... QK_MOD_TAP_MAX: -            action.code = ACTION_MODS_TAP_KEY((keycode >> 0x8) & 0x1F, keycode & 0xFF); +            mod = mod_config((keycode >> 0x8) & 0x1F); +            action.code = ACTION_MODS_TAP_KEY(mod, keycode & 0xFF);              break;      #ifdef BACKLIGHT_ENABLE          case BL_0 ... BL_15: | 
