spice: get monitors physical dimension
authorMarc-André Lureau <marcandre.lureau@redhat.com>
Sun, 27 Sep 2020 14:57:50 +0000 (18:57 +0400)
committerGerd Hoffmann <kraxel@redhat.com>
Tue, 29 Sep 2020 08:08:25 +0000 (10:08 +0200)
With upcoming Spice server version 0.14.4, the monitor configuration can
contain additional fields for the monitor physical dimensions.

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Message-id: 20200927145751.365446-6-marcandre.lureau@redhat.com
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
include/ui/console.h
ui/spice-display.c

index 353d2e49a1b235fe8559080beaf1f9d0b0b29758..e7303d8b98a895dcc0e842621d7d4e710f06f086 100644 (file)
@@ -119,6 +119,9 @@ typedef struct DisplaySurface {
 } DisplaySurface;
 
 typedef struct QemuUIInfo {
+    /* physical dimension */
+    uint16_t width_mm;
+    uint16_t height_mm;
     /* geometry */
     int       xoff;
     int       yoff;
index b304c13149a876793521a89381a6abfe28fb7135..0178d5766d2cd91af837eefb8f2c8ceecfa61765 100644 (file)
@@ -678,6 +678,13 @@ static int interface_client_monitors_config(QXLInstance *sin,
     if (mc->num_of_monitors > head) {
         info.width  = mc->monitors[head].width;
         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];
+            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);