// Purpose: wxPersistentWindow declaration
// Author: Vadim Zeitlin
// Created: 2009-01-23
-// RCS-ID: $Id$
// Copyright: (c) 2009 Vadim Zeitlin <vadim@wxwidgets.org>
// Licence: wxWindows licence
///////////////////////////////////////////////////////////////////////////////
// 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>