aboutsummaryrefslogtreecommitdiffstats
path: root/docs/ChangeLog
diff options
context:
space:
mode:
Diffstat (limited to 'docs/ChangeLog')
-rw-r--r--docs/ChangeLog/20250831/pr25415.md47
1 files changed, 47 insertions, 0 deletions
diff --git a/docs/ChangeLog/20250831/pr25415.md b/docs/ChangeLog/20250831/pr25415.md
new file mode 100644
index 0000000000..54eb8c737e
--- /dev/null
+++ b/docs/ChangeLog/20250831/pr25415.md
@@ -0,0 +1,47 @@
+# Tap dance state removed from `tap_dance_action_t`
+
+The tap dance state has been separated from the action structure. Custom tap dance functions now receive the state as a separate parameter instead of accessing it through `action->state`.
+
+## User Action Required
+
+If your keymap uses custom tap dance functions that access the tap dance state, you need to update your code.
+
+ - You can't use `action->state`. Instead you need to call `tap_dance_state_t *tap_dance_get_state(uint8_t tap_dance_idx)` to get the state.
+ - You now get a pointer to the state, so use `->` notation rather than `.` notation to get fields from it.
+
+### Before:
+```c
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ tap_dance_action_t *action;
+
+ switch (keycode) {
+ case TD(CT_CLN):
+ action = tap_dance_get(QK_TAP_DANCE_GET_INDEX(keycode));
+ if (!record->event.pressed && action->state.count && !action->state.finished) {
+ tap_dance_tap_hold_t *tap_hold = (tap_dance_tap_hold_t *)action->user_data;
+ tap_code16(tap_hold->tap);
+ }
+
+ }
+ return true;
+}
+```
+
+### After:
+```c
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ tap_dance_action_t *action;
+ tap_dance_state_t* state;
+
+ switch (keycode) {
+ case TD(CT_CLN):
+ action = tap_dance_get(QK_TAP_DANCE_GET_INDEX(keycode));
+ state = tap_dance_get_state(QK_TAP_DANCE_GET_INDEX(keycode));
+ if (!record->event.pressed && state != NULL && state->count && !state->finished) {
+ tap_dance_tap_hold_t *tap_hold = (tap_dance_tap_hold_t *)action->user_data;
+ tap_code16(tap_hold->tap);
+ }
+ }
+ return true;
+}
+```