]> git.saurik.com Git - wxWidgets.git/commitdiff
Fixed dangling pointers bug; radio button was not removing itself from
authorJulian Smart <julian@anthemion.co.uk>
Sat, 13 Aug 2005 09:48:29 +0000 (09:48 +0000)
committerJulian Smart <julian@anthemion.co.uk>
Sat, 13 Aug 2005 09:48:29 +0000 (09:48 +0000)
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

docs/changes.txt
include/wx/mac/carbon/radiobut.h
src/mac/carbon/radiobut.cpp

index defea037a0e1d7f77a0ef43a3f4ad7b589b07b3a..31f1fb7990691bfc2c29a93b74992bfd969511e8 100644 (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++.
index c0732eb32f9ea991dcc679feb8fa3f9912ad9df6..583bea5581c1eb00a9aa9dd180a0c12f8ab1d5ef 100644 (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:
index e7f983642d55e9dd4cfb6615a4892925ece4dea5..746ca6c877fa6742d7ee5ac0a43b9838fd2db105 100644 (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