From 235fa8a3617439b918c3a88650411e52148a5c22 Mon Sep 17 00:00:00 2001 From: Lephe Date: Sun, 7 Jan 2024 16:47:51 +0100 Subject: [PATCH] keydev: fix timing or repeat release --- TODO | 1 - src/keysc/keydev.c | 26 ++++++++++++++++---------- 2 files changed, 16 insertions(+), 11 deletions(-) diff --git a/TODO b/TODO index a88cfc1..d6d3e38 100644 --- a/TODO +++ b/TODO @@ -17,7 +17,6 @@ Extensions on existing code: * core: run destructors when a task-switch results in leaving the app * fs: support read-only files backed with GetBlockAddress() on fx-CG * kernel: SH4- or G-III-specific linker scripts? -* keysc: global shortcut SHIFT+0+EXIT for abort() as an infinite loop break Future directions: * Audio playback using TSWilliamson's libsnd method diff --git a/src/keysc/keydev.c b/src/keysc/keydev.c index 7850d39..cc207ce 100644 --- a/src/keysc/keydev.c +++ b/src/keysc/keydev.c @@ -142,6 +142,22 @@ void keydev_tick(keydev_t *d, uint us) d->time++; + /* Disable repeat if the repeating key was released */ + if(d->rep_key != 0) + { + int row = (d->rep_key >> 4); + int col = 0x80 >> (d->rep_key & 0x7); + if(!(d->state_now[row] & col)) + { + d->rep_key = 0; + d->rep_count = -1; + d->rep_time = -1; + d->rep_delay = -1; + d->delayed_shift = 0; + d->delayed_alpha = 0; + } + } + if(d->rep_key != 0) { if(d->rep_delay >= 0) @@ -193,16 +209,6 @@ key_event_t keydev_unqueue_event(keydev_t *d) { d->state_queue[row] &= ~col; d->state_flips[row] ^= col; - /* End the current repeating streak */ - if(d->rep_key == ev.key) - { - d->rep_key = 0; - d->rep_count = -1; - d->rep_time = -1; - d->rep_delay = -1; - d->delayed_shift = 0; - d->delayed_alpha = 0; - } } return ev;