From: Marc-André Lureau <marcandre.lur...@redhat.com> Note that for consistency, we use the same logic as MonitorsConfig to figure out the associated monitor. However, I can't find traces of the discussion/patches about the "new spice-server" behaviour: it still uses the multiple-configurations path in git master.
Signed-off-by: Marc-André Lureau <marcandre.lur...@redhat.com> --- include/ui/console.h | 3 +++ ui/spice-display.c | 17 +++++++++++++++++ 2 files changed, 20 insertions(+) diff --git a/include/ui/console.h b/include/ui/console.h index b1b0b74317..dfbd7f2940 100644 --- a/include/ui/console.h +++ b/include/ui/console.h @@ -129,6 +129,9 @@ typedef struct DisplaySurface { } DisplaySurface; typedef struct QemuUIInfo { + /* physical dimension */ + uint16_t width_mm; + uint16_t height_mm; /* geometry */ int xoff; int yoff; diff --git a/ui/spice-display.c b/ui/spice-display.c index 625d9232b9..2f14d5a080 100644 --- a/ui/spice-display.c +++ b/ui/spice-display.c @@ -674,6 +674,8 @@ static int interface_client_monitors_config(QXLInstance *sin, info = *dpy_get_ui_info(ssd->dcl.con); + /* Note: this code doesn't handle Spice multi-head support, where multiple + * monitor configuration for a single QXL device means multiple head. */ if (mc->num_of_monitors == 1) { /* * New spice-server version which filters the list of monitors @@ -697,7 +699,22 @@ static int interface_client_monitors_config(QXLInstance *sin, info.height = mc->monitors[head].height; } } +#if SPICE_SERVER_VERSION >= 0x000e04 /* release 0.14.4 */ + if (mc->flags & VD_AGENT_CONFIG_MONITORS_FLAG_PHYSICAL_SIZE) { + VDAgentMonitorMM *mm = (void *)&mc->monitors[mc->num_of_monitors]; + if (mc->num_of_monitors == 1) { + info.width_mm = mm[0].width; + info.height_mm = mm[0].height; + } else { + head = qemu_console_get_index(ssd->dcl.con); + if (mc->num_of_monitors > head) { + info.width_mm = mm[head].width; + info.height_mm = mm[head].height; + } + } + } +#endif trace_qemu_spice_ui_info(ssd->qxl.id, info.width, info.height); dpy_set_ui_info(ssd->dcl.con, &info); return 1; -- 2.26.2