|
|
@ -505,22 +505,63 @@ static GLFWbool initExtensions(void) |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
if (XRRQueryExtension(_glfw.x11.display, |
|
|
|
_glfw.x11.randr.handle = dlopen("libXrandr.so.2", RTLD_LAZY | RTLD_GLOBAL); |
|
|
|
&_glfw.x11.randr.eventBase, |
|
|
|
if (_glfw.x11.randr.handle) |
|
|
|
&_glfw.x11.randr.errorBase)) |
|
|
|
|
|
|
|
{ |
|
|
|
{ |
|
|
|
if (XRRQueryVersion(_glfw.x11.display, |
|
|
|
_glfw.x11.randr.AllocGamma = (PFN_XRRAllocGamma) |
|
|
|
&_glfw.x11.randr.major, |
|
|
|
dlsym(_glfw.x11.randr.handle, "XRRAllocGamma"); |
|
|
|
&_glfw.x11.randr.minor)) |
|
|
|
_glfw.x11.randr.FreeGamma = (PFN_XRRFreeGamma) |
|
|
|
|
|
|
|
dlsym(_glfw.x11.randr.handle, "XRRFreeGamma"); |
|
|
|
|
|
|
|
_glfw.x11.randr.FreeCrtcInfo = (PFN_XRRFreeCrtcInfo) |
|
|
|
|
|
|
|
dlsym(_glfw.x11.randr.handle, "XRRFreeCrtcInfo"); |
|
|
|
|
|
|
|
_glfw.x11.randr.FreeGamma = (PFN_XRRFreeGamma) |
|
|
|
|
|
|
|
dlsym(_glfw.x11.randr.handle, "XRRFreeGamma"); |
|
|
|
|
|
|
|
_glfw.x11.randr.FreeOutputInfo = (PFN_XRRFreeOutputInfo) |
|
|
|
|
|
|
|
dlsym(_glfw.x11.randr.handle, "XRRFreeOutputInfo"); |
|
|
|
|
|
|
|
_glfw.x11.randr.FreeScreenResources = (PFN_XRRFreeScreenResources) |
|
|
|
|
|
|
|
dlsym(_glfw.x11.randr.handle, "XRRFreeScreenResources"); |
|
|
|
|
|
|
|
_glfw.x11.randr.GetCrtcGamma = (PFN_XRRGetCrtcGamma) |
|
|
|
|
|
|
|
dlsym(_glfw.x11.randr.handle, "XRRGetCrtcGamma"); |
|
|
|
|
|
|
|
_glfw.x11.randr.GetCrtcGammaSize = (PFN_XRRGetCrtcGammaSize) |
|
|
|
|
|
|
|
dlsym(_glfw.x11.randr.handle, "XRRGetCrtcGammaSize"); |
|
|
|
|
|
|
|
_glfw.x11.randr.GetCrtcInfo = (PFN_XRRGetCrtcInfo) |
|
|
|
|
|
|
|
dlsym(_glfw.x11.randr.handle, "XRRGetCrtcInfo"); |
|
|
|
|
|
|
|
_glfw.x11.randr.GetOutputInfo = (PFN_XRRGetOutputInfo) |
|
|
|
|
|
|
|
dlsym(_glfw.x11.randr.handle, "XRRGetOutputInfo"); |
|
|
|
|
|
|
|
_glfw.x11.randr.GetOutputPrimary = (PFN_XRRGetOutputPrimary) |
|
|
|
|
|
|
|
dlsym(_glfw.x11.randr.handle, "XRRGetOutputPrimary"); |
|
|
|
|
|
|
|
_glfw.x11.randr.GetScreenResourcesCurrent = (PFN_XRRGetScreenResourcesCurrent) |
|
|
|
|
|
|
|
dlsym(_glfw.x11.randr.handle, "XRRGetScreenResourcesCurrent"); |
|
|
|
|
|
|
|
_glfw.x11.randr.QueryExtension = (PFN_XRRQueryExtension) |
|
|
|
|
|
|
|
dlsym(_glfw.x11.randr.handle, "XRRQueryExtension"); |
|
|
|
|
|
|
|
_glfw.x11.randr.QueryVersion = (PFN_XRRQueryVersion) |
|
|
|
|
|
|
|
dlsym(_glfw.x11.randr.handle, "XRRQueryVersion"); |
|
|
|
|
|
|
|
_glfw.x11.randr.SelectInput = (PFN_XRRSelectInput) |
|
|
|
|
|
|
|
dlsym(_glfw.x11.randr.handle, "XRRSelectInput"); |
|
|
|
|
|
|
|
_glfw.x11.randr.SetCrtcConfig = (PFN_XRRSetCrtcConfig) |
|
|
|
|
|
|
|
dlsym(_glfw.x11.randr.handle, "XRRSetCrtcConfig"); |
|
|
|
|
|
|
|
_glfw.x11.randr.SetCrtcGamma = (PFN_XRRSetCrtcGamma) |
|
|
|
|
|
|
|
dlsym(_glfw.x11.randr.handle, "XRRSetCrtcGamma"); |
|
|
|
|
|
|
|
_glfw.x11.randr.UpdateConfiguration = (PFN_XRRUpdateConfiguration) |
|
|
|
|
|
|
|
dlsym(_glfw.x11.randr.handle, "XRRUpdateConfiguration"); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (XRRQueryExtension(_glfw.x11.display, |
|
|
|
|
|
|
|
&_glfw.x11.randr.eventBase, |
|
|
|
|
|
|
|
&_glfw.x11.randr.errorBase)) |
|
|
|
{ |
|
|
|
{ |
|
|
|
// The GLFW RandR path requires at least version 1.3
|
|
|
|
if (XRRQueryVersion(_glfw.x11.display, |
|
|
|
if (_glfw.x11.randr.major > 1 || _glfw.x11.randr.minor >= 3) |
|
|
|
&_glfw.x11.randr.major, |
|
|
|
_glfw.x11.randr.available = GLFW_TRUE; |
|
|
|
&_glfw.x11.randr.minor)) |
|
|
|
} |
|
|
|
{ |
|
|
|
else |
|
|
|
// The GLFW RandR path requires at least version 1.3
|
|
|
|
{ |
|
|
|
if (_glfw.x11.randr.major > 1 || _glfw.x11.randr.minor >= 3) |
|
|
|
_glfwInputError(GLFW_PLATFORM_ERROR, |
|
|
|
_glfw.x11.randr.available = GLFW_TRUE; |
|
|
|
"X11: Failed to query RandR version"); |
|
|
|
} |
|
|
|
|
|
|
|
else |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
_glfwInputError(GLFW_PLATFORM_ERROR, |
|
|
|
|
|
|
|
"X11: Failed to query RandR version"); |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
@ -836,6 +877,12 @@ void _glfwPlatformTerminate(void) |
|
|
|
_glfw.x11.x11xcb.handle = NULL; |
|
|
|
_glfw.x11.x11xcb.handle = NULL; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (_glfw.x11.randr.handle) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
dlclose(_glfw.x11.randr.handle); |
|
|
|
|
|
|
|
_glfw.x11.randr.handle = NULL; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
if (_glfw.x11.helperWindowHandle) |
|
|
|
if (_glfw.x11.helperWindowHandle) |
|
|
|
{ |
|
|
|
{ |
|
|
|
if (XGetSelectionOwner(_glfw.x11.display, _glfw.x11.CLIPBOARD) == |
|
|
|
if (XGetSelectionOwner(_glfw.x11.display, _glfw.x11.CLIPBOARD) == |
|
|
|