diff --git a/include/wx/docmdi.h b/include/wx/docmdi.h index a94a48c73d..b544b46068 100644 --- a/include/wx/docmdi.h +++ b/include/wx/docmdi.h @@ -35,9 +35,6 @@ public: const wxString& title, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxDEFAULT_FRAME_STYLE, const wxString& name = wxT("frame")); - // Extend event processing to search the document manager's event table - virtual bool ProcessEvent(wxEvent& event); - wxDocManager *GetDocumentManager(void) const { return m_docManager; } void OnExit(wxCommandEvent& event); @@ -46,6 +43,9 @@ public: protected: void Init(); + + virtual bool TryValidator(wxEvent& event); + wxDocManager *m_docManager; private: @@ -77,9 +77,6 @@ public: long type = wxDEFAULT_FRAME_STYLE, const wxString& name = wxFrameNameStr); - // Extend event processing to search the view's event table - virtual bool ProcessEvent(wxEvent& event); - void OnActivate(wxActivateEvent& event); void OnCloseWindow(wxCloseEvent& event); @@ -91,6 +88,9 @@ public: protected: void Init(); + + virtual bool TryValidator(wxEvent& event); + wxDocument* m_childDocument; wxView* m_childView; diff --git a/include/wx/docview.h b/include/wx/docview.h index 7799f53c23..beac80fc73 100644 --- a/include/wx/docview.h +++ b/include/wx/docview.h @@ -213,9 +213,6 @@ public: // Override to do cleanup/veto close virtual bool OnClose(bool deleteWindow); - // Extend event processing to search the document's event table - virtual bool ProcessEvent(wxEvent& event); - // A view's window can call this to notify the view it is (in)active. // The function then notifies the document manager. virtual void Activate(bool activate); @@ -228,6 +225,9 @@ public: #endif protected: + // hook the document into event handlers chain here + virtual bool TryValidator(wxEvent& event); + wxDocument* m_viewDocument; wxString m_viewTypeName; wxWindow* m_viewFrame; @@ -349,9 +349,6 @@ public: void OnUpdateUndo(wxUpdateUIEvent& event); void OnUpdateRedo(wxUpdateUIEvent& event); - // Extend event processing to search the view's event table - virtual bool ProcessEvent(wxEvent& event); - // called when file format detection didn't work, can be overridden to do // something in this case virtual void OnOpenFileFailure() { } @@ -442,6 +439,9 @@ public: #endif // WXWIN_COMPATIBILITY_2_6 protected: + // hook the currently active view into event handlers chain here + virtual bool TryValidator(wxEvent& event); + int m_defaultDocumentNameCounter; int m_maxDocsOpen; wxList m_docs; @@ -481,9 +481,6 @@ public: const wxString& name = wxT("frame")); virtual ~wxDocChildFrame(){} - // Extend event processing to search the view's event table - virtual bool ProcessEvent(wxEvent& event); - void OnActivate(wxActivateEvent& event); void OnCloseWindow(wxCloseEvent& event); @@ -494,6 +491,9 @@ public: bool Destroy() { m_childView = NULL; return wxFrame::Destroy(); } protected: + // hook the child view into event handlers chain here + virtual bool TryValidator(wxEvent& event); + wxDocument* m_childDocument; wxView* m_childView; @@ -529,9 +529,6 @@ public: long style = wxDEFAULT_FRAME_STYLE, const wxString& name = wxFrameNameStr); - // Extend event processing to search the document manager's event table - virtual bool ProcessEvent(wxEvent& event); - wxDocManager *GetDocumentManager() const { return m_docManager; } void OnExit(wxCommandEvent& event); @@ -539,6 +536,9 @@ public: void OnCloseWindow(wxCloseEvent& event); protected: + // hook the document manager into event handling chain here + virtual bool TryValidator(wxEvent& event); + wxDocManager *m_docManager; private: diff --git a/src/common/docmdi.cpp b/src/common/docmdi.cpp index 29f89756d0..72930bbaaf 100644 --- a/src/common/docmdi.cpp +++ b/src/common/docmdi.cpp @@ -68,14 +68,9 @@ void wxDocMDIParentFrame::OnMRUFile(wxCommandEvent& event) (void)m_docManager->CreateDocument(f, wxDOC_SILENT); } -// Extend event processing to search the view's event table -bool wxDocMDIParentFrame::ProcessEvent(wxEvent& event) +bool wxDocMDIParentFrame::TryValidator(wxEvent& event) { - // Try the document manager, then do default processing - if (!m_docManager || !m_docManager->ProcessEvent(event)) - return wxEvtHandler::ProcessEvent(event); - else - return true; + return m_docManager && m_docManager->ProcessEventHere(event); } void wxDocMDIParentFrame::OnCloseWindow(wxCloseEvent& event) @@ -138,31 +133,9 @@ wxDocMDIChildFrame::~wxDocMDIChildFrame(void) m_childView = (wxView *) NULL; } -// Extend event processing to search the view's event table -bool wxDocMDIChildFrame::ProcessEvent(wxEvent& event) +bool wxDocMDIChildFrame::TryValidator(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)) - ret = wxEvtHandler::ProcessEvent(event); - else - ret = true; - } - else - ret = true; - - ActiveEvent = NULL; - return ret; + return m_childView && m_childView->ProcessEventHere(event); } void wxDocMDIChildFrame::OnActivate(wxActivateEvent& event) diff --git a/src/common/docview.cpp b/src/common/docview.cpp index 5d53187c73..2fa45c7e2c 100644 --- a/src/common/docview.cpp +++ b/src/common/docview.cpp @@ -652,13 +652,10 @@ wxView::~wxView() m_viewDocument->RemoveView(this); } -// Extend event processing to search the document's event table -bool wxView::ProcessEvent(wxEvent& event) +bool wxView::TryValidator(wxEvent& event) { - if ( !GetDocument() || !GetDocument()->ProcessEvent(event) ) - return wxEvtHandler::ProcessEvent(event); - - return true; + wxDocument * const doc = GetDocument(); + return doc && doc->ProcessEventHere(event); } void wxView::OnActivateView(bool WXUNUSED(activate), wxView *WXUNUSED(activeView), wxView *WXUNUSED(deactiveView)) @@ -1145,14 +1142,10 @@ wxView *wxDocManager::GetCurrentView() const return NULL; } -// Extend event processing to search the view's event table -bool wxDocManager::ProcessEvent(wxEvent& event) +bool wxDocManager::TryValidator(wxEvent& event) { wxView * const view = GetCurrentView(); - if ( view && view->ProcessEvent(event) ) - return true; - - return wxEvtHandler::ProcessEvent(event); + return view && view->ProcessEventHere(event); } namespace @@ -1782,22 +1775,15 @@ wxDocChildFrame::wxDocChildFrame(wxDocument *doc, view->SetFrame(this); } -// Extend event processing to search the view's event table -bool wxDocChildFrame::ProcessEvent(wxEvent& event) +bool wxDocChildFrame::TryValidator(wxEvent& event) { - if (m_childView) - m_childView->Activate(true); + if ( !m_childView ) + return false; - 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); - else - return true; - } - else - return true; + // FIXME: why is this needed here? + m_childView->Activate(true); + + return m_childView->ProcessEventHere(event); } void wxDocChildFrame::OnActivate(wxActivateEvent& event) @@ -1912,13 +1898,9 @@ void wxDocParentFrame::OnMRUFile(wxCommandEvent& event) } // Extend event processing to search the view's event table -bool wxDocParentFrame::ProcessEvent(wxEvent& event) +bool wxDocParentFrame::TryValidator(wxEvent& event) { - // Try the document manager, then do default processing - if (!m_docManager || !m_docManager->ProcessEvent(event)) - return wxEvtHandler::ProcessEvent(event); - else - return true; + return m_docManager && m_docManager->ProcessEventHere(event); } // Define the behaviour for the frame closing