diff --git a/glfw/x11_init.c b/glfw/x11_init.c index e0a46bd53..b0bc43129 100644 --- a/glfw/x11_init.c +++ b/glfw/x11_init.c @@ -64,9 +64,8 @@ static Atom getAtomIfSupported(Atom* supportedAtoms, static void detectEWMH(void) { // First we read the _NET_SUPPORTING_WM_CHECK property on the root window - Window* windowFromRoot = NULL; - // Then we look for the _NET_SUPPORTING_WM_CHECK property of the root window + Window* windowFromRoot = NULL; if (!_glfwGetWindowPropertyX11(_glfw.x11.root, _glfw.x11.NET_SUPPORTING_WM_CHECK, XA_WINDOW, @@ -93,6 +92,7 @@ static void detectEWMH(void) _glfwReleaseErrorHandlerX11(); // If the property exists, it should contain the XID of the window + if (*windowFromRoot != *windowFromChild) { XFree(windowFromRoot); @@ -103,16 +103,17 @@ static void detectEWMH(void) XFree(windowFromRoot); XFree(windowFromChild); - // We are now fairly sure that an EWMH-compliant window manager is running + // We are now fairly sure that an EWMH-compliant WM is currently running // We can now start querying the WM about what features it supports by // looking in the _NET_SUPPORTED property on the root window // It should contain a list of supported EWMH protocol and state atoms Atom* supportedAtoms = NULL; - const unsigned long atomCount = _glfwGetWindowPropertyX11(_glfw.x11.root, - _glfw.x11.NET_SUPPORTED, - XA_ATOM, - (unsigned char**) &supportedAtoms); + const unsigned long atomCount = + _glfwGetWindowPropertyX11(_glfw.x11.root, + _glfw.x11.NET_SUPPORTED, + XA_ATOM, + (unsigned char**) &supportedAtoms); if (!supportedAtoms) return; @@ -506,6 +507,7 @@ static int errorHandler(Display *display, XErrorEvent* event) { if (_glfw.x11.display != display) return 0; + _glfw.x11.errorCode = event->error_code; return 0; } diff --git a/glfw/x11_monitor.c b/glfw/x11_monitor.c index 85c08fb5d..a0d58012f 100644 --- a/glfw/x11_monitor.c +++ b/glfw/x11_monitor.c @@ -241,7 +241,8 @@ void _glfwSetVideoModeX11(_GLFWmonitor* monitor, const GLFWvidmode* desired) if (_glfwCompareVideoModes(¤t, best) == 0) return; - XRRScreenResources* sr = XRRGetScreenResourcesCurrent(_glfw.x11.display, _glfw.x11.root); + XRRScreenResources* sr = + XRRGetScreenResourcesCurrent(_glfw.x11.display, _glfw.x11.root); XRRCrtcInfo* ci = XRRGetCrtcInfo(_glfw.x11.display, sr, monitor->x11.crtc); XRROutputInfo* oi = XRRGetOutputInfo(_glfw.x11.display, sr, monitor->x11.output); @@ -289,7 +290,8 @@ void _glfwRestoreVideoModeX11(_GLFWmonitor* monitor) if (monitor->x11.oldMode == None) return; - XRRScreenResources* sr = XRRGetScreenResourcesCurrent(_glfw.x11.display, _glfw.x11.root); + XRRScreenResources* sr = + XRRGetScreenResourcesCurrent(_glfw.x11.display, _glfw.x11.root); XRRCrtcInfo* ci = XRRGetCrtcInfo(_glfw.x11.display, sr, monitor->x11.crtc); XRRSetCrtcConfig(_glfw.x11.display, @@ -321,9 +323,10 @@ void _glfwPlatformGetMonitorPos(_GLFWmonitor* monitor, int* xpos, int* ypos) { if (_glfw.x11.randr.available && !_glfw.x11.randr.monitorBroken) { - - XRRScreenResources* sr = XRRGetScreenResourcesCurrent(_glfw.x11.display, _glfw.x11.root); + XRRScreenResources* sr = + XRRGetScreenResourcesCurrent(_glfw.x11.display, _glfw.x11.root); XRRCrtcInfo* ci = XRRGetCrtcInfo(_glfw.x11.display, sr, monitor->x11.crtc); + if (ci) { if (xpos) @@ -333,6 +336,7 @@ void _glfwPlatformGetMonitorPos(_GLFWmonitor* monitor, int* xpos, int* ypos) XRRFreeCrtcInfo(ci); } + XRRFreeScreenResources(sr); } } @@ -352,8 +356,8 @@ void _glfwPlatformGetMonitorWorkarea(_GLFWmonitor* monitor, int* xpos, int* ypos if (_glfw.x11.randr.available && !_glfw.x11.randr.monitorBroken) { - - XRRScreenResources* sr = XRRGetScreenResourcesCurrent(_glfw.x11.display, _glfw.x11.root); + XRRScreenResources* sr = + XRRGetScreenResourcesCurrent(_glfw.x11.display, _glfw.x11.root); XRRCrtcInfo* ci = XRRGetCrtcInfo(_glfw.x11.display, sr, monitor->x11.crtc); areaX = ci->x; @@ -446,7 +450,8 @@ GLFWvidmode* _glfwPlatformGetVideoModes(_GLFWmonitor* monitor, int* count) if (_glfw.x11.randr.available && !_glfw.x11.randr.monitorBroken) { - XRRScreenResources* sr = XRRGetScreenResourcesCurrent(_glfw.x11.display, _glfw.x11.root); + XRRScreenResources* sr = + XRRGetScreenResourcesCurrent(_glfw.x11.display, _glfw.x11.root); XRRCrtcInfo* ci = XRRGetCrtcInfo(_glfw.x11.display, sr, monitor->x11.crtc); XRROutputInfo* oi = XRRGetOutputInfo(_glfw.x11.display, sr, monitor->x11.output); @@ -493,17 +498,19 @@ void _glfwPlatformGetVideoMode(_GLFWmonitor* monitor, GLFWvidmode* mode) { if (_glfw.x11.randr.available && !_glfw.x11.randr.monitorBroken) { - - XRRScreenResources* sr = XRRGetScreenResourcesCurrent(_glfw.x11.display, _glfw.x11.root); + XRRScreenResources* sr = + XRRGetScreenResourcesCurrent(_glfw.x11.display, _glfw.x11.root); XRRCrtcInfo* ci = XRRGetCrtcInfo(_glfw.x11.display, sr, monitor->x11.crtc); - if (ci) { + if (ci) + { const XRRModeInfo* mi = getModeInfo(sr, ci->mode); if (mi) // mi can be NULL if the monitor has been disconnected *mode = vidmodeFromModeInfo(mi, ci); XRRFreeCrtcInfo(ci); } + XRRFreeScreenResources(sr); } else diff --git a/glfw/x11_window.c b/glfw/x11_window.c index 6912b6b28..f15340f51 100644 --- a/glfw/x11_window.c +++ b/glfw/x11_window.c @@ -2414,6 +2414,7 @@ int _glfwPlatformWindowMaximized(_GLFWwindow* window) { return maximized; } + const unsigned long count = _glfwGetWindowPropertyX11(window->x11.handle, _glfw.x11.NET_WM_STATE,