From b8db3933b147927983464ef92df884fb42d1eb0e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Axel=20D=C3=B6rfler?= Date: Wed, 2 May 2007 16:48:21 +0000 Subject: [PATCH] Fixed a bug reported by Stippi: when a report from the USB device contained a key up and a key down event at the same time, the key repeat timer didn't work. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20978 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/add-ons/kernel/drivers/input/usb_hid/hid.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/add-ons/kernel/drivers/input/usb_hid/hid.c b/src/add-ons/kernel/drivers/input/usb_hid/hid.c index 05280a934c..0d86ea32ec 100644 --- a/src/add-ons/kernel/drivers/input/usb_hid/hid.c +++ b/src/add-ons/kernel/drivers/input/usb_hid/hid.c @@ -414,6 +414,7 @@ interpret_kb_buffer(hid_device_info *device) { uint8 modifiers = ((uint8*)device->buffer)[0]; uint8 bits = device->last_buffer[0] ^ modifiers; + bool timerSet = false; uint32 i, j; if (bits) { @@ -446,6 +447,7 @@ interpret_kb_buffer(hid_device_info *device) // unmapped key key = 0x200000 + ((uint8*)device->buffer)[i]; } + //dprintf("key down: %x, mapping: %lx\n", ((uint8*)device->buffer)[i], key); write_key(device, key, true); @@ -454,6 +456,7 @@ interpret_kb_buffer(hid_device_info *device) device->repeat_timer.key = key; add_timer(&device->repeat_timer.timer, timer_delay_hook, device->repeat_delay, B_ONE_SHOT_RELATIVE_TIMER); + timerSet = true; } } else break; @@ -485,7 +488,8 @@ interpret_kb_buffer(hid_device_info *device) } write_key(device, key, false); - cancel_timer(&device->repeat_timer.timer); + if (!timerSet) + cancel_timer(&device->repeat_timer.timer); } } else break;