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)