parent
154b01e8cf
commit
d95b77ebec
@ -69,6 +69,7 @@ used by the tests and examples and are not required to build the library.
|
||||
- Added `GLFW_TRUE` and `GLFW_FALSE` as client API independent boolean values
|
||||
- Removed dependency on external OpenGL or OpenGL ES headers
|
||||
- [Cocoa] Removed support for OS X 10.6
|
||||
- [X11] Bugfix: Monitor connection and disconnection events were not reported
|
||||
- [WGL] Removed dependency on external WGL headers
|
||||
- [GLX] Removed dependency on external GLX headers
|
||||
- [EGL] Removed dependency on external EGL headers
|
||||
|
@ -1374,9 +1374,6 @@ GLFWAPI const char* glfwGetMonitorName(GLFWmonitor* monitor);
|
||||
* @return The previously set callback, or `NULL` if no callback was set or the
|
||||
* library had not been [initialized](@ref intro_init).
|
||||
*
|
||||
* @bug __X11:__ This callback is not yet called on monitor configuration
|
||||
* changes.
|
||||
*
|
||||
* @par Thread Safety
|
||||
* This function may only be called from the main thread.
|
||||
*
|
||||
|
@ -486,29 +486,29 @@ static GLFWbool initExtensions(void)
|
||||
#endif /*_GLFW_HAS_XF86VM*/
|
||||
|
||||
// Check for RandR extension
|
||||
_glfw.x11.randr.available =
|
||||
XRRQueryExtension(_glfw.x11.display,
|
||||
if (XRRQueryExtension(_glfw.x11.display,
|
||||
&_glfw.x11.randr.eventBase,
|
||||
&_glfw.x11.randr.errorBase);
|
||||
|
||||
if (_glfw.x11.randr.available)
|
||||
&_glfw.x11.randr.errorBase))
|
||||
{
|
||||
XRRScreenResources* sr;
|
||||
|
||||
if (!XRRQueryVersion(_glfw.x11.display,
|
||||
&_glfw.x11.randr.major,
|
||||
&_glfw.x11.randr.minor))
|
||||
if (XRRQueryVersion(_glfw.x11.display,
|
||||
&_glfw.x11.randr.major,
|
||||
&_glfw.x11.randr.minor))
|
||||
{
|
||||
// The GLFW RandR path requires at least version 1.3
|
||||
if (_glfw.x11.randr.major > 1 || _glfw.x11.randr.minor >= 3)
|
||||
_glfw.x11.randr.available = GLFW_TRUE;
|
||||
}
|
||||
else
|
||||
{
|
||||
_glfwInputError(GLFW_PLATFORM_ERROR,
|
||||
"X11: Failed to query RandR version");
|
||||
return GLFW_FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
// The GLFW RandR path requires at least version 1.3
|
||||
if (_glfw.x11.randr.major == 1 && _glfw.x11.randr.minor < 3)
|
||||
_glfw.x11.randr.available = GLFW_FALSE;
|
||||
|
||||
sr = XRRGetScreenResources(_glfw.x11.display, _glfw.x11.root);
|
||||
if (_glfw.x11.randr.available)
|
||||
{
|
||||
XRRScreenResources* sr = XRRGetScreenResources(_glfw.x11.display,
|
||||
_glfw.x11.root);
|
||||
|
||||
if (!sr->ncrtc || !XRRGetCrtcGammaSize(_glfw.x11.display, sr->crtcs[0]))
|
||||
{
|
||||
@ -522,6 +522,9 @@ static GLFWbool initExtensions(void)
|
||||
}
|
||||
|
||||
XRRFreeScreenResources(sr);
|
||||
|
||||
XRRSelectInput(_glfw.x11.display, _glfw.x11.root,
|
||||
RROutputChangeNotifyMask);
|
||||
}
|
||||
|
||||
if (XineramaQueryExtension(_glfw.x11.display,
|
||||
|
@ -480,9 +480,6 @@ static GLFWbool createWindow(_GLFWwindow* window,
|
||||
|
||||
_glfwPlatformSetWindowTitle(window, wndconfig->title);
|
||||
|
||||
XRRSelectInput(_glfw.x11.display, window->x11.handle,
|
||||
RRScreenChangeNotifyMask);
|
||||
|
||||
if (_glfw.x11.im)
|
||||
{
|
||||
window->x11.ic = XCreateIC(_glfw.x11.im,
|
||||
@ -852,6 +849,16 @@ static void processEvent(XEvent *event)
|
||||
if (_glfw.x11.im)
|
||||
filtered = XFilterEvent(event, None);
|
||||
|
||||
if (_glfw.x11.randr.available)
|
||||
{
|
||||
if (event->type == _glfw.x11.randr.eventBase + RRNotify)
|
||||
{
|
||||
XRRUpdateConfiguration(event);
|
||||
_glfwInputMonitorChange();
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if (event->type != GenericEvent)
|
||||
{
|
||||
window = findWindowByHandle(event->xany.window);
|
||||
@ -1412,12 +1419,6 @@ static void processEvent(XEvent *event)
|
||||
}
|
||||
#endif /*_GLFW_HAS_XINPUT*/
|
||||
}
|
||||
|
||||
if (event->type - _glfw.x11.randr.eventBase == RRScreenChangeNotify)
|
||||
{
|
||||
XRRUpdateConfiguration(event);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user