diff options
Diffstat (limited to 'keyboards/ploopyco/madromys/keymaps/bjc')
| -rw-r--r-- | keyboards/ploopyco/madromys/keymaps/bjc/keymap.c | 18 | ||||
| -rw-r--r-- | keyboards/ploopyco/madromys/keymaps/bjc/rules.mk | 1 |
2 files changed, 16 insertions, 3 deletions
diff --git a/keyboards/ploopyco/madromys/keymaps/bjc/keymap.c b/keyboards/ploopyco/madromys/keymaps/bjc/keymap.c index aa5a127..aa75a63 100644 --- a/keyboards/ploopyco/madromys/keymaps/bjc/keymap.c +++ b/keyboards/ploopyco/madromys/keymaps/bjc/keymap.c @@ -26,6 +26,10 @@ enum { KC_TOG_HOLD = QK_USER }; +// if the layer hold button is released before this timeout, it +// becomes a toggle. +const uint32_t layer_hold_timeout = 200; + // top left left, top left, top right, top right right, bottom left, bottom right const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [DEFAULT] = LAYOUT(MS_BTN4, MS_BTN5, MS_BTN3, MS_BTN2, MS_BTN1, KC_TOG_HOLD), @@ -52,16 +56,24 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { switch (keycode) { case KC_TOG_HOLD: if (record->event.pressed) { - fn1_layer_on = !fn1_layer_on; + /* + * if the layer is already on, do nothing, as the release event + * (where we want the layer to turn off) will compare against, + * what is at this point a very old ‘fn1_release_timer’ and so + * should release automatically. + */ + if (!fn1_layer_on) { + fn1_layer_on = true; + fn1_release_timer = timer_read(); + } } else { - if (timer_elapsed(fn1_release_timer) > 100) { + if (timer_elapsed(fn1_release_timer) > layer_hold_timeout) { fn1_layer_on = false; } } if (fn1_layer_on) { layer_on(FN1); - fn1_release_timer = timer_read(); } else { layer_off(FN1); } diff --git a/keyboards/ploopyco/madromys/keymaps/bjc/rules.mk b/keyboards/ploopyco/madromys/keymaps/bjc/rules.mk index 59222a6..0757206 100644 --- a/keyboards/ploopyco/madromys/keymaps/bjc/rules.mk +++ b/keyboards/ploopyco/madromys/keymaps/bjc/rules.mk @@ -1 +1,2 @@ #VIA_ENABLE = yes +DEFERRED_EXEC_ENABLE = yes |
