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:
@@ -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
|
||||
|
Reference in New Issue
Block a user