From f2c1d54c186c400ec676ec4d29ea4b8bf440c054 Mon Sep 17 00:00:00 2001 From: Gerd Hoffmann Date: Tue, 12 Jan 2016 11:45:43 +0100 Subject: [PATCH 1/5] console: add & use qemu_console_lookup_by_device_name We have two places needing this, and a third one will come shortly. So factor things out into a helper function to reduce code duplication. Signed-off-by: Gerd Hoffmann Reviewed-by: Daniel P. Berrange Reviewed-by: Markus Armbruster --- include/ui/console.h | 2 ++ ui/console.c | 23 +++++++++++++++++++++++ ui/input.c | 15 ++++----------- ui/vnc.c | 15 ++++----------- 4 files changed, 33 insertions(+), 22 deletions(-) diff --git a/include/ui/console.h b/include/ui/console.h index 6631b9690a..f63697182f 100644 --- a/include/ui/console.h +++ b/include/ui/console.h @@ -378,6 +378,8 @@ void graphic_hw_gl_block(QemuConsole *con, bool block); QemuConsole *qemu_console_lookup_by_index(unsigned int index); QemuConsole *qemu_console_lookup_by_device(DeviceState *dev, uint32_t head); +QemuConsole *qemu_console_lookup_by_device_name(const char *device_id, + uint32_t head, Error **errp); bool qemu_console_is_visible(QemuConsole *con); bool qemu_console_is_graphic(QemuConsole *con); bool qemu_console_is_fixedsize(QemuConsole *con); diff --git a/ui/console.c b/ui/console.c index 7db0fd27c9..ae61382d6e 100644 --- a/ui/console.c +++ b/ui/console.c @@ -1790,6 +1790,29 @@ QemuConsole *qemu_console_lookup_by_device(DeviceState *dev, uint32_t head) return NULL; } +QemuConsole *qemu_console_lookup_by_device_name(const char *device_id, + uint32_t head, Error **errp) +{ + DeviceState *dev; + QemuConsole *con; + + dev = qdev_find_recursive(sysbus_get_default(), device_id); + if (dev == NULL) { + error_set(errp, ERROR_CLASS_DEVICE_NOT_FOUND, + "Device '%s' not found", device_id); + return NULL; + } + + con = qemu_console_lookup_by_device(dev, head); + if (con == NULL) { + error_setg(errp, "Device %s (head %d) is not bound to a QemuConsole", + device_id, head); + return NULL; + } + + return con; +} + bool qemu_console_is_visible(QemuConsole *con) { return (con == active_console) || (con->dcls > 0); diff --git a/ui/input.c b/ui/input.c index bdcb974a89..fce99bab40 100644 --- a/ui/input.c +++ b/ui/input.c @@ -82,19 +82,12 @@ void qemu_input_handler_bind(QemuInputHandlerState *s, const char *device_id, int head, Error **errp) { - DeviceState *dev; QemuConsole *con; + Error *err = NULL; - dev = qdev_find_recursive(sysbus_get_default(), device_id); - if (dev == NULL) { - error_set(errp, ERROR_CLASS_DEVICE_NOT_FOUND, - "Device '%s' not found", device_id); - return; - } - - con = qemu_console_lookup_by_device(dev, head); - if (con == NULL) { - error_setg(errp, "Device %s is not bound to a QemuConsole", device_id); + con = qemu_console_lookup_by_device_name(device_id, head, &err); + if (err) { + error_propagate(errp, err); return; } diff --git a/ui/vnc.c b/ui/vnc.c index b6bbea5f44..f27df6dbc0 100644 --- a/ui/vnc.c +++ b/ui/vnc.c @@ -3732,19 +3732,12 @@ void vnc_display_open(const char *id, Error **errp) device_id = qemu_opt_get(opts, "display"); if (device_id) { - DeviceState *dev; int head = qemu_opt_get_number(opts, "head", 0); + Error *err = NULL; - dev = qdev_find_recursive(sysbus_get_default(), device_id); - if (dev == NULL) { - error_setg(errp, "Device '%s' not found", device_id); - goto fail; - } - - con = qemu_console_lookup_by_device(dev, head); - if (con == NULL) { - error_setg(errp, "Device %s is not bound to a QemuConsole", - device_id); + con = qemu_console_lookup_by_device_name(device_id, head, &err); + if (err) { + error_propagate(errp, err); goto fail; } } else { From b98d26e33327cf3009be5ead5d6dc8bc0c65dea8 Mon Sep 17 00:00:00 2001 From: Gerd Hoffmann Date: Tue, 12 Jan 2016 12:11:14 +0100 Subject: [PATCH 2/5] qapi: switch x-input-send-event from console to device+head Use display device qdev id and head number instead of console index to specify the QemuConsole. This makes things consistent with input devices (for input routing) and vnc server configuration, which both use display and head too. Signed-off-by: Gerd Hoffmann Reviewed-by: Daniel P. Berrange Reviewed-by: Markus Armbruster --- qapi-schema.json | 32 +++++++++++++++++--------------- qmp-commands.hx | 17 +++++++++-------- ui/input.c | 15 ++++++++++----- 3 files changed, 36 insertions(+), 28 deletions(-) diff --git a/qapi-schema.json b/qapi-schema.json index 7b8f2a13e6..b6322398c6 100644 --- a/qapi-schema.json +++ b/qapi-schema.json @@ -3829,24 +3829,24 @@ # # Send input event(s) to guest. # -# @console: #optional console to send event(s) to. -# This parameter can be used to send the input event to -# specific input devices in case (a) multiple input devices -# of the same kind are added to the virtual machine and (b) -# you have configured input routing (see docs/multiseat.txt) -# for those input devices. If input routing is not -# configured this parameter has no effect. -# If @console is missing, only devices that aren't associated -# with a console are admissible. -# If @console is specified, it must exist, and both devices -# associated with that console and devices not associated with a -# console are admissible, but the former take precedence. - -# +# @device: #optional display device to send event(s) to. +# @head: #optional head to send event(s) to, in case the +# display device supports multiple scanouts. # @events: List of InputEvent union. # # Returns: Nothing on success. # +# The @display and @head parameters can be used to send the input +# event to specific input devices in case (a) multiple input devices +# of the same kind are added to the virtual machine and (b) you have +# configured input routing (see docs/multiseat.txt) for those input +# devices. The parameters work exactly like the device and head +# properties of input devices. If @device is missing, only devices +# that have no input routing config are admissible. If @device is +# specified, both input devices with and without input routing config +# are admissible, but devices with input routing config take +# precedence. + # Since: 2.2 # # Note: this command is experimental, and not a stable API. Things that @@ -3856,7 +3856,9 @@ # ## { 'command': 'x-input-send-event', - 'data': { '*console':'int', 'events': [ 'InputEvent' ] } } + 'data': { '*device': 'str', + '*head' : 'int', + 'events' : [ 'InputEvent' ] } } ## # @NumaOptions diff --git a/qmp-commands.hx b/qmp-commands.hx index 13f158d568..b1a2b97f87 100644 --- a/qmp-commands.hx +++ b/qmp-commands.hx @@ -4671,8 +4671,9 @@ Send input event to guest. Arguments: -- "console": console index. (json-int, optional) -- "events": list of input events. +- "device": display device (json-string, optional) +- "head": display head (json-int, optional) +- "events": list of input events The consoles are visible in the qom tree, under /backend/console[$index]. They have a device link and head property, so @@ -4685,15 +4686,15 @@ Example (1): Press left mouse button. -> { "execute": "x-input-send-event", - "arguments": { "console": 0, + "arguments": { "device": "video0", "events": [ { "type": "btn", - "data" : { "down": true, "button": "Left" } } ] } } + "data" : { "down": true, "button": "Left" } } ] } } <- { "return": {} } -> { "execute": "x-input-send-event", - "arguments": { "console": 0, + "arguments": { "device": "video0", "events": [ { "type": "btn", - "data" : { "down": false, "button": "Left" } } ] } } + "data" : { "down": false, "button": "Left" } } ] } } <- { "return": {} } Example (2): @@ -4701,7 +4702,7 @@ Example (2): Press ctrl-alt-del. -> { "execute": "x-input-send-event", - "arguments": { "console": 0, "events": [ + "arguments": { "events": [ { "type": "key", "data" : { "down": true, "key": {"type": "qcode", "data": "ctrl" } } }, { "type": "key", "data" : { "down": true, @@ -4715,7 +4716,7 @@ Example (3): Move mouse pointer to absolute coordinates (20000, 400). -> { "execute": "x-input-send-event" , - "arguments": { "console": 0, "events": [ + "arguments": { "events": [ { "type": "abs", "data" : { "axis": "X", "value" : 20000 } }, { "type": "abs", "data" : { "axis": "Y", "value" : 400 } } ] } } <- { "return": {} } diff --git a/ui/input.c b/ui/input.c index fce99bab40..0887bb54ca 100644 --- a/ui/input.c +++ b/ui/input.c @@ -119,17 +119,22 @@ qemu_input_find_handler(uint32_t mask, QemuConsole *con) return NULL; } -void qmp_x_input_send_event(bool has_console, int64_t console, +void qmp_x_input_send_event(bool has_device, const char *device, + bool has_head, int64_t head, InputEventList *events, Error **errp) { InputEventList *e; QemuConsole *con; + Error *err = NULL; con = NULL; - if (has_console) { - con = qemu_console_lookup_by_index(console); - if (!con) { - error_setg(errp, "console %" PRId64 " not found", console); + if (has_device) { + if (!has_head) { + head = 0; + } + con = qemu_console_lookup_by_device_name(device, head, &err); + if (err) { + error_propagate(errp, err); return; } } From f22d0af076b159426c50a7a76ce2a42b8de95b52 Mon Sep 17 00:00:00 2001 From: Gerd Hoffmann Date: Tue, 12 Jan 2016 12:14:12 +0100 Subject: [PATCH 3/5] qapi: rename input buttons All lowercase, use-dash instead of CamelCase. Signed-off-by: Gerd Hoffmann Reviewed-by: Daniel P. Berrange Reviewed-by: Markus Armbruster Reviewed-by: Eric Blake --- hw/input/hid.c | 4 ++-- hw/input/ps2.c | 4 ++-- hw/input/virtio-input-hid.c | 4 ++-- monitor.c | 2 +- qapi-schema.json | 5 +---- qmp-commands.hx | 4 ++-- scripts/qapi.py | 1 - ui/cocoa.m | 4 ++-- ui/gtk.c | 4 ++-- ui/input-legacy.c | 4 ++-- ui/sdl.c | 4 ++-- ui/sdl2.c | 4 ++-- ui/spice-input.c | 4 ++-- ui/vnc.c | 4 ++-- 14 files changed, 24 insertions(+), 28 deletions(-) diff --git a/hw/input/hid.c b/hw/input/hid.c index b41efbb451..81a85fbdd2 100644 --- a/hw/input/hid.c +++ b/hw/input/hid.c @@ -140,9 +140,9 @@ static void hid_pointer_event(DeviceState *dev, QemuConsole *src, case INPUT_EVENT_KIND_BTN: if (evt->u.btn->down) { e->buttons_state |= bmap[evt->u.btn->button]; - if (evt->u.btn->button == INPUT_BUTTON_WHEELUP) { + if (evt->u.btn->button == INPUT_BUTTON_WHEEL_UP) { e->dz--; - } else if (evt->u.btn->button == INPUT_BUTTON_WHEELDOWN) { + } else if (evt->u.btn->button == INPUT_BUTTON_WHEEL_DOWN) { e->dz++; } } else { diff --git a/hw/input/ps2.c b/hw/input/ps2.c index b6f0e8d8eb..1bd0ddef81 100644 --- a/hw/input/ps2.c +++ b/hw/input/ps2.c @@ -406,9 +406,9 @@ static void ps2_mouse_event(DeviceState *dev, QemuConsole *src, case INPUT_EVENT_KIND_BTN: if (evt->u.btn->down) { s->mouse_buttons |= bmap[evt->u.btn->button]; - if (evt->u.btn->button == INPUT_BUTTON_WHEELUP) { + if (evt->u.btn->button == INPUT_BUTTON_WHEEL_UP) { s->mouse_dz--; - } else if (evt->u.btn->button == INPUT_BUTTON_WHEELDOWN) { + } else if (evt->u.btn->button == INPUT_BUTTON_WHEEL_DOWN) { s->mouse_dz++; } } else { diff --git a/hw/input/virtio-input-hid.c b/hw/input/virtio-input-hid.c index c4af0be9ac..9ca5395739 100644 --- a/hw/input/virtio-input-hid.c +++ b/hw/input/virtio-input-hid.c @@ -143,8 +143,8 @@ static const unsigned int keymap_button[INPUT_BUTTON__MAX] = { [INPUT_BUTTON_LEFT] = BTN_LEFT, [INPUT_BUTTON_RIGHT] = BTN_RIGHT, [INPUT_BUTTON_MIDDLE] = BTN_MIDDLE, - [INPUT_BUTTON_WHEELUP] = BTN_GEAR_UP, - [INPUT_BUTTON_WHEELDOWN] = BTN_GEAR_DOWN, + [INPUT_BUTTON_WHEEL_UP] = BTN_GEAR_UP, + [INPUT_BUTTON_WHEEL_DOWN] = BTN_GEAR_DOWN, }; static const unsigned int axismap_rel[INPUT_AXIS__MAX] = { diff --git a/monitor.c b/monitor.c index 73eac17952..e99ca8c91e 100644 --- a/monitor.c +++ b/monitor.c @@ -1375,7 +1375,7 @@ static void hmp_mouse_move(Monitor *mon, const QDict *qdict) if (dz_str) { dz = strtol(dz_str, NULL, 0); if (dz != 0) { - button = (dz > 0) ? INPUT_BUTTON_WHEELUP : INPUT_BUTTON_WHEELDOWN; + button = (dz > 0) ? INPUT_BUTTON_WHEEL_UP : INPUT_BUTTON_WHEEL_DOWN; qemu_input_queue_btn(NULL, button, true); qemu_input_event_sync(); qemu_input_queue_btn(NULL, button, false); diff --git a/qapi-schema.json b/qapi-schema.json index b6322398c6..011fdb6bcd 100644 --- a/qapi-schema.json +++ b/qapi-schema.json @@ -3743,12 +3743,9 @@ # Button of a pointer input device (mouse, tablet). # # Since: 2.0 -# -# Note that the spelling of these values may change when the -# x-input-send-event is promoted out of experimental status. ## { 'enum' : 'InputButton', - 'data' : [ 'Left', 'Middle', 'Right', 'WheelUp', 'WheelDown' ] } + 'data' : [ 'left', 'middle', 'right', 'wheel-up', 'wheel-down' ] } ## # @InputAxis diff --git a/qmp-commands.hx b/qmp-commands.hx index b1a2b97f87..cd4d14266f 100644 --- a/qmp-commands.hx +++ b/qmp-commands.hx @@ -4688,13 +4688,13 @@ Press left mouse button. -> { "execute": "x-input-send-event", "arguments": { "device": "video0", "events": [ { "type": "btn", - "data" : { "down": true, "button": "Left" } } ] } } + "data" : { "down": true, "button": "left" } } ] } } <- { "return": {} } -> { "execute": "x-input-send-event", "arguments": { "device": "video0", "events": [ { "type": "btn", - "data" : { "down": false, "button": "Left" } } ] } } + "data" : { "down": false, "button": "left" } } ] } } <- { "return": {} } Example (2): diff --git a/scripts/qapi.py b/scripts/qapi.py index 8497777d94..941d7c9898 100644 --- a/scripts/qapi.py +++ b/scripts/qapi.py @@ -67,7 +67,6 @@ case_whitelist = [ 'CpuInfoMIPS', # PC, visible through query-cpu 'CpuInfoTricore', # PC, visible through query-cpu 'InputAxis', # TODO: drop when x-input-send-event is fixed - 'InputButton', # TODO: drop when x-input-send-event is fixed 'QapiErrorClass', # all members, visible through errors 'UuidInfo', # UUID, visible through query-uuid 'X86CPURegister32', # all members, visible indirectly through qom-get diff --git a/ui/cocoa.m b/ui/cocoa.m index 3ee554908a..7063a025c0 100644 --- a/ui/cocoa.m +++ b/ui/cocoa.m @@ -739,8 +739,8 @@ QemuCocoaView *cocoaView; [INPUT_BUTTON_LEFT] = MOUSE_EVENT_LBUTTON, [INPUT_BUTTON_MIDDLE] = MOUSE_EVENT_MBUTTON, [INPUT_BUTTON_RIGHT] = MOUSE_EVENT_RBUTTON, - [INPUT_BUTTON_WHEELUP] = MOUSE_EVENT_WHEELUP, - [INPUT_BUTTON_WHEELDOWN] = MOUSE_EVENT_WHEELDN, + [INPUT_BUTTON_WHEEL_UP] = MOUSE_EVENT_WHEELUP, + [INPUT_BUTTON_WHEEL_DOWN] = MOUSE_EVENT_WHEELDN, }; qemu_input_update_buttons(dcl->con, bmap, last_buttons, buttons); last_buttons = buttons; diff --git a/ui/gtk.c b/ui/gtk.c index 3773826277..38ef3fdb42 100644 --- a/ui/gtk.c +++ b/ui/gtk.c @@ -966,9 +966,9 @@ static gboolean gd_scroll_event(GtkWidget *widget, GdkEventScroll *scroll, InputButton btn; if (scroll->direction == GDK_SCROLL_UP) { - btn = INPUT_BUTTON_WHEELUP; + btn = INPUT_BUTTON_WHEEL_UP; } else if (scroll->direction == GDK_SCROLL_DOWN) { - btn = INPUT_BUTTON_WHEELDOWN; + btn = INPUT_BUTTON_WHEEL_DOWN; } else { return TRUE; } diff --git a/ui/input-legacy.c b/ui/input-legacy.c index c97eac1778..703f0a6ed1 100644 --- a/ui/input-legacy.c +++ b/ui/input-legacy.c @@ -158,7 +158,7 @@ static void legacy_mouse_event(DeviceState *dev, QemuConsole *src, } else { s->buttons &= ~bmap[evt->u.btn->button]; } - if (evt->u.btn->down && evt->u.btn->button == INPUT_BUTTON_WHEELUP) { + if (evt->u.btn->down && evt->u.btn->button == INPUT_BUTTON_WHEEL_UP) { s->qemu_put_mouse_event(s->qemu_put_mouse_event_opaque, s->axis[INPUT_AXIS_X], s->axis[INPUT_AXIS_Y], @@ -166,7 +166,7 @@ static void legacy_mouse_event(DeviceState *dev, QemuConsole *src, s->buttons); } if (evt->u.btn->down && - evt->u.btn->button == INPUT_BUTTON_WHEELDOWN) { + evt->u.btn->button == INPUT_BUTTON_WHEEL_DOWN) { s->qemu_put_mouse_event(s->qemu_put_mouse_event_opaque, s->axis[INPUT_AXIS_X], s->axis[INPUT_AXIS_Y], diff --git a/ui/sdl.c b/ui/sdl.c index 9804ee8dfb..abeef33095 100644 --- a/ui/sdl.c +++ b/ui/sdl.c @@ -475,8 +475,8 @@ static void sdl_send_mouse_event(int dx, int dy, int x, int y, int state) [INPUT_BUTTON_LEFT] = SDL_BUTTON(SDL_BUTTON_LEFT), [INPUT_BUTTON_MIDDLE] = SDL_BUTTON(SDL_BUTTON_MIDDLE), [INPUT_BUTTON_RIGHT] = SDL_BUTTON(SDL_BUTTON_RIGHT), - [INPUT_BUTTON_WHEELUP] = SDL_BUTTON(SDL_BUTTON_WHEELUP), - [INPUT_BUTTON_WHEELDOWN] = SDL_BUTTON(SDL_BUTTON_WHEELDOWN), + [INPUT_BUTTON_WHEEL_UP] = SDL_BUTTON(SDL_BUTTON_WHEELUP), + [INPUT_BUTTON_WHEEL_DOWN] = SDL_BUTTON(SDL_BUTTON_WHEELDOWN), }; static uint32_t prev_state; diff --git a/ui/sdl2.c b/ui/sdl2.c index e0128ad755..d0424421ec 100644 --- a/ui/sdl2.c +++ b/ui/sdl2.c @@ -509,9 +509,9 @@ static void handle_mousewheel(SDL_Event *ev) InputButton btn; if (wev->y > 0) { - btn = INPUT_BUTTON_WHEELUP; + btn = INPUT_BUTTON_WHEEL_UP; } else if (wev->y < 0) { - btn = INPUT_BUTTON_WHEELDOWN; + btn = INPUT_BUTTON_WHEEL_DOWN; } else { return; } diff --git a/ui/spice-input.c b/ui/spice-input.c index 72e406382f..8eeebdbb2e 100644 --- a/ui/spice-input.c +++ b/ui/spice-input.c @@ -108,8 +108,8 @@ static void spice_update_buttons(QemuSpicePointer *pointer, [INPUT_BUTTON_LEFT] = 0x01, [INPUT_BUTTON_MIDDLE] = 0x04, [INPUT_BUTTON_RIGHT] = 0x02, - [INPUT_BUTTON_WHEELUP] = 0x10, - [INPUT_BUTTON_WHEELDOWN] = 0x20, + [INPUT_BUTTON_WHEEL_UP] = 0x10, + [INPUT_BUTTON_WHEEL_DOWN] = 0x20, }; if (wheel < 0) { diff --git a/ui/vnc.c b/ui/vnc.c index f27df6dbc0..ce4c669ec9 100644 --- a/ui/vnc.c +++ b/ui/vnc.c @@ -1593,8 +1593,8 @@ static void pointer_event(VncState *vs, int button_mask, int x, int y) [INPUT_BUTTON_LEFT] = 0x01, [INPUT_BUTTON_MIDDLE] = 0x02, [INPUT_BUTTON_RIGHT] = 0x04, - [INPUT_BUTTON_WHEELUP] = 0x08, - [INPUT_BUTTON_WHEELDOWN] = 0x10, + [INPUT_BUTTON_WHEEL_UP] = 0x08, + [INPUT_BUTTON_WHEEL_DOWN] = 0x10, }; QemuConsole *con = vs->vd->dcl.con; int width = pixman_image_get_width(vs->vd->server); From 01df51432e6d22adcc23ccc989432b53d6bc9126 Mon Sep 17 00:00:00 2001 From: Gerd Hoffmann Date: Tue, 12 Jan 2016 12:34:20 +0100 Subject: [PATCH 4/5] qapi: rename InputAxis values. Lowercase them. Signed-off-by: Gerd Hoffmann Reviewed-by: Daniel P. Berrange Reviewed-by: Markus Armbruster Reviewed-by: Eric Blake --- qapi-schema.json | 5 +---- qmp-commands.hx | 4 ++-- scripts/qapi.py | 1 - 3 files changed, 3 insertions(+), 7 deletions(-) diff --git a/qapi-schema.json b/qapi-schema.json index 011fdb6bcd..f3e080fc13 100644 --- a/qapi-schema.json +++ b/qapi-schema.json @@ -3753,12 +3753,9 @@ # Position axis of a pointer input device (mouse, tablet). # # Since: 2.0 -# -# Note that the spelling of these values may change when the -# x-input-send-event is promoted out of experimental status. ## { 'enum' : 'InputAxis', - 'data' : [ 'X', 'Y' ] } + 'data' : [ 'x', 'y' ] } ## # @InputKeyEvent diff --git a/qmp-commands.hx b/qmp-commands.hx index cd4d14266f..edfe7721c1 100644 --- a/qmp-commands.hx +++ b/qmp-commands.hx @@ -4717,8 +4717,8 @@ Move mouse pointer to absolute coordinates (20000, 400). -> { "execute": "x-input-send-event" , "arguments": { "events": [ - { "type": "abs", "data" : { "axis": "X", "value" : 20000 } }, - { "type": "abs", "data" : { "axis": "Y", "value" : 400 } } ] } } + { "type": "abs", "data" : { "axis": "x", "value" : 20000 } }, + { "type": "abs", "data" : { "axis": "y", "value" : 400 } } ] } } <- { "return": {} } EQMP diff --git a/scripts/qapi.py b/scripts/qapi.py index 941d7c9898..18adca753d 100644 --- a/scripts/qapi.py +++ b/scripts/qapi.py @@ -66,7 +66,6 @@ case_whitelist = [ 'CpuInfoBase', # CPU, visible through query-cpu 'CpuInfoMIPS', # PC, visible through query-cpu 'CpuInfoTricore', # PC, visible through query-cpu - 'InputAxis', # TODO: drop when x-input-send-event is fixed 'QapiErrorClass', # all members, visible through errors 'UuidInfo', # UUID, visible through query-uuid 'X86CPURegister32', # all members, visible indirectly through qom-get From 6575ccddf4e7c2484bc14b10d5e89f57506c3953 Mon Sep 17 00:00:00 2001 From: Gerd Hoffmann Date: Tue, 12 Jan 2016 12:39:33 +0100 Subject: [PATCH 5/5] qapi: promote input-send-event to stable With all fixups being in place now, we can promote input-send-event to stable abi by removing the x- prefix. Signed-off-by: Gerd Hoffmann Reviewed-by: Markus Armbruster Reviewed-by: Eric Blake --- qapi-schema.json | 12 +++--------- qmp-commands.hx | 14 +++++++------- ui/input.c | 6 +++--- 3 files changed, 13 insertions(+), 19 deletions(-) diff --git a/qapi-schema.json b/qapi-schema.json index f3e080fc13..42fd61b2ce 100644 --- a/qapi-schema.json +++ b/qapi-schema.json @@ -3819,7 +3819,7 @@ 'abs' : 'InputMoveEvent' } } ## -# @x-input-send-event +# @input-send-event # # Send input event(s) to guest. # @@ -3840,16 +3840,10 @@ # specified, both input devices with and without input routing config # are admissible, but devices with input routing config take # precedence. - -# Since: 2.2 -# -# Note: this command is experimental, and not a stable API. Things that -# might change before it becomes stable include the spelling of enum -# values for InputButton and InputAxis, and the notion of how to designate -# which console will receive the event. # +# Since: 2.6 ## -{ 'command': 'x-input-send-event', +{ 'command': 'input-send-event', 'data': { '*device': 'str', '*head' : 'int', 'events' : [ 'InputEvent' ] } } diff --git a/qmp-commands.hx b/qmp-commands.hx index edfe7721c1..b629673459 100644 --- a/qmp-commands.hx +++ b/qmp-commands.hx @@ -4658,13 +4658,13 @@ Example: EQMP { - .name = "x-input-send-event", + .name = "input-send-event", .args_type = "console:i?,events:q", - .mhandler.cmd_new = qmp_marshal_x_input_send_event, + .mhandler.cmd_new = qmp_marshal_input_send_event, }, SQMP -@x-input-send-event +@input-send-event ----------------- Send input event to guest. @@ -4685,13 +4685,13 @@ Example (1): Press left mouse button. --> { "execute": "x-input-send-event", +-> { "execute": "input-send-event", "arguments": { "device": "video0", "events": [ { "type": "btn", "data" : { "down": true, "button": "left" } } ] } } <- { "return": {} } --> { "execute": "x-input-send-event", +-> { "execute": "input-send-event", "arguments": { "device": "video0", "events": [ { "type": "btn", "data" : { "down": false, "button": "left" } } ] } } @@ -4701,7 +4701,7 @@ Example (2): Press ctrl-alt-del. --> { "execute": "x-input-send-event", +-> { "execute": "input-send-event", "arguments": { "events": [ { "type": "key", "data" : { "down": true, "key": {"type": "qcode", "data": "ctrl" } } }, @@ -4715,7 +4715,7 @@ Example (3): Move mouse pointer to absolute coordinates (20000, 400). --> { "execute": "x-input-send-event" , +-> { "execute": "input-send-event" , "arguments": { "events": [ { "type": "abs", "data" : { "axis": "x", "value" : 20000 } }, { "type": "abs", "data" : { "axis": "y", "value" : 400 } } ] } } diff --git a/ui/input.c b/ui/input.c index 0887bb54ca..6fd48efb57 100644 --- a/ui/input.c +++ b/ui/input.c @@ -119,9 +119,9 @@ qemu_input_find_handler(uint32_t mask, QemuConsole *con) return NULL; } -void qmp_x_input_send_event(bool has_device, const char *device, - bool has_head, int64_t head, - InputEventList *events, Error **errp) +void qmp_input_send_event(bool has_device, const char *device, + bool has_head, int64_t head, + InputEventList *events, Error **errp) { InputEventList *e; QemuConsole *con;