Fixed dangling pointers bug; radio button was not removing itself from

the cycle when deleted, so when deleting and then adding a radio button, we
get a crash


git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@35182 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Julian Smart
2005-08-13 09:48:29 +00:00
parent 8804b53fb6
commit 992b3f1da4
3 changed files with 29 additions and 0 deletions

View File

@@ -54,6 +54,12 @@ wxGTK:
- Added support for left, centre and right text alignment attributes under
GTK+2 multi-line text controls (Mart Raudsepp).
wxMac:
- Automatic menu management improved.
- Fixed crash when wxRadioButton is deleted from a group of radio buttons,
due to dangling cycle pointers.
wxOS2
- Adjustments for building with Open Watcom C++.

View File

@@ -31,6 +31,7 @@ public:
{
Create(parent, id, label, pos, size, style, validator, name);
}
~wxRadioButton();
bool Create(wxWindow *parent, wxWindowID id,
const wxString& label,
@@ -47,6 +48,7 @@ public:
virtual wxInt32 MacControlHit( WXEVENTHANDLERREF handler , WXEVENTREF event ) ;
void Command(wxCommandEvent& event);
wxRadioButton *AddInCycle(wxRadioButton *cycle);
void RemoveFromCycle();
inline wxRadioButton *NextInCycle() {return m_cycle;}
protected:

View File

@@ -72,6 +72,11 @@ bool wxRadioButton::Create(wxWindow *parent, wxWindowID id,
return true;
}
wxRadioButton::~wxRadioButton()
{
RemoveFromCycle();
}
void wxRadioButton::SetValue(bool val)
{
wxRadioButton *cycle;
@@ -150,4 +155,20 @@ wxRadioButton *wxRadioButton::AddInCycle(wxRadioButton *cycle)
}
}
void wxRadioButton::RemoveFromCycle()
{
if (m_cycle==NULL || m_cycle == this)
{
return;
}
else
{
// Find the previous one and make it point to the next one
wxRadioButton* prev = this;
while (prev->m_cycle != this)
prev = prev->m_cycle;
prev->m_cycle = m_cycle;
}
}
#endif