Moved to use X11 context manager.

This commit is contained in:
Camilla Berglund 2013-04-15 02:16:51 +02:00
parent 32273c5d96
commit 26756b9ae1
3 changed files with 14 additions and 4 deletions

View File

@ -434,6 +434,7 @@ static GLboolean initDisplay(void)
_glfw.x11.screen = DefaultScreen(_glfw.x11.display); _glfw.x11.screen = DefaultScreen(_glfw.x11.display);
_glfw.x11.root = RootWindow(_glfw.x11.display, _glfw.x11.screen); _glfw.x11.root = RootWindow(_glfw.x11.display, _glfw.x11.screen);
_glfw.x11.context = XUniqueContext();
// Find or create window manager atoms // Find or create window manager atoms
_glfw.x11.WM_STATE = XInternAtom(_glfw.x11.display, "WM_STATE", False); _glfw.x11.WM_STATE = XInternAtom(_glfw.x11.display, "WM_STATE", False);

View File

@ -108,6 +108,7 @@ typedef struct _GLFWlibraryX11
// Invisible cursor for hidden cursor mode // Invisible cursor for hidden cursor mode
Cursor cursor; Cursor cursor;
XContext context;
// Window manager atoms // Window manager atoms
Atom WM_STATE; Atom WM_STATE;

View File

@ -154,6 +154,11 @@ static GLboolean createWindow(_GLFWwindow* window,
(unsigned char*) &hints, (unsigned char*) &hints,
sizeof(MotifWmHints) / sizeof(long)); sizeof(MotifWmHints) / sizeof(long));
} }
XSaveContext(_glfw.x11.display,
window->x11.handle,
_glfw.x11.context,
(XPointer) window);
} }
if (window->monitor && !_glfw.x11.hasEWMH) if (window->monitor && !_glfw.x11.hasEWMH)
@ -461,13 +466,15 @@ _GLFWwindow* _glfwFindWindowByHandle(Window handle)
{ {
_GLFWwindow* window; _GLFWwindow* window;
for (window = _glfw.windowListHead; window; window = window->next) if (XFindContext(_glfw.x11.display,
handle,
_glfw.x11.context,
(XPointer*) &window) != 0)
{ {
if (window->x11.handle == handle) return NULL;
return window;
} }
return NULL; return window;
} }
// Process the specified X event // Process the specified X event
@ -897,6 +904,7 @@ void _glfwPlatformDestroyWindow(_GLFWwindow* window)
if (window->x11.handle) if (window->x11.handle)
{ {
XDeleteContext(_glfw.x11.display, window->x11.handle, _glfw.x11.context);
XUnmapWindow(_glfw.x11.display, window->x11.handle); XUnmapWindow(_glfw.x11.display, window->x11.handle);
XDestroyWindow(_glfw.x11.display, window->x11.handle); XDestroyWindow(_glfw.x11.display, window->x11.handle);
window->x11.handle = (Window) 0; window->x11.handle = (Window) 0;