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:
parent
3254848124
commit
94f11b18b9
@ -214,10 +214,11 @@ static void uxkb_dev_repeat(struct uterm_input_dev *dev, unsigned int state)
|
|||||||
const uint32_t *keysyms;
|
const uint32_t *keysyms;
|
||||||
struct itimerspec spec;
|
struct itimerspec spec;
|
||||||
|
|
||||||
if (state == KEY_RELEASED &&
|
if (dev->repeating && dev->repeat_event.keycode == dev->event.keycode) {
|
||||||
dev->repeat_event.keycode == dev->event.keycode) {
|
if (state == KEY_RELEASED) {
|
||||||
dev->repeating = false;
|
dev->repeating = false;
|
||||||
ev_timer_update(dev->repeat_timer, NULL);
|
ev_timer_update(dev->repeat_timer, NULL);
|
||||||
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -246,13 +247,12 @@ static void uxkb_dev_repeat(struct uterm_input_dev *dev, unsigned int state)
|
|||||||
num_keysyms, keysyms);
|
num_keysyms, keysyms);
|
||||||
if (ret)
|
if (ret)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
return;
|
||||||
} else {
|
} else {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (dev->repeating)
|
|
||||||
return;
|
|
||||||
|
|
||||||
dev->repeating = true;
|
dev->repeating = true;
|
||||||
spec.it_interval.tv_sec = 0;
|
spec.it_interval.tv_sec = 0;
|
||||||
spec.it_interval.tv_nsec = dev->input->repeat_rate * 1000000;
|
spec.it_interval.tv_nsec = dev->input->repeat_rate * 1000000;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user