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;
|