mirror of
				https://github.com/mfulz/qmk_firmware.git
				synced 2025-10-31 13:22:31 +01:00 
			
		
		
		
	Merge branch 'modifier-release-fix' of https://github.com/eltang/qmk_firmware into modifier-release-fix
This commit is contained in:
		
						commit
						97cc44e063
					
				| @ -55,7 +55,7 @@ void action_exec(keyevent_t event) | |||||||
| 
 | 
 | ||||||
| #if !defined(NO_ACTION_LAYER) && defined(PREVENT_STUCK_MODIFIERS) | #if !defined(NO_ACTION_LAYER) && defined(PREVENT_STUCK_MODIFIERS) | ||||||
| bool disable_action_cache = false; | bool disable_action_cache = false; | ||||||
| int8_t pressed_actions_cache[MATRIX_ROWS][MATRIX_COLS]; | uint8_t source_layers_cache[5][(MATRIX_ROWS * MATRIX_COLS + 7) / 8] = {0}; | ||||||
| 
 | 
 | ||||||
| void process_action_nocache(keyrecord_t *record) | void process_action_nocache(keyrecord_t *record) | ||||||
| { | { | ||||||
| @ -82,11 +82,23 @@ action_t store_or_get_action(bool pressed, keypos_t key) | |||||||
|     if (disable_action_cache) { |     if (disable_action_cache) { | ||||||
|         return layer_switch_get_action(key); |         return layer_switch_get_action(key); | ||||||
|     } |     } | ||||||
| 
 |     uint8_t key_number = key.col + (key.row * MATRIX_COLS); | ||||||
|  |     uint8_t storage_row = key_number / 8; | ||||||
|  |     uint8_t storage_bit = key_number % 8; | ||||||
|  |     uint8_t layer; | ||||||
|     if (pressed) { |     if (pressed) { | ||||||
|         pressed_actions_cache[key.row][key.col] = layer_switch_get_layer(key); |         layer = layer_switch_get_layer(key); | ||||||
|  |         for (uint8_t bit_number = 0; bit_number <= 4; bit_number++) { | ||||||
|  |             source_layers_cache[bit_number][storage_row] ^= (-(bool)((layer & (1U << bit_number)) != 0) ^ source_layers_cache[bit_number][storage_row])) & (1U << storage_bit); | ||||||
|  |         } | ||||||
|     } |     } | ||||||
|     return action_for_key(pressed_actions_cache[key.row][key.col], key); |     else { | ||||||
|  |         layer = 0; | ||||||
|  |         for (uint8_t bit_number = 0; bit_number <= 4; bit_number++) { | ||||||
|  |             layer |= (uint8_t)((source_layers_cache[bit_number][storage_row] & (1U << storage_bit)) != 0) << bit_number; | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |     return action_for_key(layer, key); | ||||||
| #else | #else | ||||||
|     return layer_switch_get_action(key); |     return layer_switch_get_action(key); | ||||||
| #endif | #endif | ||||||
|  | |||||||
| @ -61,7 +61,6 @@ void action_function(keyrecord_t *record, uint8_t id, uint8_t opt); | |||||||
| /* Utilities for actions.  */ | /* Utilities for actions.  */ | ||||||
| #if !defined(NO_ACTION_LAYER) && defined(PREVENT_STUCK_MODIFIERS) | #if !defined(NO_ACTION_LAYER) && defined(PREVENT_STUCK_MODIFIERS) | ||||||
| extern bool disable_action_cache; | extern bool disable_action_cache; | ||||||
| extern int8_t pressed_actions_cache[MATRIX_ROWS][MATRIX_COLS]; |  | ||||||
| #endif | #endif | ||||||
| void process_action_nocache(keyrecord_t *record); | void process_action_nocache(keyrecord_t *record); | ||||||
| void process_action(keyrecord_t *record); | void process_action(keyrecord_t *record); | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Wojciech Siewierski
						Wojciech Siewierski