From f8ab85ae7250169df40accb5e3e1ef3681e63ee9 Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Fri, 6 Apr 2007 19:22:38 +0000 Subject: [PATCH] handle child destruction notifications in wxTLW itself and reset both normal and temporary default item pointers when the default window is destroyed git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@45275 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- include/wx/toplevel.h | 5 +++++ src/common/toplvcmn.cpp | 12 ++++++++++++ src/common/wincmn.cpp | 16 +--------------- 3 files changed, 18 insertions(+), 15 deletions(-) diff --git a/include/wx/toplevel.h b/include/wx/toplevel.h index 98c2bd6b49..a4530bd2b8 100644 --- a/include/wx/toplevel.h +++ b/include/wx/toplevel.h @@ -295,6 +295,11 @@ protected: 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; diff --git a/src/common/toplvcmn.cpp b/src/common/toplvcmn.cpp index f090433b40..433e3a6aae 100644 --- a/src/common/toplvcmn.cpp +++ b/src/common/toplvcmn.cpp @@ -39,6 +39,7 @@ BEGIN_EVENT_TABLE(wxTopLevelWindowBase, wxWindow) EVT_CLOSE(wxTopLevelWindowBase::OnCloseWindow) EVT_SIZE(wxTopLevelWindowBase::OnSize) + EVT_WINDOW_DESTROY(wxTopLevelWindowBase::OnChildDestroy) END_EVENT_TABLE() // ============================================================================ @@ -369,6 +370,17 @@ void wxTopLevelWindowBase::OnCloseWindow(wxCloseEvent& WXUNUSED(event)) 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); diff --git a/src/common/wincmn.cpp b/src/common/wincmn.cpp index 49417dbaf7..65a8be784c 100644 --- a/src/common/wincmn.cpp +++ b/src/common/wincmn.cpp @@ -318,23 +318,9 @@ wxWindowBase::~wxWindowBase() wxASSERT_MSG( GetChildren().GetCount() == 0, wxT("children not destroyed") ); - // reset the top-level parent's default item if it is this widget + // notify the parent about this window destruction if ( m_parent ) - { - wxTopLevelWindow *tlw = wxDynamicCast(wxGetTopLevelParent((wxWindow*)this), - wxTopLevelWindow); - - if ( tlw && tlw->GetDefaultItem() == this ) - tlw->SetDefaultItem(NULL); - if ( tlw && tlw->GetTmpDefaultItem() == this ) - tlw->SetTmpDefaultItem(NULL); - } - - // reset the dangling pointer our parent window may keep to us - if ( m_parent ) - { m_parent->RemoveChild(this); - } #if wxUSE_CARET delete m_caret; -- 2.47.2