X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/092d7f88f6819e52dd8ea69d66e474571e527eba..c13d6ac1ea199d1e3908d40d129e2fd5a4d82df7:/src/aui/tabmdi.cpp diff --git a/src/aui/tabmdi.cpp b/src/aui/tabmdi.cpp index d3e0b65eb4..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; } @@ -179,13 +181,13 @@ void wxAuiMDIParentFrame::SetChildMenuBar(wxAuiMDIChildFrame* pChild) // No Child, set Our menu bar back. if (m_pMyMenuBar) SetMenuBar(m_pMyMenuBar); - else + else SetMenuBar(GetMenuBar()); // Make sure we know our menu bar is in use m_pMyMenuBar = NULL; } - else + else { if (pChild->GetMenuBar() == NULL) return; @@ -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() @@ -314,7 +315,7 @@ void wxAuiMDIParentFrame::AddWindowMenu(wxMenuBar *pMenuBar) int pos = pMenuBar->FindMenu(wxGetStockLabel(wxID_HELP,wxSTOCK_NOFLAGS)); if (pos == wxNOT_FOUND) pMenuBar->Append(m_pWindowMenu, _("&Window")); - else + else pMenuBar->Insert(pos, m_pWindowMenu, _("&Window")); } } @@ -366,7 +367,7 @@ void wxAuiMDIParentFrame::Tile(wxOrientation orient) { client_window->Split(cur_idx, wxLEFT); } - else if (orient == wxHORIZONTAL) + else if (orient == wxHORIZONTAL) { client_window->Split(cur_idx, wxTOP); } @@ -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) @@ -446,10 +457,10 @@ bool wxAuiMDIChildFrame::Create(wxAuiMDIParentFrame* parent, // create the window off-screen to prevent flicker wxPanel::Create(pClientWindow, - id, - wxPoint(cli_size.x+1, cli_size.y+1), - size, - wxNO_BORDER, name); + id, + wxPoint(cli_size.x+1, cli_size.y+1), + size, + wxNO_BORDER, name); DoShow(false); @@ -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"));