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 <dh.herrmann@googlemail.com>
This commit is contained in:
David Herrmann 2012-10-15 22:59:31 +02:00
parent 3254848124
commit 94f11b18b9

View File

@ -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;