Loading hmp.c +20 −0 Original line number Diff line number Diff line Loading @@ -94,6 +94,26 @@ void hmp_info_chardev(Monitor *mon) 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) { monitor_suspend(mon); Loading hmp.h +1 −0 Original line number Diff line number Diff line Loading @@ -23,6 +23,7 @@ void hmp_info_kvm(Monitor *mon); void hmp_info_status(Monitor *mon); void hmp_info_uuid(Monitor *mon); void hmp_info_chardev(Monitor *mon); void hmp_info_mice(Monitor *mon); void hmp_quit(Monitor *mon, const QDict *qdict); void hmp_stop(Monitor *mon, const QDict *qdict); void hmp_system_reset(Monitor *mon, const QDict *qdict); Loading input.c +16 −48 Original line number Diff line number Diff line Loading @@ -26,7 +26,8 @@ #include "net.h" #include "monitor.h" #include "console.h" #include "qjson.h" #include "error.h" #include "qmp-commands.h" static QEMUPutKBDEvent *qemu_put_kbd_event; static void *qemu_put_kbd_event_opaque; Loading Loading @@ -211,60 +212,27 @@ int kbd_mouse_has_absolute(void) return 0; } static void info_mice_iter(QObject *data, void *opaque) { 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 *qmp_query_mice(Error **errp) { MouseInfoList *mice_list = NULL; QEMUPutMouseEntry *cursor; QList *mice_list; int current; bool current = true; QTAILQ_FOREACH(cursor, &mouse_handlers, node) { MouseInfoList *info = g_malloc0(sizeof(*info)); info->value = g_malloc0(sizeof(*info->value)); info->value->name = g_strdup(cursor->qemu_put_mouse_event_name); info->value->index = cursor->index; info->value->absolute = !!cursor->qemu_put_mouse_event_absolute; info->value->current = current; mice_list = qlist_new(); current = false; if (QTAILQ_EMPTY(&mouse_handlers)) { goto out; info->next = mice_list; mice_list = info; } current = QTAILQ_FIRST(&mouse_handlers)->index; QTAILQ_FOREACH(cursor, &mouse_handlers, node) { QObject *obj; obj = qobject_from_jsonf("{ 'name': %s," " 'index': %d," " 'current': %i," " 'absolute': %i }", cursor->qemu_put_mouse_event_name, cursor->index, cursor->index == current, !!cursor->qemu_put_mouse_event_absolute); qlist_append_obj(mice_list, obj); } out: *ret_data = QOBJECT(mice_list); return mice_list; } void do_mouse_set(Monitor *mon, const QDict *qdict) Loading monitor.c +1 −10 Original line number Diff line number Diff line Loading @@ -2942,8 +2942,7 @@ static const mon_cmd_t info_cmds[] = { .args_type = "", .params = "", .help = "show which guest mouse is receiving events", .user_print = do_info_mice_print, .mhandler.info_new = do_info_mice, .mhandler.info = hmp_info_mice, }, { .name = "vnc", Loading Loading @@ -3092,14 +3091,6 @@ static const mon_cmd_t qmp_query_cmds[] = { .user_print = do_pci_info_print, .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", .args_type = "", Loading qapi-schema.json +30 −0 Original line number Diff line number Diff line Loading @@ -225,6 +225,36 @@ ## { '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: # Loading Loading
hmp.c +20 −0 Original line number Diff line number Diff line Loading @@ -94,6 +94,26 @@ void hmp_info_chardev(Monitor *mon) 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) { monitor_suspend(mon); Loading
hmp.h +1 −0 Original line number Diff line number Diff line Loading @@ -23,6 +23,7 @@ void hmp_info_kvm(Monitor *mon); void hmp_info_status(Monitor *mon); void hmp_info_uuid(Monitor *mon); void hmp_info_chardev(Monitor *mon); void hmp_info_mice(Monitor *mon); void hmp_quit(Monitor *mon, const QDict *qdict); void hmp_stop(Monitor *mon, const QDict *qdict); void hmp_system_reset(Monitor *mon, const QDict *qdict); Loading
input.c +16 −48 Original line number Diff line number Diff line Loading @@ -26,7 +26,8 @@ #include "net.h" #include "monitor.h" #include "console.h" #include "qjson.h" #include "error.h" #include "qmp-commands.h" static QEMUPutKBDEvent *qemu_put_kbd_event; static void *qemu_put_kbd_event_opaque; Loading Loading @@ -211,60 +212,27 @@ int kbd_mouse_has_absolute(void) return 0; } static void info_mice_iter(QObject *data, void *opaque) { 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 *qmp_query_mice(Error **errp) { MouseInfoList *mice_list = NULL; QEMUPutMouseEntry *cursor; QList *mice_list; int current; bool current = true; QTAILQ_FOREACH(cursor, &mouse_handlers, node) { MouseInfoList *info = g_malloc0(sizeof(*info)); info->value = g_malloc0(sizeof(*info->value)); info->value->name = g_strdup(cursor->qemu_put_mouse_event_name); info->value->index = cursor->index; info->value->absolute = !!cursor->qemu_put_mouse_event_absolute; info->value->current = current; mice_list = qlist_new(); current = false; if (QTAILQ_EMPTY(&mouse_handlers)) { goto out; info->next = mice_list; mice_list = info; } current = QTAILQ_FIRST(&mouse_handlers)->index; QTAILQ_FOREACH(cursor, &mouse_handlers, node) { QObject *obj; obj = qobject_from_jsonf("{ 'name': %s," " 'index': %d," " 'current': %i," " 'absolute': %i }", cursor->qemu_put_mouse_event_name, cursor->index, cursor->index == current, !!cursor->qemu_put_mouse_event_absolute); qlist_append_obj(mice_list, obj); } out: *ret_data = QOBJECT(mice_list); return mice_list; } void do_mouse_set(Monitor *mon, const QDict *qdict) Loading
monitor.c +1 −10 Original line number Diff line number Diff line Loading @@ -2942,8 +2942,7 @@ static const mon_cmd_t info_cmds[] = { .args_type = "", .params = "", .help = "show which guest mouse is receiving events", .user_print = do_info_mice_print, .mhandler.info_new = do_info_mice, .mhandler.info = hmp_info_mice, }, { .name = "vnc", Loading Loading @@ -3092,14 +3091,6 @@ static const mon_cmd_t qmp_query_cmds[] = { .user_print = do_pci_info_print, .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", .args_type = "", Loading
qapi-schema.json +30 −0 Original line number Diff line number Diff line Loading @@ -225,6 +225,36 @@ ## { '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: # Loading