Commit 2330e9e7 authored by Gerd Hoffmann's avatar Gerd Hoffmann
Browse files

input-linux: factor out input_linux_handle_keyboard



No functional change.

Signed-off-by: default avatarGerd Hoffmann <kraxel@redhat.com>
Message-id: 1466067800-25434-3-git-send-email-kraxel@redhat.com
parent d4df42c4
Loading
Loading
Loading
Loading
+54 −49
Original line number Diff line number Diff line
@@ -188,53 +188,39 @@ static void input_linux_toggle_grab(InputLinux *il)
    }
}

static void input_linux_event_keyboard(void *opaque)
static void input_linux_handle_keyboard(InputLinux *il,
                                        struct input_event *event)
{
    InputLinux *il = opaque;
    struct input_event event;
    int rc;

    for (;;) {
        rc = read(il->fd, &event, sizeof(event));
        if (rc != sizeof(event)) {
            if (rc < 0 && errno != EAGAIN) {
                fprintf(stderr, "%s: read: %s\n", __func__, strerror(errno));
                qemu_set_fd_handler(il->fd, NULL, NULL, NULL);
                close(il->fd);
            }
            break;
        }

        switch (event.type) {
        case EV_KEY:
            if (event.value > 2 || (event.value > 1 && !il->repeat)) {
    if (event->type == EV_KEY) {
        if (event->value > 2 || (event->value > 1 && !il->repeat)) {
            /*
             * ignore autorepeat + unknown key events
             * 0 == up, 1 == down, 2 == autorepeat, other == undefined
             */
                continue;
            return;
        }
            if (event.code >= KEY_CNT) {
        if (event->code >= KEY_CNT) {
            /*
             * Should not happen.  But better safe than sorry,
             * and we make Coverity happy too.
             */
                continue;
            return;
        }

        /* keep track of key state */
            if (!il->keydown[event.code] && event.value) {
                il->keydown[event.code] = true;
        if (!il->keydown[event->code] && event->value) {
            il->keydown[event->code] = true;
            il->keycount++;
        }
            if (il->keydown[event.code] && !event.value) {
                il->keydown[event.code] = false;
        if (il->keydown[event->code] && !event->value) {
            il->keydown[event->code] = false;
            il->keycount--;
        }

        /* send event to guest when grab is active */
        if (il->grab_active) {
                int qcode = qemu_input_linux_to_qcode(event.code);
                qemu_input_event_send_key_qcode(NULL, qcode, event.value);
            int qcode = qemu_input_linux_to_qcode(event->code);
            qemu_input_event_send_key_qcode(NULL, qcode, event->value);
        }

        /* hotkey -> record switch request ... */
@@ -252,8 +238,27 @@ static void input_linux_event_keyboard(void *opaque)
            il->grab_request = false;
            input_linux_toggle_grab(il);
        }
    }
}

static void input_linux_event_keyboard(void *opaque)
{
    InputLinux *il = opaque;
    struct input_event event;
    int rc;

    for (;;) {
        rc = read(il->fd, &event, sizeof(event));
        if (rc != sizeof(event)) {
            if (rc < 0 && errno != EAGAIN) {
                fprintf(stderr, "%s: read: %s\n", __func__, strerror(errno));
                qemu_set_fd_handler(il->fd, NULL, NULL, NULL);
                close(il->fd);
            }
            break;
        }

        input_linux_handle_keyboard(il, &event);
    }
}