diff --git a/src/x11_init.c b/src/x11_init.c index ca1bdf4b7..88eca009b 100644 --- a/src/x11_init.c +++ b/src/x11_init.c @@ -458,6 +458,16 @@ static void detectEWMH(void) XFree(supportedAtoms); } +XRRScreenResources* _glfwXRRGetScreenResources() +{ +#if (RANDR_MAJOR > 1 || (RANDR_MAJOR == 1 && RANDR_MINOR >= 3)) + if(_glfw.x11.randr.major > 1 || (_glfw.x11.randr.major == 1 && _glfw.x11.randr.minor >= 3)) + return XRRGetScreenResourcesCurrent(_glfw.x11.display, _glfw.x11.root); + else +#endif + return XRRGetScreenResources(_glfw.x11.display, _glfw.x11.root); +} + // Initialize X11 display and look for supported X11 extensions // static GLFWbool initExtensions(void) @@ -502,8 +512,7 @@ static GLFWbool initExtensions(void) if (_glfw.x11.randr.available) { - XRRScreenResources* sr = XRRGetScreenResources(_glfw.x11.display, - _glfw.x11.root); + XRRScreenResources* sr = _glfwXRRGetScreenResources(); if (!sr->ncrtc || !XRRGetCrtcGammaSize(_glfw.x11.display, sr->crtcs[0])) { diff --git a/src/x11_monitor.c b/src/x11_monitor.c index 4806f0f87..dfaed7aa9 100644 --- a/src/x11_monitor.c +++ b/src/x11_monitor.c @@ -114,7 +114,7 @@ GLFWbool _glfwSetVideoModeX11(_GLFWmonitor* monitor, const GLFWvidmode* desired) if (_glfwCompareVideoModes(¤t, best) == 0) return GLFW_TRUE; - sr = XRRGetScreenResources(_glfw.x11.display, _glfw.x11.root); + sr = _glfwXRRGetScreenResources(); ci = XRRGetCrtcInfo(_glfw.x11.display, sr, monitor->x11.crtc); oi = XRRGetOutputInfo(_glfw.x11.display, sr, monitor->x11.output); @@ -174,7 +174,7 @@ void _glfwRestoreVideoModeX11(_GLFWmonitor* monitor) if (monitor->x11.oldMode == None) return; - sr = XRRGetScreenResources(_glfw.x11.display, _glfw.x11.root); + sr = _glfwXRRGetScreenResources(_glfw.x11.display, _glfw.x11.root); ci = XRRGetCrtcInfo(_glfw.x11.display, sr, monitor->x11.crtc); XRRSetCrtcConfig(_glfw.x11.display, @@ -209,8 +209,8 @@ _GLFWmonitor** _glfwPlatformGetMonitors(int* count) { int screenCount = 0; XineramaScreenInfo* screens = NULL; - XRRScreenResources* sr = XRRGetScreenResources(_glfw.x11.display, - _glfw.x11.root); + XRRScreenResources* sr = _glfwXRRGetScreenResources(_glfw.x11.display, + _glfw.x11.root); RROutput primary = XRRGetOutputPrimary(_glfw.x11.display, _glfw.x11.root); @@ -318,7 +318,7 @@ void _glfwPlatformGetMonitorPos(_GLFWmonitor* monitor, int* xpos, int* ypos) XRRScreenResources* sr; XRRCrtcInfo* ci; - sr = XRRGetScreenResourcesCurrent(_glfw.x11.display, _glfw.x11.root); + sr = _glfwXRRGetScreenResources(_glfw.x11.display, _glfw.x11.root); ci = XRRGetCrtcInfo(_glfw.x11.display, sr, monitor->x11.crtc); if (xpos) @@ -344,7 +344,7 @@ GLFWvidmode* _glfwPlatformGetVideoModes(_GLFWmonitor* monitor, int* count) XRRCrtcInfo* ci; XRROutputInfo* oi; - sr = XRRGetScreenResourcesCurrent(_glfw.x11.display, _glfw.x11.root); + sr = _glfwXRRGetScreenResources(_glfw.x11.display, _glfw.x11.root); ci = XRRGetCrtcInfo(_glfw.x11.display, sr, monitor->x11.crtc); oi = XRRGetOutputInfo(_glfw.x11.display, sr, monitor->x11.output); @@ -393,7 +393,7 @@ void _glfwPlatformGetVideoMode(_GLFWmonitor* monitor, GLFWvidmode* mode) XRRScreenResources* sr; XRRCrtcInfo* ci; - sr = XRRGetScreenResourcesCurrent(_glfw.x11.display, _glfw.x11.root); + sr = _glfwXRRGetScreenResources(_glfw.x11.display, _glfw.x11.root); ci = XRRGetCrtcInfo(_glfw.x11.display, sr, monitor->x11.crtc); *mode = vidmodeFromModeInfo(getModeInfo(sr, ci->mode), ci); diff --git a/src/x11_platform.h b/src/x11_platform.h index b6035bbec..c59c5ee7f 100644 --- a/src/x11_platform.h +++ b/src/x11_platform.h @@ -306,4 +306,6 @@ void _glfwInputErrorX11(int error, const char* message); void _glfwPushSelectionToManagerX11(void); +XRRScreenResources* _glfwXRRGetScreenResources(); + #endif // _glfw3_x11_platform_h_