hook the docview-specific customization of event handling logic at TryValidator() level instead of ProcessEvent(): this ensures that the events are not sent to wxApp before they're passed to all the handlers which might process them (before the events were passed to wxDocument and then immediately to wxApp)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@55786 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -35,9 +35,6 @@ public:
|
|||||||
const wxString& title, const wxPoint& pos = wxDefaultPosition,
|
const wxString& title, const wxPoint& pos = wxDefaultPosition,
|
||||||
const wxSize& size = wxDefaultSize, long style = wxDEFAULT_FRAME_STYLE, const wxString& name = wxT("frame"));
|
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; }
|
wxDocManager *GetDocumentManager(void) const { return m_docManager; }
|
||||||
|
|
||||||
void OnExit(wxCommandEvent& event);
|
void OnExit(wxCommandEvent& event);
|
||||||
@@ -46,6 +43,9 @@ public:
|
|||||||
|
|
||||||
protected:
|
protected:
|
||||||
void Init();
|
void Init();
|
||||||
|
|
||||||
|
virtual bool TryValidator(wxEvent& event);
|
||||||
|
|
||||||
wxDocManager *m_docManager;
|
wxDocManager *m_docManager;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
@@ -77,9 +77,6 @@ public:
|
|||||||
long type = wxDEFAULT_FRAME_STYLE,
|
long type = wxDEFAULT_FRAME_STYLE,
|
||||||
const wxString& name = wxFrameNameStr);
|
const wxString& name = wxFrameNameStr);
|
||||||
|
|
||||||
// Extend event processing to search the view's event table
|
|
||||||
virtual bool ProcessEvent(wxEvent& event);
|
|
||||||
|
|
||||||
void OnActivate(wxActivateEvent& event);
|
void OnActivate(wxActivateEvent& event);
|
||||||
void OnCloseWindow(wxCloseEvent& event);
|
void OnCloseWindow(wxCloseEvent& event);
|
||||||
|
|
||||||
@@ -91,6 +88,9 @@ public:
|
|||||||
|
|
||||||
protected:
|
protected:
|
||||||
void Init();
|
void Init();
|
||||||
|
|
||||||
|
virtual bool TryValidator(wxEvent& event);
|
||||||
|
|
||||||
wxDocument* m_childDocument;
|
wxDocument* m_childDocument;
|
||||||
wxView* m_childView;
|
wxView* m_childView;
|
||||||
|
|
||||||
|
@@ -213,9 +213,6 @@ public:
|
|||||||
// Override to do cleanup/veto close
|
// Override to do cleanup/veto close
|
||||||
virtual bool OnClose(bool deleteWindow);
|
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.
|
// A view's window can call this to notify the view it is (in)active.
|
||||||
// The function then notifies the document manager.
|
// The function then notifies the document manager.
|
||||||
virtual void Activate(bool activate);
|
virtual void Activate(bool activate);
|
||||||
@@ -228,6 +225,9 @@ public:
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
// hook the document into event handlers chain here
|
||||||
|
virtual bool TryValidator(wxEvent& event);
|
||||||
|
|
||||||
wxDocument* m_viewDocument;
|
wxDocument* m_viewDocument;
|
||||||
wxString m_viewTypeName;
|
wxString m_viewTypeName;
|
||||||
wxWindow* m_viewFrame;
|
wxWindow* m_viewFrame;
|
||||||
@@ -349,9 +349,6 @@ public:
|
|||||||
void OnUpdateUndo(wxUpdateUIEvent& event);
|
void OnUpdateUndo(wxUpdateUIEvent& event);
|
||||||
void OnUpdateRedo(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
|
// called when file format detection didn't work, can be overridden to do
|
||||||
// something in this case
|
// something in this case
|
||||||
virtual void OnOpenFileFailure() { }
|
virtual void OnOpenFileFailure() { }
|
||||||
@@ -442,6 +439,9 @@ public:
|
|||||||
#endif // WXWIN_COMPATIBILITY_2_6
|
#endif // WXWIN_COMPATIBILITY_2_6
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
// hook the currently active view into event handlers chain here
|
||||||
|
virtual bool TryValidator(wxEvent& event);
|
||||||
|
|
||||||
int m_defaultDocumentNameCounter;
|
int m_defaultDocumentNameCounter;
|
||||||
int m_maxDocsOpen;
|
int m_maxDocsOpen;
|
||||||
wxList m_docs;
|
wxList m_docs;
|
||||||
@@ -481,9 +481,6 @@ public:
|
|||||||
const wxString& name = wxT("frame"));
|
const wxString& name = wxT("frame"));
|
||||||
virtual ~wxDocChildFrame(){}
|
virtual ~wxDocChildFrame(){}
|
||||||
|
|
||||||
// Extend event processing to search the view's event table
|
|
||||||
virtual bool ProcessEvent(wxEvent& event);
|
|
||||||
|
|
||||||
void OnActivate(wxActivateEvent& event);
|
void OnActivate(wxActivateEvent& event);
|
||||||
void OnCloseWindow(wxCloseEvent& event);
|
void OnCloseWindow(wxCloseEvent& event);
|
||||||
|
|
||||||
@@ -494,6 +491,9 @@ public:
|
|||||||
bool Destroy() { m_childView = NULL; return wxFrame::Destroy(); }
|
bool Destroy() { m_childView = NULL; return wxFrame::Destroy(); }
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
// hook the child view into event handlers chain here
|
||||||
|
virtual bool TryValidator(wxEvent& event);
|
||||||
|
|
||||||
wxDocument* m_childDocument;
|
wxDocument* m_childDocument;
|
||||||
wxView* m_childView;
|
wxView* m_childView;
|
||||||
|
|
||||||
@@ -529,9 +529,6 @@ public:
|
|||||||
long style = wxDEFAULT_FRAME_STYLE,
|
long style = wxDEFAULT_FRAME_STYLE,
|
||||||
const wxString& name = wxFrameNameStr);
|
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; }
|
wxDocManager *GetDocumentManager() const { return m_docManager; }
|
||||||
|
|
||||||
void OnExit(wxCommandEvent& event);
|
void OnExit(wxCommandEvent& event);
|
||||||
@@ -539,6 +536,9 @@ public:
|
|||||||
void OnCloseWindow(wxCloseEvent& event);
|
void OnCloseWindow(wxCloseEvent& event);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
// hook the document manager into event handling chain here
|
||||||
|
virtual bool TryValidator(wxEvent& event);
|
||||||
|
|
||||||
wxDocManager *m_docManager;
|
wxDocManager *m_docManager;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
@@ -68,14 +68,9 @@ void wxDocMDIParentFrame::OnMRUFile(wxCommandEvent& event)
|
|||||||
(void)m_docManager->CreateDocument(f, wxDOC_SILENT);
|
(void)m_docManager->CreateDocument(f, wxDOC_SILENT);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Extend event processing to search the view's event table
|
bool wxDocMDIParentFrame::TryValidator(wxEvent& event)
|
||||||
bool wxDocMDIParentFrame::ProcessEvent(wxEvent& event)
|
|
||||||
{
|
{
|
||||||
// Try the document manager, then do default processing
|
return m_docManager && m_docManager->ProcessEventHere(event);
|
||||||
if (!m_docManager || !m_docManager->ProcessEvent(event))
|
|
||||||
return wxEvtHandler::ProcessEvent(event);
|
|
||||||
else
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void wxDocMDIParentFrame::OnCloseWindow(wxCloseEvent& event)
|
void wxDocMDIParentFrame::OnCloseWindow(wxCloseEvent& event)
|
||||||
@@ -138,31 +133,9 @@ wxDocMDIChildFrame::~wxDocMDIChildFrame(void)
|
|||||||
m_childView = (wxView *) NULL;
|
m_childView = (wxView *) NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Extend event processing to search the view's event table
|
bool wxDocMDIChildFrame::TryValidator(wxEvent& event)
|
||||||
bool wxDocMDIChildFrame::ProcessEvent(wxEvent& event)
|
|
||||||
{
|
{
|
||||||
static wxEvent *ActiveEvent = NULL;
|
return m_childView && m_childView->ProcessEventHere(event);
|
||||||
|
|
||||||
// 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;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void wxDocMDIChildFrame::OnActivate(wxActivateEvent& event)
|
void wxDocMDIChildFrame::OnActivate(wxActivateEvent& event)
|
||||||
|
@@ -652,13 +652,10 @@ wxView::~wxView()
|
|||||||
m_viewDocument->RemoveView(this);
|
m_viewDocument->RemoveView(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Extend event processing to search the document's event table
|
bool wxView::TryValidator(wxEvent& event)
|
||||||
bool wxView::ProcessEvent(wxEvent& event)
|
|
||||||
{
|
{
|
||||||
if ( !GetDocument() || !GetDocument()->ProcessEvent(event) )
|
wxDocument * const doc = GetDocument();
|
||||||
return wxEvtHandler::ProcessEvent(event);
|
return doc && doc->ProcessEventHere(event);
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void wxView::OnActivateView(bool WXUNUSED(activate), wxView *WXUNUSED(activeView), wxView *WXUNUSED(deactiveView))
|
void wxView::OnActivateView(bool WXUNUSED(activate), wxView *WXUNUSED(activeView), wxView *WXUNUSED(deactiveView))
|
||||||
@@ -1145,14 +1142,10 @@ wxView *wxDocManager::GetCurrentView() const
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Extend event processing to search the view's event table
|
bool wxDocManager::TryValidator(wxEvent& event)
|
||||||
bool wxDocManager::ProcessEvent(wxEvent& event)
|
|
||||||
{
|
{
|
||||||
wxView * const view = GetCurrentView();
|
wxView * const view = GetCurrentView();
|
||||||
if ( view && view->ProcessEvent(event) )
|
return view && view->ProcessEventHere(event);
|
||||||
return true;
|
|
||||||
|
|
||||||
return wxEvtHandler::ProcessEvent(event);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
namespace
|
namespace
|
||||||
@@ -1782,22 +1775,15 @@ wxDocChildFrame::wxDocChildFrame(wxDocument *doc,
|
|||||||
view->SetFrame(this);
|
view->SetFrame(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Extend event processing to search the view's event table
|
bool wxDocChildFrame::TryValidator(wxEvent& event)
|
||||||
bool wxDocChildFrame::ProcessEvent(wxEvent& event)
|
|
||||||
{
|
{
|
||||||
if (m_childView)
|
if ( !m_childView )
|
||||||
m_childView->Activate(true);
|
return false;
|
||||||
|
|
||||||
if ( !m_childView || ! m_childView->ProcessEvent(event) )
|
// FIXME: why is this needed here?
|
||||||
{
|
m_childView->Activate(true);
|
||||||
// Only hand up to the parent if it's a menu command
|
|
||||||
if (!event.IsKindOf(CLASSINFO(wxCommandEvent)) || !GetParent() || !GetParent()->ProcessEvent(event))
|
return m_childView->ProcessEventHere(event);
|
||||||
return wxEvtHandler::ProcessEvent(event);
|
|
||||||
else
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void wxDocChildFrame::OnActivate(wxActivateEvent& 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
|
// 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
|
return m_docManager && m_docManager->ProcessEventHere(event);
|
||||||
if (!m_docManager || !m_docManager->ProcessEvent(event))
|
|
||||||
return wxEvtHandler::ProcessEvent(event);
|
|
||||||
else
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Define the behaviour for the frame closing
|
// Define the behaviour for the frame closing
|
||||||
|
Reference in New Issue
Block a user