]> git.donarmstrong.com Git - qmk_firmware.git/blobdiff - quantum/process_keycode/process_tap_dance.c
added the possibility to hav shifted(modded) tap dance
[qmk_firmware.git] / quantum / process_keycode / process_tap_dance.c
index 4fd45810bb547828ba189c8fc817f4be919633c5..f196a9cb6a194a36be1698c4e9422dcd29976a8a 100644 (file)
@@ -41,6 +41,24 @@ 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) {
+  qk_tap_dance_dual_role_t *pair = (qk_tap_dance_dual_role_t *)user_data;
+
+  if (state->count == 1) {
+    register_code16 (pair->kc);
+  } else if (state->count == 2) {
+    layer_move (pair->layer);
+  }
+}
+
+void qk_tap_dance_dual_role_reset (qk_tap_dance_state_t *state, void *user_data) {
+  qk_tap_dance_dual_role_t *pair = (qk_tap_dance_dual_role_t *)user_data;
+
+  if (state->count == 1) {
+    unregister_code16 (pair->kc);
+  }
+}
+
 static inline void _process_tap_dance_action_fn (qk_tap_dance_state_t *state,
                                                  void *user_data,
                                                  qk_tap_dance_user_fn_t fn)
@@ -61,6 +79,7 @@ static inline void process_tap_dance_action_on_dance_finished (qk_tap_dance_acti
     return;
   action->state.finished = true;
   add_mods(action->state.oneshot_mods);
+  add_weak_mods(action->state.weak_mods);
   send_keyboard_report();
   _process_tap_dance_action_fn (&action->state, action->user_data, action->fn.on_dance_finished);
 }
@@ -69,6 +88,7 @@ static inline void process_tap_dance_action_on_reset (qk_tap_dance_action_t *act
 {
   _process_tap_dance_action_fn (&action->state, action->user_data, action->fn.on_reset);
   del_mods(action->state.oneshot_mods);
+  del_weak_mods(action->state.weak_mods);
   send_keyboard_report();
 }
 
@@ -92,6 +112,8 @@ bool process_tap_dance(uint16_t keycode, keyrecord_t *record) {
       action->state.count++;
       action->state.timer = timer_read();
       action->state.oneshot_mods = get_oneshot_mods();
+      action->state.weak_mods = get_mods();
+      action->state.weak_mods |= get_weak_mods();
       process_tap_dance_action_on_each_tap (action);
 
       if (last_td && last_td != keycode) {