From 94f11b18b9324cd200e8fc633230b3530f9cd62e Mon Sep 17 00:00:00 2001 From: David Herrmann Date: Mon, 15 Oct 2012 22:59:31 +0200 Subject: [PATCH] uterm: input: fix resetting key-repeat timer during key-press We currently do not reset the key-repeat-delay when key-presses are changed fast enough to fall into the repeat-rate range. Therefore, we might get spurios key-repeats, even though the key itself wasn't held for repeat-delay milliseconds. Signed-off-by: David Herrmann --- src/uterm_input_uxkb.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/uterm_input_uxkb.c b/src/uterm_input_uxkb.c index 72bb652..5ba4557 100644 --- a/src/uterm_input_uxkb.c +++ b/src/uterm_input_uxkb.c @@ -214,10 +214,11 @@ static void uxkb_dev_repeat(struct uterm_input_dev *dev, unsigned int state) const uint32_t *keysyms; struct itimerspec spec; - if (state == KEY_RELEASED && - dev->repeat_event.keycode == dev->event.keycode) { - dev->repeating = false; - ev_timer_update(dev->repeat_timer, NULL); + if (dev->repeating && dev->repeat_event.keycode == dev->event.keycode) { + if (state == KEY_RELEASED) { + dev->repeating = false; + ev_timer_update(dev->repeat_timer, NULL); + } return; } @@ -246,13 +247,12 @@ static void uxkb_dev_repeat(struct uterm_input_dev *dev, unsigned int state) num_keysyms, keysyms); if (ret) return; + + return; } else { return; } - if (dev->repeating) - return; - dev->repeating = true; spec.it_interval.tv_sec = 0; spec.it_interval.tv_nsec = dev->input->repeat_rate * 1000000;