diff options
Diffstat (limited to 'users/danielo515/alt_tab.c')
-rw-r--r-- | users/danielo515/alt_tab.c | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/users/danielo515/alt_tab.c b/users/danielo515/alt_tab.c new file mode 100644 index 0000000000..1602ee6fb2 --- /dev/null +++ b/users/danielo515/alt_tab.c @@ -0,0 +1,38 @@ +#include "danielo515.h" +#include "alt_tab.h" + +bool altPressed = false; +__attribute__((weak)) void alt_tab_activated(void){}; +__attribute__((weak)) void alt_tab_deactivated(void){}; +extern bool onMac; + +// =============== ALT_TAB single key handling +bool process_alt_tab(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { + case ALT_TAB: + if (!record->event.pressed) { + return false; + } + if (altPressed) { + tap_code(KC_TAB); + } else { + altPressed = true; + onMac ? register_code(KC_LGUI) : register_code(KC_LALT); + tap_code(KC_TAB); + alt_tab_activated(); + } + // avoid alt releasing if the key is of movement + case KC_RIGHT ... KC_UP: + if (altPressed) { + return true; // yes QMK, do your stuff + } + } + // Reset sticky alt tab when any other key is pressed + if (altPressed) { + onMac ? unregister_code(KC_LGUI) : unregister_code(KC_LALT); + altPressed = false; + alt_tab_deactivated(); + return false; + } + return true; +}; |