[Libufo-commits] ufo-0.5/src/ux uxglxdriver.cpp,1.9,1.10
Status: Beta
Brought to you by:
schmidtjf
|
From: Johannes S. <sch...@us...> - 2005-10-17 16:23:03
|
Update of /cvsroot/libufo/ufo-0.5/src/ux In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv19363/src/ux Modified Files: uxglxdriver.cpp Log Message: Fixed clean-up on destruction of glx driver. Index: uxglxdriver.cpp =================================================================== RCS file: /cvsroot/libufo/ufo-0.5/src/ux/uxglxdriver.cpp,v retrieving revision 1.9 retrieving revision 1.10 diff -C2 -d -r1.9 -r1.10 *** uxglxdriver.cpp 30 Sep 2005 12:37:36 -0000 1.9 --- uxglxdriver.cpp 17 Oct 2005 16:22:50 -0000 1.10 *************** *** 68,71 **** --- 68,75 ---- } + UXGLXDriver::~UXGLXDriver() { + quit(); + } + bool UXGLXDriver::init() { *************** *** 73,77 **** m_x11Display = XOpenDisplay(XDisplayName(NULL)); ! if (m_x11Display == NULL ) { uError() << "Couldn't open X11 display\n"; return false; --- 77,81 ---- m_x11Display = XOpenDisplay(XDisplayName(NULL)); ! if (m_x11Display == NULL) { uError() << "Couldn't open X11 display\n"; return false; *************** *** 130,138 **** void UXGLXDriver::quit() { ! XSync(m_x11Display, false); XCloseDisplay(m_x11Display); // delete opengl driver if (m_createdGLDriver) { delete (ugl_driver); } m_isInit = false; --- 134,152 ---- void UXGLXDriver::quit() { ! if (!m_isInit) { ! return; ! } ! XSync(m_x11Display, true); ! // hide all windows ! for (std::vector<UXGLXDevice*>::iterator iter = m_windowMap.begin(); ! iter != m_windowMap.end(); ++iter) { ! delete (*iter); ! } ! XCloseDisplay(m_x11Display); // delete opengl driver if (m_createdGLDriver) { delete (ugl_driver); + ugl_driver = NULL; } m_isInit = false; *************** *** 193,205 **** return NULL; } - /* - std::map<int, UXGLXDevice*>::const_iterator iter = m_windowMap.find(window); ! if (iter != m_windowMap.end() && ((*iter).second)) { ! std::cerr << (*iter).second << "\n" << ((*iter).second)->getFrame() << "\n"; ! return ((*iter).second)->getFrame()->getContext(); } ! return NULL; ! }*/ void --- 207,222 ---- return NULL; } ! void ! UXGLXDriver::destroyed(UXGLXDevice * device) { ! for (std::vector<UXGLXDevice*>::iterator iter = m_windowMap.begin(); ! iter != m_windowMap.end(); ++iter) { ! if ((*iter) == device) { ! m_windowMap.erase(iter); ! break; ! } } ! } ! void *************** *** 763,766 **** --- 780,788 ---- } + UXGLXDevice::~UXGLXDevice() { + hide(); + m_glxDriver->destroyed(this); + } + void UXGLXDevice::setSize(int w, int h) { *************** *** 938,941 **** --- 960,966 ---- void UXGLXDevice::hide() { + if (!m_isVisible) { + return; + } if (s_glx_shared_context == m_glContext) { s_glx_shared_context = NULL; |