X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/ccc8c01a11a4707fbf6776c9aee9e3e981ad2b17..26f7724c4b03d6d75f8aa80d6cd2b5099ac32ea1:/src/aui/tabmdi.cpp diff --git a/src/aui/tabmdi.cpp b/src/aui/tabmdi.cpp index b6d33ca85b..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; } @@ -177,12 +179,15 @@ void wxAuiMDIParentFrame::SetChildMenuBar(wxAuiMDIChildFrame* pChild) if (!pChild) { // No Child, set Our menu bar back. - SetMenuBar(m_pMyMenuBar); + if (m_pMyMenuBar) + SetMenuBar(m_pMyMenuBar); + else + SetMenuBar(GetMenuBar()); // Make sure we know our menu bar is in use m_pMyMenuBar = NULL; } - else + else { if (pChild->GetMenuBar() == NULL) return; @@ -249,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() @@ -311,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")); } } @@ -363,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); } @@ -413,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 @@ -433,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) @@ -443,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); @@ -764,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"));