#include "wx/nonownedwnd.h"
#include "wx/iconbndl.h"
#include "wx/containr.h"
+#include "wx/weakref.h"
// the default names for various classes
extern WXDLLIMPEXP_DATA_CORE(const char) wxFrameNameStr[];
static int WidthDefault(int w) { return w == wxDefaultCoord ? GetDefaultSize().x : w; }
static int HeightDefault(int h) { return h == wxDefaultCoord ? GetDefaultSize().y : h; }
- // reset m_winDefault and m_winTmpDefault if they point to the window being
- // destroyed
- void OnChildDestroy(wxWindowDestroyEvent& event);
-
// the frame icon
wxIconBundle m_icons;
// a default window (usually a button) or NULL
- wxWindow *m_winDefault;
+ wxWindowRef m_winDefault;
// a temporary override of m_winDefault, use the latter if NULL
- wxWindow *m_winTmpDefault;
+ wxWindowRef m_winTmpDefault;
DECLARE_NO_COPY_CLASS(wxTopLevelWindowBase)
DECLARE_EVENT_TABLE()
BEGIN_EVENT_TABLE(wxTopLevelWindowBase, wxWindow)
EVT_CLOSE(wxTopLevelWindowBase::OnCloseWindow)
EVT_SIZE(wxTopLevelWindowBase::OnSize)
- EVT_WINDOW_DESTROY(wxTopLevelWindowBase::OnChildDestroy)
WX_EVENT_TABLE_CONTROL_CONTAINER(wxTopLevelWindowBase)
END_EVENT_TABLE()
{
// Unlike windows, top level windows are created hidden by default.
m_isShown = false;
- m_winDefault =
- m_winTmpDefault = NULL;
WX_INIT_CONTROL_CONTAINER();
}
wxTopLevelWindowBase::~wxTopLevelWindowBase()
{
- m_winDefault =
- m_winTmpDefault = NULL;
-
// don't let wxTheApp keep any stale pointers to us
if ( wxTheApp && wxTheApp->GetTopWindow() == this )
wxTheApp->SetTopWindow(NULL);
Destroy();
}
-void wxTopLevelWindowBase::OnChildDestroy(wxWindowDestroyEvent& event)
-{
- event.Skip();
-
- wxWindow * const win = event.GetWindow();
- if ( win == m_winDefault )
- m_winDefault = NULL;
- if ( win == m_winTmpDefault )
- m_winTmpDefault = NULL;
-}
-
bool wxTopLevelWindowBase::SendIconizeEvent(bool iconized)
{
wxIconizeEvent event(GetId(), iconized);