From 8165f61ac35e5fb52a0f6cd8cc81652e34c2ea5f Mon Sep 17 00:00:00 2001 From: kervala Date: Sat, 31 Jul 2010 11:09:09 +0200 Subject: [PATCH] Fixed: #1039 X11 error when quitting the client on linux --- .../3d/driver/opengl/driver_opengl_window.cpp | 44 +++++++++++++------ 1 file changed, 30 insertions(+), 14 deletions(-) diff --git a/code/nel/src/3d/driver/opengl/driver_opengl_window.cpp b/code/nel/src/3d/driver/opengl/driver_opengl_window.cpp index 97111075e..ab77ba4a9 100644 --- a/code/nel/src/3d/driver/opengl/driver_opengl_window.cpp +++ b/code/nel/src/3d/driver/opengl/driver_opengl_window.cpp @@ -865,7 +865,7 @@ bool CDriverGL::setDisplay(nlWindow wnd, const GfxMode &mode, bool show, bool re if(_win != EmptyWindow) _DestroyWindow = true; -#elif defined (NL_OS_UNIX) +#elif defined(NL_OS_UNIX) static int sAttribList16bpp[] = { @@ -1474,7 +1474,7 @@ bool CDriverGL::setWindowStyle(EWindowStyle windowStyle) xev.xclient.data.l[2] = 0; xev.xclient.data.l[3] = 1; // 1 for Application, 2 for Page or Taskbar, 0 for old source xev.xclient.data.l[4] = 0; - if (XSendEvent(_dpy, DefaultRootWindow(_dpy), False, SubstructureRedirectMask | SubstructureNotifyMask, &xev) != Success) + if (!XSendEvent(_dpy, DefaultRootWindow(_dpy), False, SubstructureRedirectMask | SubstructureNotifyMask, &xev)) { nlwarning("3D: Failed to toggle to fullscreen"); return false; @@ -1801,6 +1801,9 @@ void CDriverGL::setWindowPos(sint32 x, sint32 y) _WindowX = x; _WindowY = y; + if (_win == EmptyWindow) + return; + #ifdef NL_OS_WINDOWS SetWindowPos(_win, NULL, x, y, 0, 0, SWP_NOZORDER | SWP_NOACTIVATE | SWP_NOSIZE); @@ -1858,6 +1861,10 @@ emptyProc CDriverGL::getWindowProc() bool CDriverGL::activate() { H_AUTO_OGL(CDriverGL_activate) + + if (_win == EmptyWindow) + return false; + #ifdef NL_OS_WINDOWS HGLRC hglrc = wglGetCurrentContext(); @@ -1932,6 +1939,9 @@ void CDriverGL::showCursor(bool b) { H_AUTO_OGL(CDriverGL_showCursor) + if (_win == EmptyWindow) + return; + #ifdef NL_OS_WINDOWS if (b) @@ -1983,17 +1993,17 @@ void CDriverGL::setMousePos(float x, float y) { H_AUTO_OGL(CDriverGL_setMousePos) + if (_win == EmptyWindow) + return; + #ifdef NL_OS_WINDOWS - if (_win) - { - // NeL window coordinate to MSWindows coordinates - POINT pt; - pt.x = (sint)((float)(_WindowWidth)*x); - pt.y = (sint)((float)(_WindowHeight)*(1.0f-y)); - ClientToScreen (_win, &pt); - SetCursorPos(pt.x, pt.y); - } + // NeL window coordinate to MSWindows coordinates + POINT pt; + pt.x = (sint)((float)(_WindowWidth)*x); + pt.y = (sint)((float)(_WindowHeight)*(1.0f-y)); + ClientToScreen (_win, &pt); + SetCursorPos(pt.x, pt.y); #elif defined(NL_OS_MAC) && defined(NL_MAC_NATIVE) @@ -2045,6 +2055,12 @@ void CDriverGL::setWindowSize(uint32 width, uint32 height) { H_AUTO_OGL(CDriverGL_setWindowSize) + _WindowWidth = width; + _WindowHeight = height; + + if (_win == EmptyWindow) + return; + #if defined(NL_OS_WINDOWS) // resize the window @@ -2092,9 +2108,6 @@ void CDriverGL::setWindowSize(uint32 width, uint32 height) // resize the window XResizeWindow(_dpy, _win, width, height); - _WindowWidth = width; - _WindowHeight = height; - #endif // NL_OS_WINDOWS } @@ -2130,6 +2143,9 @@ bool CDriverGL::isActive() { H_AUTO_OGL(CDriverGL_isActive) + if (_win == EmptyWindow) + return false; + bool res = true; #ifdef NL_OS_WINDOWS