widget: don't crash when deallocating in wrong order
authorFelix Domke <tmbinc@elitedvb.net>
Mon, 19 Dec 2005 00:13:44 +0000 (00:13 +0000)
committerFelix Domke <tmbinc@elitedvb.net>
Mon, 19 Dec 2005 00:13:44 +0000 (00:13 +0000)
lib/gui/ewidget.cpp
lib/gui/ewidgetdesktop.cpp

index 6f7fa91b30c40b3a895d6a94c0ae7634383c5158..3bc6e663841e940e1d7506f7baf4722c90f01a24 100644 (file)
@@ -140,6 +140,8 @@ void eWidget::hide()
        while (root && !root->m_desktop)
        {
                root = root->m_parent;
+               if (!root)
+                       return;
                abspos += root->position();
        }
        assert(root->m_desktop);
index c89cd270a0296226fba55039df2611597f0bf213..04bc85d9059b7b7edb9d57bf9ec764f8f95e1e7f 100644 (file)
@@ -325,6 +325,12 @@ eWidgetDesktop::eWidgetDesktop(eSize size): m_mainloop(0), m_timer(0)
 
 eWidgetDesktop::~eWidgetDesktop()
 {
+               /* tell registered root windows that they no longer have a desktop. */
+       for (ePtrList<eWidget>::iterator i(m_root.begin()); i != m_root.end(); )
+       {
+               i->m_desktop = 0;
+               i = m_root.erase(i);
+       }
                /* destroy all buffers */
        setCompositionMode(-1);
 }