aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/ui/console.h1
-rw-r--r--ui/console.c41
2 files changed, 41 insertions, 1 deletions
diff --git a/include/ui/console.h b/include/ui/console.h
index b64d824360..c0520c694c 100644
--- a/include/ui/console.h
+++ b/include/ui/console.h
@@ -463,6 +463,7 @@ bool qemu_console_is_visible(QemuConsole *con);
bool qemu_console_is_graphic(QemuConsole *con);
bool qemu_console_is_fixedsize(QemuConsole *con);
bool qemu_console_is_gl_blocked(QemuConsole *con);
+bool qemu_console_is_multihead(DeviceState *dev);
char *qemu_console_get_label(QemuConsole *con);
int qemu_console_get_index(QemuConsole *con);
uint32_t qemu_console_get_head(QemuConsole *con);
diff --git a/ui/console.c b/ui/console.c
index 9331b85203..e139f7115e 100644
--- a/ui/console.c
+++ b/ui/console.c
@@ -2313,11 +2313,50 @@ bool qemu_console_is_gl_blocked(QemuConsole *con)
return con->gl_block;
}
+bool qemu_console_is_multihead(DeviceState *dev)
+{
+ QemuConsole *con;
+ Object *obj;
+ uint32_t f = 0xffffffff;
+ uint32_t h;
+
+ QTAILQ_FOREACH(con, &consoles, next) {
+ obj = object_property_get_link(OBJECT(con),
+ "device", &error_abort);
+ if (DEVICE(obj) != dev) {
+ continue;
+ }
+
+ h = object_property_get_uint(OBJECT(con),
+ "head", &error_abort);
+ if (f == 0xffffffff) {
+ f = h;
+ } else if (h != f) {
+ return true;
+ }
+ }
+ return false;
+}
+
char *qemu_console_get_label(QemuConsole *con)
{
if (con->console_type == GRAPHIC_CONSOLE) {
if (con->device) {
- return g_strdup(object_get_typename(con->device));
+ DeviceState *dev;
+ bool multihead;
+
+ dev = DEVICE(con->device);
+ multihead = qemu_console_is_multihead(dev);
+ if (multihead) {
+ return g_strdup_printf("%s.%d", dev->id ?
+ dev->id :
+ object_get_typename(con->device),
+ con->head);
+ } else {
+ return g_strdup_printf("%s", dev->id ?
+ dev->id :
+ object_get_typename(con->device));
+ }
}
return g_strdup("VGA");
} else {