diff mbox series

[4/5] spice: get monitors physical dimension

Message ID 20200917062242.1877925-5-marcandre.lureau@redhat.com
State New
Headers show
Series Add physical display dimensions to spice/virtio-gpu | expand

Commit Message

Marc-André Lureau Sept. 17, 2020, 6:22 a.m. UTC
From: Marc-André Lureau <marcandre.lureau@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.lureau@redhat.com>
---
 include/ui/console.h |  3 +++
 ui/spice-display.c   | 17 +++++++++++++++++
 2 files changed, 20 insertions(+)

Comments

Gerd Hoffmann Sept. 21, 2020, 8:12 a.m. UTC | #1
On Thu, Sep 17, 2020 at 10:22:41AM +0400, marcandre.lureau@redhat.com wrote:
> From: Marc-André Lureau <marcandre.lureau@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.

Ok, can we just purge the dead code then instead of introducing one more
instance of it?

thanks,
  Gerd

PS: patch series looks good to me otherwise.
diff mbox series

Patch

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;