X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/e90c1d2a19361551eb07778280f22be3e759cf64..86351e4a9d12822b31f2052fe299fc6be6d5f44d:/src/common/docmdi.cpp diff --git a/src/common/docmdi.cpp b/src/common/docmdi.cpp index 0e8c9d1c35..4d6141dd8c 100644 --- a/src/common/docmdi.cpp +++ b/src/common/docmdi.cpp @@ -9,7 +9,7 @@ // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// -#ifdef __GNUG__ +#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA) #pragma implementation "docmdi.h" #endif @@ -20,7 +20,7 @@ #pragma hdrstop #endif -#if wxUSE_MDI_ARCHITECTURE && wxUSE_DOC_VIEW_ARCHITECTURE +#if wxUSE_MDI_ARCHITECTURE #include "wx/docmdi.h" @@ -50,8 +50,8 @@ void wxDocMDIParentFrame::OnExit(wxCommandEvent& WXUNUSED(event)) void wxDocMDIParentFrame::OnMRUFile(wxCommandEvent& event) { - wxString f(m_docManager->GetHistoryFile(event.GetSelection() - wxID_FILE1)); - if (f != T("")) + wxString f(m_docManager->GetHistoryFile(event.GetId() - wxID_FILE1)); + if (f != wxT("")) (void)m_docManager->CreateDocument(f, wxDOC_SILENT); } @@ -87,14 +87,36 @@ BEGIN_EVENT_TABLE(wxDocMDIChildFrame, wxMDIChildFrame) EVT_CLOSE(wxDocMDIChildFrame::OnCloseWindow) END_EVENT_TABLE() +void wxDocMDIChildFrame::Init() +{ + m_childDocument = (wxDocument*) NULL; + m_childView = (wxView*) NULL; +} + +wxDocMDIChildFrame::wxDocMDIChildFrame() +{ + Init(); +} + wxDocMDIChildFrame::wxDocMDIChildFrame(wxDocument *doc, wxView *view, wxMDIParentFrame *frame, wxWindowID id, - const wxString& title, const wxPoint& pos, const wxSize& size, long style, const wxString& name): - wxMDIChildFrame(frame, id, title, pos, size, style, name) + const wxString& title, const wxPoint& pos, const wxSize& size, long style, const wxString& name) +{ + Init(); + Create(doc, view, frame, id, title, pos, size, style, name); +} + +bool wxDocMDIChildFrame::Create(wxDocument *doc, wxView *view, wxMDIParentFrame *frame, wxWindowID id, + const wxString& title, const wxPoint& pos, const wxSize& size, long style, const wxString& name) { m_childDocument = doc; m_childView = view; + if (wxMDIChildFrame::Create(frame, id, title, pos, size, style, name)) { if (view) view->SetFrame(this); + return TRUE; + } + + return FALSE; } wxDocMDIChildFrame::~wxDocMDIChildFrame(void) @@ -105,16 +127,28 @@ wxDocMDIChildFrame::~wxDocMDIChildFrame(void) // Extend event processing to search the view's event table bool wxDocMDIChildFrame::ProcessEvent(wxEvent& event) { + static wxEvent *ActiveEvent = NULL; + + // Break recursion loops + if (ActiveEvent == &event) + return FALSE; + + ActiveEvent = &event; + + bool ret; if ( !m_childView || ! m_childView->ProcessEvent(event) ) { // Only hand up to the parent if it's a menu command if (!event.IsKindOf(CLASSINFO(wxCommandEvent)) || !GetParent() || !GetParent()->ProcessEvent(event)) - return wxEvtHandler::ProcessEvent(event); + ret = wxEvtHandler::ProcessEvent(event); else - return TRUE; + ret = TRUE; } else - return TRUE; + ret = TRUE; + + ActiveEvent = NULL; + return ret; } void wxDocMDIChildFrame::OnActivate(wxActivateEvent& event)