// 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
{
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());
+ }
}
- DECLARE_NO_COPY_CLASS(wxPersistentWindowBase)
+ wxDECLARE_NO_COPY_CLASS(wxPersistentWindowBase);
};
template <class T>