]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/persist/window.h
Fix crash when editing wxDVC items in place in wxOSX/Cocoa.
[wxWidgets.git] / include / wx / persist / window.h
index 01ff6489d13157119cfc3eebefd3836f1ecb71c3..30fa88b215e75a4a4867a6905103d8ce298c1634 100644 (file)
 
 // type-independent part of wxPersistentWindow
 class wxPersistentWindowBase :
-#if wxEVENTS_COMPATIBILITY_2_8
-    // in compatibility mode we need to derive from wxEvtHandler to be able to
-    // handle events
-    public wxEvtHandler ,
-#endif
+    wxBIND_OR_CONNECT_HACK_BASE_CLASS
     public wxPersistentObject
 {
 public:
     wxPersistentWindowBase(wxWindow *win)
         : wxPersistentObject(win)
     {
-        win->Connect
-             (
-                wxEVT_DESTROY,
-                wxWindowDestroyEventHandler(
-                    wxPersistentWindowBase::HandleDestroy),
-                NULL,
-                this
-             );
+        wxBIND_OR_CONNECT_HACK(win, wxEVT_DESTROY, wxWindowDestroyEventHandler,
+                               wxPersistentWindowBase::HandleDestroy, this);
     }
 
     virtual wxString GetName() const
@@ -60,8 +50,13 @@ private:
     {
         event.Skip();
 
-        // this will delete this object itself
-        wxPersistenceManager::Get().SaveAndUnregister(GetWindow());
+        // only react to the destruction of this object itself, not of any of
+        // its children
+        if ( event.GetEventObject() == GetObject() )
+        {
+            // this will delete this object itself
+            wxPersistenceManager::Get().SaveAndUnregister(GetWindow());
+        }
     }
 
     wxDECLARE_NO_COPY_CLASS(wxPersistentWindowBase);