From 7c33fb22fdd55af5417a48c8594fc495fb1f81a2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Camilla=20L=C3=B6wy?= Date: Tue, 5 Nov 2019 13:09:01 +0100 Subject: [PATCH] X11: Assume 96 DPI if RandR monitor size is zero This falls back to calculating the monitor physical size from the current resolution and the default X11 DPI when the physical size returned by RandR is zero. (cherry picked from commit e96dc5d2199032d565b55c4177820ab28b1d67c9) --- src/x11_monitor.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/x11_monitor.c b/src/x11_monitor.c index cce05f98..412f9f40 100644 --- a/src/x11_monitor.c +++ b/src/x11_monitor.c @@ -161,6 +161,16 @@ void _glfwPollMonitorsX11(void) heightMM = oi->mm_height; } + if (widthMM <= 0 || heightMM <= 0) + { + // HACK: If RandR does not provide a physical size, assume the + // X11 default 96 DPI and calcuate from the CRTC viewport + // NOTE: These members are affected by rotation, unlike the mode + // info and output info members + widthMM = (int) (ci->width * 25.4f / 96.f); + heightMM = (int) (ci->height * 25.4f / 96.f); + } + _GLFWmonitor* monitor = _glfwAllocMonitor(oi->name, widthMM, heightMM); monitor->x11.output = sr->outputs[i]; monitor->x11.crtc = oi->crtc;