mirror of https://github.com/xemu-project/xemu.git
qapi: Convert query-mice
Signed-off-by: Anthony Liguori <aliguori@us.ibm.com> Signed-off-by: Luiz Capitulino <lcapitulino@redhat.com>
This commit is contained in:
parent
694a099a54
commit
e235cec376
20
hmp.c
20
hmp.c
|
@ -94,6 +94,26 @@ void hmp_info_chardev(Monitor *mon)
|
||||||
qapi_free_ChardevInfoList(char_info);
|
qapi_free_ChardevInfoList(char_info);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void hmp_info_mice(Monitor *mon)
|
||||||
|
{
|
||||||
|
MouseInfoList *mice_list, *mouse;
|
||||||
|
|
||||||
|
mice_list = qmp_query_mice(NULL);
|
||||||
|
if (!mice_list) {
|
||||||
|
monitor_printf(mon, "No mouse devices connected\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (mouse = mice_list; mouse; mouse = mouse->next) {
|
||||||
|
monitor_printf(mon, "%c Mouse #%" PRId64 ": %s%s\n",
|
||||||
|
mouse->value->current ? '*' : ' ',
|
||||||
|
mouse->value->index, mouse->value->name,
|
||||||
|
mouse->value->absolute ? " (absolute)" : "");
|
||||||
|
}
|
||||||
|
|
||||||
|
qapi_free_MouseInfoList(mice_list);
|
||||||
|
}
|
||||||
|
|
||||||
void hmp_quit(Monitor *mon, const QDict *qdict)
|
void hmp_quit(Monitor *mon, const QDict *qdict)
|
||||||
{
|
{
|
||||||
monitor_suspend(mon);
|
monitor_suspend(mon);
|
||||||
|
|
1
hmp.h
1
hmp.h
|
@ -23,6 +23,7 @@ void hmp_info_kvm(Monitor *mon);
|
||||||
void hmp_info_status(Monitor *mon);
|
void hmp_info_status(Monitor *mon);
|
||||||
void hmp_info_uuid(Monitor *mon);
|
void hmp_info_uuid(Monitor *mon);
|
||||||
void hmp_info_chardev(Monitor *mon);
|
void hmp_info_chardev(Monitor *mon);
|
||||||
|
void hmp_info_mice(Monitor *mon);
|
||||||
void hmp_quit(Monitor *mon, const QDict *qdict);
|
void hmp_quit(Monitor *mon, const QDict *qdict);
|
||||||
void hmp_stop(Monitor *mon, const QDict *qdict);
|
void hmp_stop(Monitor *mon, const QDict *qdict);
|
||||||
void hmp_system_reset(Monitor *mon, const QDict *qdict);
|
void hmp_system_reset(Monitor *mon, const QDict *qdict);
|
||||||
|
|
66
input.c
66
input.c
|
@ -26,7 +26,8 @@
|
||||||
#include "net.h"
|
#include "net.h"
|
||||||
#include "monitor.h"
|
#include "monitor.h"
|
||||||
#include "console.h"
|
#include "console.h"
|
||||||
#include "qjson.h"
|
#include "error.h"
|
||||||
|
#include "qmp-commands.h"
|
||||||
|
|
||||||
static QEMUPutKBDEvent *qemu_put_kbd_event;
|
static QEMUPutKBDEvent *qemu_put_kbd_event;
|
||||||
static void *qemu_put_kbd_event_opaque;
|
static void *qemu_put_kbd_event_opaque;
|
||||||
|
@ -211,60 +212,27 @@ int kbd_mouse_has_absolute(void)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void info_mice_iter(QObject *data, void *opaque)
|
MouseInfoList *qmp_query_mice(Error **errp)
|
||||||
{
|
|
||||||
QDict *mouse;
|
|
||||||
Monitor *mon = opaque;
|
|
||||||
|
|
||||||
mouse = qobject_to_qdict(data);
|
|
||||||
monitor_printf(mon, "%c Mouse #%" PRId64 ": %s%s\n",
|
|
||||||
(qdict_get_bool(mouse, "current") ? '*' : ' '),
|
|
||||||
qdict_get_int(mouse, "index"), qdict_get_str(mouse, "name"),
|
|
||||||
qdict_get_bool(mouse, "absolute") ? " (absolute)" : "");
|
|
||||||
}
|
|
||||||
|
|
||||||
void do_info_mice_print(Monitor *mon, const QObject *data)
|
|
||||||
{
|
|
||||||
QList *mice_list;
|
|
||||||
|
|
||||||
mice_list = qobject_to_qlist(data);
|
|
||||||
if (qlist_empty(mice_list)) {
|
|
||||||
monitor_printf(mon, "No mouse devices connected\n");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
qlist_iter(mice_list, info_mice_iter, mon);
|
|
||||||
}
|
|
||||||
|
|
||||||
void do_info_mice(Monitor *mon, QObject **ret_data)
|
|
||||||
{
|
{
|
||||||
|
MouseInfoList *mice_list = NULL;
|
||||||
QEMUPutMouseEntry *cursor;
|
QEMUPutMouseEntry *cursor;
|
||||||
QList *mice_list;
|
bool current = true;
|
||||||
int current;
|
|
||||||
|
|
||||||
mice_list = qlist_new();
|
|
||||||
|
|
||||||
if (QTAILQ_EMPTY(&mouse_handlers)) {
|
|
||||||
goto out;
|
|
||||||
}
|
|
||||||
|
|
||||||
current = QTAILQ_FIRST(&mouse_handlers)->index;
|
|
||||||
|
|
||||||
QTAILQ_FOREACH(cursor, &mouse_handlers, node) {
|
QTAILQ_FOREACH(cursor, &mouse_handlers, node) {
|
||||||
QObject *obj;
|
MouseInfoList *info = g_malloc0(sizeof(*info));
|
||||||
obj = qobject_from_jsonf("{ 'name': %s,"
|
info->value = g_malloc0(sizeof(*info->value));
|
||||||
" 'index': %d,"
|
info->value->name = g_strdup(cursor->qemu_put_mouse_event_name);
|
||||||
" 'current': %i,"
|
info->value->index = cursor->index;
|
||||||
" 'absolute': %i }",
|
info->value->absolute = !!cursor->qemu_put_mouse_event_absolute;
|
||||||
cursor->qemu_put_mouse_event_name,
|
info->value->current = current;
|
||||||
cursor->index,
|
|
||||||
cursor->index == current,
|
current = false;
|
||||||
!!cursor->qemu_put_mouse_event_absolute);
|
|
||||||
qlist_append_obj(mice_list, obj);
|
info->next = mice_list;
|
||||||
|
mice_list = info;
|
||||||
}
|
}
|
||||||
|
|
||||||
out:
|
return mice_list;
|
||||||
*ret_data = QOBJECT(mice_list);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void do_mouse_set(Monitor *mon, const QDict *qdict)
|
void do_mouse_set(Monitor *mon, const QDict *qdict)
|
||||||
|
|
11
monitor.c
11
monitor.c
|
@ -2942,8 +2942,7 @@ static const mon_cmd_t info_cmds[] = {
|
||||||
.args_type = "",
|
.args_type = "",
|
||||||
.params = "",
|
.params = "",
|
||||||
.help = "show which guest mouse is receiving events",
|
.help = "show which guest mouse is receiving events",
|
||||||
.user_print = do_info_mice_print,
|
.mhandler.info = hmp_info_mice,
|
||||||
.mhandler.info_new = do_info_mice,
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.name = "vnc",
|
.name = "vnc",
|
||||||
|
@ -3092,14 +3091,6 @@ static const mon_cmd_t qmp_query_cmds[] = {
|
||||||
.user_print = do_pci_info_print,
|
.user_print = do_pci_info_print,
|
||||||
.mhandler.info_new = do_pci_info,
|
.mhandler.info_new = do_pci_info,
|
||||||
},
|
},
|
||||||
{
|
|
||||||
.name = "mice",
|
|
||||||
.args_type = "",
|
|
||||||
.params = "",
|
|
||||||
.help = "show which guest mouse is receiving events",
|
|
||||||
.user_print = do_info_mice_print,
|
|
||||||
.mhandler.info_new = do_info_mice,
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
.name = "vnc",
|
.name = "vnc",
|
||||||
.args_type = "",
|
.args_type = "",
|
||||||
|
|
|
@ -225,6 +225,36 @@
|
||||||
##
|
##
|
||||||
{ 'command': 'query-commands', 'returns': ['CommandInfo'] }
|
{ 'command': 'query-commands', 'returns': ['CommandInfo'] }
|
||||||
|
|
||||||
|
##
|
||||||
|
# @MouseInfo:
|
||||||
|
#
|
||||||
|
# Information about a mouse device.
|
||||||
|
#
|
||||||
|
# @name: the name of the mouse device
|
||||||
|
#
|
||||||
|
# @index: the index of the mouse device
|
||||||
|
#
|
||||||
|
# @current: true if this device is currently receiving mouse events
|
||||||
|
#
|
||||||
|
# @absolute: true if this device supports absolute coordinates as input
|
||||||
|
#
|
||||||
|
# Since: 0.14.0
|
||||||
|
##
|
||||||
|
{ 'type': 'MouseInfo',
|
||||||
|
'data': {'name': 'str', 'index': 'int', 'current': 'bool',
|
||||||
|
'absolute': 'bool'} }
|
||||||
|
|
||||||
|
##
|
||||||
|
# @query-mice:
|
||||||
|
#
|
||||||
|
# Returns information about each active mouse device
|
||||||
|
#
|
||||||
|
# Returns: a list of @MouseInfo for each device
|
||||||
|
#
|
||||||
|
# Since: 0.14.0
|
||||||
|
##
|
||||||
|
{ 'command': 'query-mice', 'returns': ['MouseInfo'] }
|
||||||
|
|
||||||
##
|
##
|
||||||
# @quit:
|
# @quit:
|
||||||
#
|
#
|
||||||
|
|
|
@ -1663,6 +1663,12 @@ Example:
|
||||||
|
|
||||||
EQMP
|
EQMP
|
||||||
|
|
||||||
|
{
|
||||||
|
.name = "query-mice",
|
||||||
|
.args_type = "",
|
||||||
|
.mhandler.cmd_new = qmp_marshal_input_query_mice,
|
||||||
|
},
|
||||||
|
|
||||||
SQMP
|
SQMP
|
||||||
query-vnc
|
query-vnc
|
||||||
---------
|
---------
|
||||||
|
|
Loading…
Reference in New Issue