Commit 857cccac authored by Michael Walle's avatar Michael Walle
Browse files

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: default avatarMichael Walle <michael@walle.cc>
Cc: Gerd Hoffmann <kraxel@redhat.com>
parent ab0302ee
Loading
Loading
Loading
Loading
+12 −7
Original line number Diff line number Diff line
@@ -194,12 +194,15 @@ 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);
        }
    }
}

static void softusb_mouse_hid_datain(HIDState *hs)
{
@@ -212,6 +215,7 @@ static void softusb_mouse_hid_datain(HIDState *hs)
        return;
    }

    while (hid_has_events(hs)) {
        len = hid_pointer_poll(hs, s->mouse_hid_buffer,
                sizeof(s->mouse_hid_buffer));

@@ -219,6 +223,7 @@ static void softusb_mouse_hid_datain(HIDState *hs)
            softusb_mouse_changed(s);
        }
    }
}

static void milkymist_softusb_reset(DeviceState *d)
{