diff options
| author | Peter Maydell | 2014-10-02 16:01:48 +0200 |
|---|---|---|
| committer | Peter Maydell | 2014-10-02 16:01:48 +0200 |
| commit | b00a0ddb31a393b8386d30a9bef4d9bbb249e7ec (patch) | |
| tree | e08da05998e93519c178cdfe5ae01b319c0be14d /ui/input.c | |
| parent | Merge remote-tracking branch 'remotes/kraxel/tags/pull-console-20141002-1' in... (diff) | |
| parent | add input-send-event command (diff) | |
| download | qemu-b00a0ddb31a393b8386d30a9bef4d9bbb249e7ec.tar.gz qemu-b00a0ddb31a393b8386d30a9bef4d9bbb249e7ec.tar.xz qemu-b00a0ddb31a393b8386d30a9bef4d9bbb249e7ec.zip | |
Merge remote-tracking branch 'remotes/kraxel/tags/pull-input-20141002-1' into staging
input monitor patches: fix send-key release ordering
and new input-send-event command
# gpg: Signature made Thu 02 Oct 2014 09:10:44 BST using RSA key ID D3E87138
# gpg: Good signature from "Gerd Hoffmann (work) <kraxel@redhat.com>"
# gpg: aka "Gerd Hoffmann <gerd@kraxel.org>"
# gpg: aka "Gerd Hoffmann (private) <kraxel@gmail.com>"
* remotes/kraxel/tags/pull-input-20141002-1:
add input-send-event command
input: fix send-key monitor command release event ordering
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Diffstat (limited to 'ui/input.c')
| -rw-r--r-- | ui/input.c | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/ui/input.c b/ui/input.c index 89d9db78c0..002831ee72 100644 --- a/ui/input.c +++ b/ui/input.c @@ -122,6 +122,43 @@ qemu_input_find_handler(uint32_t mask, QemuConsole *con) return NULL; } +void qmp_input_send_event(int64_t console, InputEventList *events, + Error **errp) +{ + InputEventList *e; + QemuConsole *con; + + con = qemu_console_lookup_by_index(console); + if (!con) { + error_setg(errp, "console %" PRId64 " not found", console); + return; + } + + if (!runstate_is_running() && !runstate_check(RUN_STATE_SUSPENDED)) { + error_setg(errp, "VM not running"); + return; + } + + for (e = events; e != NULL; e = e->next) { + InputEvent *event = e->value; + + if (!qemu_input_find_handler(1 << event->kind, con)) { + error_setg(errp, "Input handler not found for " + "event type %s", + InputEventKind_lookup[event->kind]); + return; + } + } + + for (e = events; e != NULL; e = e->next) { + InputEvent *event = e->value; + + qemu_input_event_send(con, event); + } + + qemu_input_event_sync(); +} + static void qemu_input_transform_abs_rotate(InputEvent *evt) { switch (graphic_rotate) { |
