aboutsummaryrefslogtreecommitdiff
path: root/hw/usb-hid.c
diff options
context:
space:
mode:
authorGerd Hoffmann <kraxel@redhat.com>2011-07-08 13:19:01 +0200
committerGerd Hoffmann <kraxel@redhat.com>2011-07-22 13:36:31 +0200
commite7e73892a66dd3850eb723ee2ef9ef3f4569529f (patch)
treede4c1a658f20a71ba8e343f30892d1a8e269d6f5 /hw/usb-hid.c
parentd1afc48b7cfdb4490f322d5d82a2aae6d545ec06 (diff)
downloadqemu-e7e73892a66dd3850eb723ee2ef9ef3f4569529f.zip
qemu-e7e73892a66dd3850eb723ee2ef9ef3f4569529f.tar.gz
qemu-e7e73892a66dd3850eb723ee2ef9ef3f4569529f.tar.bz2
usb-hid: fixup changed tracking.
Remove leftover calls to usb_hid_changed(). Take care to update the changed flag after delivering a event via GET_REPORT like we do when sending events via interrupt endpoint. Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
Diffstat (limited to 'hw/usb-hid.c')
-rw-r--r--hw/usb-hid.c9
1 files changed, 4 insertions, 5 deletions
diff --git a/hw/usb-hid.c b/hw/usb-hid.c
index d711b5c..b812da2 100644
--- a/hw/usb-hid.c
+++ b/hw/usb-hid.c
@@ -531,18 +531,15 @@ static void usb_keyboard_process_keycode(USBHIDState *hs)
case 0xe0:
if (s->modifiers & (1 << 9)) {
s->modifiers ^= 3 << 8;
- usb_hid_changed(hs);
return;
}
case 0xe1 ... 0xe7:
if (keycode & (1 << 7)) {
s->modifiers &= ~(1 << (hid_code & 0x0f));
- usb_hid_changed(hs);
return;
}
case 0xe8 ... 0xef:
s->modifiers |= 1 << (hid_code & 0x0f);
- usb_hid_changed(hs);
return;
}
@@ -769,10 +766,12 @@ static int usb_hid_handle_control(USBDevice *dev, USBPacket *p,
}
break;
case GET_REPORT:
- if (s->kind == USB_MOUSE || s->kind == USB_TABLET)
+ if (s->kind == USB_MOUSE || s->kind == USB_TABLET) {
ret = usb_pointer_poll(s, data, length);
- else if (s->kind == USB_KEYBOARD)
+ } else if (s->kind == USB_KEYBOARD) {
ret = usb_keyboard_poll(s, data, length);
+ }
+ s->changed = s->n > 0;
break;
case SET_REPORT:
if (s->kind == USB_KEYBOARD)