|
@@ -322,12 +322,16 @@ void _glfwPlatformGetMonitorPos(_GLFWmonitor* monitor, int* xpos, int* ypos)
|
|
XRRGetScreenResourcesCurrent(_glfw.x11.display, _glfw.x11.root);
|
|
XRRGetScreenResourcesCurrent(_glfw.x11.display, _glfw.x11.root);
|
|
XRRCrtcInfo* ci = XRRGetCrtcInfo(_glfw.x11.display, sr, monitor->x11.crtc);
|
|
XRRCrtcInfo* ci = XRRGetCrtcInfo(_glfw.x11.display, sr, monitor->x11.crtc);
|
|
|
|
|
|
- if (xpos)
|
|
|
|
- *xpos = ci->x;
|
|
|
|
- if (ypos)
|
|
|
|
- *ypos = ci->y;
|
|
|
|
|
|
+ if (ci)
|
|
|
|
+ {
|
|
|
|
+ if (xpos)
|
|
|
|
+ *xpos = ci->x;
|
|
|
|
+ if (ypos)
|
|
|
|
+ *ypos = ci->y;
|
|
|
|
+
|
|
|
|
+ XRRFreeCrtcInfo(ci);
|
|
|
|
+ }
|
|
|
|
|
|
- XRRFreeCrtcInfo(ci);
|
|
|
|
XRRFreeScreenResources(sr);
|
|
XRRFreeScreenResources(sr);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
@@ -493,9 +497,15 @@ void _glfwPlatformGetVideoMode(_GLFWmonitor* monitor, GLFWvidmode* mode)
|
|
XRRGetScreenResourcesCurrent(_glfw.x11.display, _glfw.x11.root);
|
|
XRRGetScreenResourcesCurrent(_glfw.x11.display, _glfw.x11.root);
|
|
XRRCrtcInfo* ci = XRRGetCrtcInfo(_glfw.x11.display, sr, monitor->x11.crtc);
|
|
XRRCrtcInfo* ci = XRRGetCrtcInfo(_glfw.x11.display, sr, monitor->x11.crtc);
|
|
|
|
|
|
- *mode = vidmodeFromModeInfo(getModeInfo(sr, ci->mode), 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);
|
|
|
|
+ }
|
|
|
|
|
|
- XRRFreeCrtcInfo(ci);
|
|
|
|
XRRFreeScreenResources(sr);
|
|
XRRFreeScreenResources(sr);
|
|
}
|
|
}
|
|
else
|
|
else
|