X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/c0c133e13b36a923c65f94499554e432bc3a0daa..5cbda74b6606482f5286a5599fc60f3f91995a52:/include/wx/persist/window.h diff --git a/include/wx/persist/window.h b/include/wx/persist/window.h index 01ff6489d1..30fa88b215 100644 --- a/include/wx/persist/window.h +++ b/include/wx/persist/window.h @@ -23,25 +23,15 @@ // 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);