2
0
Эх сурвалжийг харах

X11: Narrow criteria for disabling RandR

Fixes #972.
Camilla Löwy 8 жил өмнө
parent
commit
5fe4dfb511
3 өөрчлөгдсөн 9 нэмэгдсэн , 18 устгасан
  1. 1 0
      README.md
  2. 8 11
      src/x11_init.c
  3. 0 7
      src/x11_monitor.c

+ 1 - 0
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)

+ 8 - 11
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);
     }

+ 0 - 7
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)