|
@@ -593,6 +593,17 @@ static GLFWbool initExtensions(void)
|
|
|
RROutputChangeNotifyMask);
|
|
|
}
|
|
|
|
|
|
+ _glfw.x11.xcursor.handle = dlopen("libXcursor.so.1", RTLD_LAZY | RTLD_GLOBAL);
|
|
|
+ if (_glfw.x11.xcursor.handle)
|
|
|
+ {
|
|
|
+ _glfw.x11.xcursor.ImageCreate = (PFN_XcursorImageCreate)
|
|
|
+ dlsym(_glfw.x11.xcursor.handle, "XcursorImageCreate");
|
|
|
+ _glfw.x11.xcursor.ImageDestroy = (PFN_XcursorImageDestroy)
|
|
|
+ dlsym(_glfw.x11.xcursor.handle, "XcursorImageDestroy");
|
|
|
+ _glfw.x11.xcursor.ImageLoadCursor = (PFN_XcursorImageLoadCursor)
|
|
|
+ dlsym(_glfw.x11.xcursor.handle, "XcursorImageLoadCursor");
|
|
|
+ }
|
|
|
+
|
|
|
_glfw.x11.xinerama.handle = dlopen("libXinerama.so.1", RTLD_LAZY | RTLD_GLOBAL);
|
|
|
if (_glfw.x11.xinerama.handle)
|
|
|
{
|
|
@@ -782,6 +793,9 @@ Cursor _glfwCreateCursorX11(const GLFWimage* image, int xhot, int yhot)
|
|
|
int i;
|
|
|
Cursor cursor;
|
|
|
|
|
|
+ if (!_glfw.x11.xcursor.handle)
|
|
|
+ return None;
|
|
|
+
|
|
|
XcursorImage* native = XcursorImageCreate(image->width, image->height);
|
|
|
if (native == NULL)
|
|
|
return None;
|
|
@@ -894,6 +908,12 @@ void _glfwPlatformTerminate(void)
|
|
|
_glfw.x11.randr.handle = NULL;
|
|
|
}
|
|
|
|
|
|
+ if (_glfw.x11.xcursor.handle)
|
|
|
+ {
|
|
|
+ dlclose(_glfw.x11.xcursor.handle);
|
|
|
+ _glfw.x11.xcursor.handle = NULL;
|
|
|
+ }
|
|
|
+
|
|
|
if (_glfw.x11.xinerama.handle)
|
|
|
{
|
|
|
dlclose(_glfw.x11.xinerama.handle);
|