diff options
Diffstat (limited to 'tmk_core/common/action_layer.c')
| -rw-r--r-- | tmk_core/common/action_layer.c | 23 |
1 files changed, 20 insertions, 3 deletions
diff --git a/tmk_core/common/action_layer.c b/tmk_core/common/action_layer.c index f3cd381ab..120ce3f51 100644 --- a/tmk_core/common/action_layer.c +++ b/tmk_core/common/action_layer.c | |||
| @@ -15,13 +15,22 @@ | |||
| 15 | */ | 15 | */ |
| 16 | uint32_t default_layer_state = 0; | 16 | uint32_t default_layer_state = 0; |
| 17 | 17 | ||
| 18 | /** \brief Default Layer State Set At user Level | ||
| 19 | * | ||
| 20 | * FIXME: Needs docs | ||
| 21 | */ | ||
| 22 | __attribute__((weak)) | ||
| 23 | uint32_t default_layer_state_set_user(uint32_t state) { | ||
| 24 | return state; | ||
| 25 | } | ||
| 26 | |||
| 18 | /** \brief Default Layer State Set At Keyboard Level | 27 | /** \brief Default Layer State Set At Keyboard Level |
| 19 | * | 28 | * |
| 20 | * FIXME: Needs docs | 29 | * FIXME: Needs docs |
| 21 | */ | 30 | */ |
| 22 | __attribute__((weak)) | 31 | __attribute__((weak)) |
| 23 | uint32_t default_layer_state_set_kb(uint32_t state) { | 32 | uint32_t default_layer_state_set_kb(uint32_t state) { |
| 24 | return state; | 33 | return default_layer_state_set_user(state); |
| 25 | } | 34 | } |
| 26 | 35 | ||
| 27 | /** \brief Default Layer State Set | 36 | /** \brief Default Layer State Set |
| @@ -35,7 +44,11 @@ static void default_layer_state_set(uint32_t state) | |||
| 35 | default_layer_debug(); debug(" to "); | 44 | default_layer_debug(); debug(" to "); |
| 36 | default_layer_state = state; | 45 | default_layer_state = state; |
| 37 | default_layer_debug(); debug("\n"); | 46 | default_layer_debug(); debug("\n"); |
| 47 | #ifdef STRICT_LAYER_RELEASE | ||
| 38 | clear_keyboard_but_mods(); // To avoid stuck keys | 48 | clear_keyboard_but_mods(); // To avoid stuck keys |
| 49 | #else | ||
| 50 | clear_keyboard_but_mods_and_keys(); // Don't reset held keys | ||
| 51 | #endif | ||
| 39 | } | 52 | } |
| 40 | 53 | ||
| 41 | /** \brief Default Layer Print | 54 | /** \brief Default Layer Print |
| @@ -118,7 +131,11 @@ void layer_state_set(uint32_t state) | |||
| 118 | layer_debug(); dprint(" to "); | 131 | layer_debug(); dprint(" to "); |
| 119 | layer_state = state; | 132 | layer_state = state; |
| 120 | layer_debug(); dprintln(); | 133 | layer_debug(); dprintln(); |
| 134 | #ifdef STRICT_LAYER_RELEASE | ||
| 121 | clear_keyboard_but_mods(); // To avoid stuck keys | 135 | clear_keyboard_but_mods(); // To avoid stuck keys |
| 136 | #else | ||
| 137 | clear_keyboard_but_mods_and_keys(); // Don't reset held keys | ||
| 138 | #endif | ||
| 122 | } | 139 | } |
| 123 | 140 | ||
| 124 | /** \brief Layer clear | 141 | /** \brief Layer clear |
| @@ -219,7 +236,7 @@ void layer_debug(void) | |||
| 219 | } | 236 | } |
| 220 | #endif | 237 | #endif |
| 221 | 238 | ||
| 222 | #if !defined(NO_ACTION_LAYER) && defined(PREVENT_STUCK_MODIFIERS) | 239 | #if !defined(NO_ACTION_LAYER) && !defined(STRICT_LAYER_RELEASE) |
| 223 | uint8_t source_layers_cache[(MATRIX_ROWS * MATRIX_COLS + 7) / 8][MAX_LAYER_BITS] = {{0}}; | 240 | uint8_t source_layers_cache[(MATRIX_ROWS * MATRIX_COLS + 7) / 8][MAX_LAYER_BITS] = {{0}}; |
| 224 | 241 | ||
| 225 | void update_source_layers_cache(keypos_t key, uint8_t layer) | 242 | void update_source_layers_cache(keypos_t key, uint8_t layer) |
| @@ -263,7 +280,7 @@ uint8_t read_source_layers_cache(keypos_t key) | |||
| 263 | */ | 280 | */ |
| 264 | action_t store_or_get_action(bool pressed, keypos_t key) | 281 | action_t store_or_get_action(bool pressed, keypos_t key) |
| 265 | { | 282 | { |
| 266 | #if !defined(NO_ACTION_LAYER) && defined(PREVENT_STUCK_MODIFIERS) | 283 | #if !defined(NO_ACTION_LAYER) && !defined(STRICT_LAYER_RELEASE) |
| 267 | if (disable_action_cache) { | 284 | if (disable_action_cache) { |
| 268 | return layer_switch_get_action(key); | 285 | return layer_switch_get_action(key); |
| 269 | } | 286 | } |
