X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/cedd7b22f4efca68479ec4bb79a9ce5f80164a3b..7198c3368055d88249a338eb33b21f051f674806:/src/aui/tabmdi.cpp?ds=sidebyside diff --git a/src/aui/tabmdi.cpp b/src/aui/tabmdi.cpp index ccf9e885f5..8a560e75ff 100644 --- a/src/aui/tabmdi.cpp +++ b/src/aui/tabmdi.cpp @@ -110,9 +110,11 @@ bool wxAuiMDIParentFrame::Create(wxWindow *parent, } #endif // wxUSE_MENUS - wxFrame::Create(parent, id, title, pos, size, style, name); - OnCreateClient(); - return true; + if ( !wxFrame::Create(parent, id, title, pos, size, style, name) ) + return false; + + m_pClientWindow = OnCreateClient(); + return m_pClientWindow != NULL; } @@ -252,8 +254,7 @@ wxAuiMDIClientWindow *wxAuiMDIParentFrame::GetClientWindow() const wxAuiMDIClientWindow *wxAuiMDIParentFrame::OnCreateClient() { - m_pClientWindow = new wxAuiMDIClientWindow( this ); - return m_pClientWindow; + return new wxAuiMDIClientWindow( this ); } void wxAuiMDIParentFrame::ActivateNext() @@ -416,10 +417,20 @@ wxAuiMDIChildFrame::wxAuiMDIChildFrame(wxAuiMDIParentFrame *parent, wxAuiMDIChildFrame::~wxAuiMDIChildFrame() { wxAuiMDIParentFrame* pParentFrame = GetMDIParentFrame(); - if (pParentFrame && pParentFrame->GetActiveChild() == this) + if (pParentFrame) { - pParentFrame->SetActiveChild(NULL); - pParentFrame->SetChildMenuBar(NULL); + if (pParentFrame->GetActiveChild() == this) + { + pParentFrame->SetActiveChild(NULL); + pParentFrame->SetChildMenuBar(NULL); + } + wxAuiMDIClientWindow* pClientWindow = pParentFrame->GetClientWindow(); + wxASSERT(pClientWindow); + int idx = pClientWindow->GetPageIndex(this); + if (idx != wxNOT_FOUND) + { + pClientWindow->RemovePage(idx); + } } #if wxUSE_MENUS @@ -436,7 +447,7 @@ bool wxAuiMDIChildFrame::Create(wxAuiMDIParentFrame* parent, const wxString& name) { wxAuiMDIClientWindow* pClientWindow = parent->GetClientWindow(); - wxASSERT_MSG((pClientWindow != (wxWindow*) NULL), wxT("Missing MDI client window.")); + wxASSERT_MSG((pClientWindow != NULL), wxT("Missing MDI client window.")); // see comment in constructor if (style & wxMINIMIZE) @@ -767,7 +778,7 @@ void wxAuiMDIClientWindow::PageChanged(int old_selection, int new_selection) // notify old active child that it has been deactivated - if (old_selection != -1) + if ((old_selection != -1) && (old_selection < (int)GetPageCount())) { wxAuiMDIChildFrame* old_child = (wxAuiMDIChildFrame*)GetPage(old_selection); wxASSERT_MSG(old_child, wxT("wxAuiMDIClientWindow::PageChanged - null page pointer"));