aboutsummaryrefslogtreecommitdiffstats
path: root/quantum/process_keycode/process_tap_dance.h
diff options
context:
space:
mode:
authorStephen Ostermiller2025-11-23 12:32:36 +0100
committerGitHub2025-11-23 12:32:36 +0100
commit1a954e8da5dcbd81eeccb9d6ac41b6eda64d7b85 (patch)
tree4f09599d467a9c9bbb1dde722511139fa965ff03 /quantum/process_keycode/process_tap_dance.h
parentc7e17538eea98540dbee71de5d024db99f7786fe (diff)
Reduce tap dance memory usage, move state out of data (#25415)
* Use less tap dance memory. Use dynamically allocated sparse array for tap dance state, dynamically allocate tap dance state when needed and free it when the tap dance is done. * new approach * Use null, check for null * Reformat with docker * Use uint8 with idx rather than uint16 with keycode in state * fix accidental change * reformat * Add null check * add documentation tip suggested by tzarc * Only allow tap dance state allocation on key down, not on key up Co-authored-by: Sergey Vlasov <sigprof@gmail.com> * Only allow tap dance allocation on key down, not on key up Co-authored-by: Sergey Vlasov <sigprof@gmail.com> * add user action required section --------- Co-authored-by: Sergey Vlasov <sigprof@gmail.com>
Diffstat (limited to 'quantum/process_keycode/process_tap_dance.h')
-rw-r--r--quantum/process_keycode/process_tap_dance.h11
1 files changed, 7 insertions, 4 deletions
diff --git a/quantum/process_keycode/process_tap_dance.h b/quantum/process_keycode/process_tap_dance.h
index 5cccbdf439..5a972cee5a 100644
--- a/quantum/process_keycode/process_tap_dance.h
+++ b/quantum/process_keycode/process_tap_dance.h
@@ -28,15 +28,16 @@ typedef struct {
#ifndef NO_ACTION_ONESHOT
uint8_t oneshot_mods;
#endif
- bool pressed : 1;
- bool finished : 1;
- bool interrupted : 1;
+ bool pressed : 1;
+ bool finished : 1;
+ bool interrupted : 1;
+ bool in_use : 1;
+ uint8_t index;
} tap_dance_state_t;
typedef void (*tap_dance_user_fn_t)(tap_dance_state_t *state, void *user_data);
typedef struct tap_dance_action_t {
- tap_dance_state_t state;
struct {
tap_dance_user_fn_t on_each_tap;
tap_dance_user_fn_t on_dance_finished;
@@ -80,6 +81,8 @@ typedef struct {
void reset_tap_dance(tap_dance_state_t *state);
+tap_dance_state_t *tap_dance_get_state(uint8_t tap_dance_idx);
+
/* To be used internally */
bool preprocess_tap_dance(uint16_t keycode, keyrecord_t *record);