]> git.donarmstrong.com Git - qmk_firmware.git/commitdiff
Add a timeout to space-cadet shift.
authorGergely Nagy <algernon@madhouse-project.org>
Sat, 19 Nov 2016 10:32:09 +0000 (11:32 +0100)
committerGergely Nagy <algernon@madhouse-project.org>
Sat, 19 Nov 2016 10:32:09 +0000 (11:32 +0100)
When one holds a Space Cadet shift, to have it act as a shift, so that
mouse behaviour changes, when released without any other key pressed, it
still registers a paren. To remedy this, add a hold timeout: if the key
is held longer than TAPPING_TERM, it will not register the parens.

Fixes #884, with the side-effect of not being able to have parens
trigger the OS-side repeat anymore.

Signed-off-by: Gergely Nagy <algernon@madhouse-project.org>
quantum/quantum.c

index 098312e6ef545c15c0a8956b4d79094587893647..2addcb670ca204785dba4c94b3a21ea3d6b8fde3 100644 (file)
@@ -75,6 +75,7 @@ void reset_keyboard(void) {
 #endif
 
 static bool shift_interrupted[2] = {0, 0};
+static uint16_t scs_timer = 0;
 
 bool process_record_quantum(keyrecord_t *record) {
 
@@ -283,6 +284,7 @@ bool process_record_quantum(keyrecord_t *record) {
     case KC_LSPO: {
       if (record->event.pressed) {
         shift_interrupted[0] = false;
+        scs_timer = timer_read ();
         register_mods(MOD_BIT(KC_LSFT));
       }
       else {
@@ -292,7 +294,7 @@ bool process_record_quantum(keyrecord_t *record) {
             shift_interrupted[1] = true;
           }
         #endif
-        if (!shift_interrupted[0]) {
+        if (!shift_interrupted[0] && timer_elapsed(scs_timer) < TAPPING_TERM) {
           register_code(LSPO_KEY);
           unregister_code(LSPO_KEY);
         }
@@ -305,6 +307,7 @@ bool process_record_quantum(keyrecord_t *record) {
     case KC_RSPC: {
       if (record->event.pressed) {
         shift_interrupted[1] = false;
+        scs_timer = timer_read ();
         register_mods(MOD_BIT(KC_RSFT));
       }
       else {
@@ -314,7 +317,7 @@ bool process_record_quantum(keyrecord_t *record) {
             shift_interrupted[1] = true;
           }
         #endif
-        if (!shift_interrupted[1]) {
+        if (!shift_interrupted[1] && timer_elapsed(scs_timer) < TAPPING_TERM) {
           register_code(RSPC_KEY);
           unregister_code(RSPC_KEY);
         }