|
@@ -54,11 +54,22 @@ typedef struct
|
|
|
uint16_t kc2;
|
|
|
} qk_tap_dance_pair_t;
|
|
|
|
|
|
+typedef struct
|
|
|
+{
|
|
|
+ uint16_t kc;
|
|
|
+ uint8_t layer;
|
|
|
+} qk_tap_dance_dual_role_t;
|
|
|
+
|
|
|
#define ACTION_TAP_DANCE_DOUBLE(kc1, kc2) { \
|
|
|
.fn = { NULL, qk_tap_dance_pair_finished, qk_tap_dance_pair_reset }, \
|
|
|
.user_data = (void *)&((qk_tap_dance_pair_t) { kc1, kc2 }), \
|
|
|
}
|
|
|
|
|
|
+#define ACTION_TAP_DANCE_DUAL_ROLE(kc, layer) { \
|
|
|
+ .fn = { NULL, qk_tap_dance_dual_role_finished, qk_tap_dance_dual_role_reset }, \
|
|
|
+ .user_data = (void *)&((qk_tap_dance_dual_role_t) { kc, layer }), \
|
|
|
+ }
|
|
|
+
|
|
|
#define ACTION_TAP_DANCE_FN(user_fn) { \
|
|
|
.fn = { NULL, user_fn, NULL }, \
|
|
|
.user_data = NULL, \
|
|
@@ -86,6 +97,9 @@ void reset_tap_dance (qk_tap_dance_state_t *state);
|
|
|
void qk_tap_dance_pair_finished (qk_tap_dance_state_t *state, void *user_data);
|
|
|
void qk_tap_dance_pair_reset (qk_tap_dance_state_t *state, void *user_data);
|
|
|
|
|
|
+void qk_tap_dance_dual_role_finished (qk_tap_dance_state_t *state, void *user_data);
|
|
|
+void qk_tap_dance_dual_role_reset (qk_tap_dance_state_t *state, void *user_data);
|
|
|
+
|
|
|
#else
|
|
|
|
|
|
#define TD(n) KC_NO
|