diff --git a/docs/changes.txt b/docs/changes.txt index defea037a0..31f1fb7990 100644 --- a/docs/changes.txt +++ b/docs/changes.txt @@ -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++. diff --git a/include/wx/mac/carbon/radiobut.h b/include/wx/mac/carbon/radiobut.h index c0732eb32f..583bea5581 100644 --- a/include/wx/mac/carbon/radiobut.h +++ b/include/wx/mac/carbon/radiobut.h @@ -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: diff --git a/src/mac/carbon/radiobut.cpp b/src/mac/carbon/radiobut.cpp index e7f983642d..746ca6c877 100644 --- a/src/mac/carbon/radiobut.cpp +++ b/src/mac/carbon/radiobut.cpp @@ -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