I have hit another segfault while destroying dropdown widgets. This
time, it is due to the internal focus handler being automatically
destroyed by DropDown::~DropDrow yet still used later by the inherited
destructors. So I attach a new patch. In addition to the bugfix
contained in the previous patch, it removes the internal focus handler
while it is still alive.
--- src/widgets/dropdown.cpp.old	2007-06-16 15:36:56.000000000 +0200
+++ src/widgets/dropdown.cpp	2007-06-16 17:02:50.000000000 +0200
@@ -123,25 +123,27 @@
 
     DropDown::~DropDown()
     {
-        if (mInternalScrollArea)
+        if (widgetExists(mListBox))
         {
-            delete mScrollArea;
+            mListBox->removeActionListener(this);
         }
 
-        if (mInternalListBox)
+        if (mScrollArea != NULL)
         {
-            delete mListBox;
+            mScrollArea->removeDeathListener(this);
         }
 
-        if (widgetExists(mListBox))
+        if (mInternalScrollArea)
         {
-            mListBox->removeActionListener(this);
+            delete mScrollArea;
         }
 
-        if (mScrollArea != NULL)
+        if (mInternalListBox)
         {
-            mScrollArea->removeDeathListener(this);
+            delete mListBox;
         }
+
+        setInternalFocusHandler(NULL);
     }
 
     void DropDown::draw(Graphics* graphics)

Reply via email to