summaryrefslogtreecommitdiff
path: root/hw/input
diff options
context:
space:
mode:
authorMichael Walle <michael@walle.cc>2014-10-04 20:00:07 +0200
committerMichael Walle <michael@walle.cc>2014-12-29 17:24:38 +0100
commit857cccac0d9450d9be6af1ca3e5b7730b408b33c (patch)
tree3d2af0314435143f6376a84f1b8cc02e0c42ea44 /hw/input
parentab0302ee764fd702465aef6d88612cdff4302809 (diff)
downloadqemu-857cccac0d9450d9be6af1ca3e5b7730b408b33c.tar.gz
milkymist: softmmu: fix event handling
Keys which send more than one scancode (esp. windows key) weren't handled correctly since commit 1ff5eedd. Two events were put into the input event queue but only one was processed. This fixes this by fetching all pending events in the callback handler. Signed-off-by: Michael Walle <michael@walle.cc> Cc: Gerd Hoffmann <kraxel@redhat.com>
Diffstat (limited to 'hw/input')
-rw-r--r--hw/input/milkymist-softusb.c19
1 files changed, 12 insertions, 7 deletions
diff --git a/hw/input/milkymist-softusb.c b/hw/input/milkymist-softusb.c
index 5a427f0b33..7b0f4db88d 100644
--- a/hw/input/milkymist-softusb.c
+++ b/hw/input/milkymist-softusb.c
@@ -194,10 +194,13 @@ static void softusb_kbd_hid_datain(HIDState *hs)
return;
}
- len = hid_keyboard_poll(hs, s->kbd_hid_buffer, sizeof(s->kbd_hid_buffer));
+ while (hid_has_events(hs)) {
+ len = hid_keyboard_poll(hs, s->kbd_hid_buffer,
+ sizeof(s->kbd_hid_buffer));
- if (len == 8) {
- softusb_kbd_changed(s);
+ if (len == 8) {
+ softusb_kbd_changed(s);
+ }
}
}
@@ -212,11 +215,13 @@ static void softusb_mouse_hid_datain(HIDState *hs)
return;
}
- len = hid_pointer_poll(hs, s->mouse_hid_buffer,
- sizeof(s->mouse_hid_buffer));
+ while (hid_has_events(hs)) {
+ len = hid_pointer_poll(hs, s->mouse_hid_buffer,
+ sizeof(s->mouse_hid_buffer));
- if (len == 4) {
- softusb_mouse_changed(s);
+ if (len == 4) {
+ softusb_mouse_changed(s);
+ }
}
}