From 5fe4dfb511e12b954f9fba11d989df48f5f203fd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Camilla=20L=C3=B6wy?= Date: Sun, 19 Mar 2017 05:30:27 +0100 Subject: [PATCH] X11: Narrow criteria for disabling RandR Fixes #972. --- README.md | 1 + src/x11_init.c | 19 ++++++++----------- src/x11_monitor.c | 7 ------- 3 files changed, 9 insertions(+), 18 deletions(-) diff --git a/README.md b/README.md index 9baa86bf..f537aead 100644 --- a/README.md +++ b/README.md @@ -172,6 +172,7 @@ information on what to include when reporting a bug. - [X11] Bugfix: Dynamic X11 library loading did not use full sonames (#941) - [X11] Bugfix: Window creation on 64-bit would read past top of stack (#951) - [X11] Bugfix: XDND support had multiple non-conformance issues (#968) +- [X11] Bugfix: The RandR monitor path was disabled despite working RandR (#972) - [Linux] Bugfix: Event processing did not detect joystick disconnection (#932) - [Cocoa] Added support for Vulkan window surface creation via [MoltenVK](https://moltengl.com/moltenvk/) (#870) diff --git a/src/x11_init.c b/src/x11_init.c index ca271546..f283e6a5 100644 --- a/src/x11_init.c +++ b/src/x11_init.c @@ -530,26 +530,23 @@ static GLFWbool initExtensions(void) if (!sr->ncrtc || !XRRGetCrtcGammaSize(_glfw.x11.display, sr->crtcs[0])) { - // This is either a headless system or an older Nvidia binary driver - // with broken gamma support - // Flag it as useless and fall back to Xf86VidMode gamma, if - // available - _glfwInputError(GLFW_PLATFORM_ERROR, - "X11: Detected broken RandR gamma ramp support"); + // This is likely an older Nvidia driver with broken gamma support + // Flag it as useless and fall back to xf86vm gamma, if available _glfw.x11.randr.gammaBroken = GLFW_TRUE; } - if (!sr->ncrtc || !sr->noutput || !sr->nmode) + if (!sr->ncrtc) { - // This is either a headless system or broken Cygwin/X RandR - // Flag it as useless and fall back to Xlib display functions - _glfwInputError(GLFW_PLATFORM_ERROR, - "X11: Detected broken RandR monitor support"); + // A system without CRTCs is likely a system with broken RandR + // Disable the RandR monitor path and fall back to core functions _glfw.x11.randr.monitorBroken = GLFW_TRUE; } XRRFreeScreenResources(sr); + } + if (_glfw.x11.randr.available && !_glfw.x11.randr.monitorBroken) + { XRRSelectInput(_glfw.x11.display, _glfw.x11.root, RROutputChangeNotifyMask); } diff --git a/src/x11_monitor.c b/src/x11_monitor.c index a32d01f4..3d6172ba 100644 --- a/src/x11_monitor.c +++ b/src/x11_monitor.c @@ -202,13 +202,6 @@ void _glfwPollMonitorsX11(void) } free(disconnected); - - if (!_glfw.monitorCount) - { - _glfwInputError(GLFW_PLATFORM_ERROR, - "X11: RandR monitor support seems broken"); - _glfw.x11.randr.monitorBroken = GLFW_TRUE; - } } if (!_glfw.monitorCount)