void SetClientData( void *data ) { DoSetClientData(data); }
void *GetClientData() const { return DoGetClientData(); }
+
+ // implementation from now on
+ // --------------------------
+
// check if the given event table entry matches this event and call the
// handler if it does
//
wxEvtHandler *handler,
wxEvent& event);
- // implementation from now on
virtual bool SearchEventTable(wxEventTable& table, wxEvent& event);
bool SearchDynamicEventTable( wxEvent& event );
void ClearEventHashTable() { GetEventHashTable().Clear(); }
void OnSinkDestroyed( wxEvtHandler *sink );
+
+ // The method processing the event in this event handler (or rather in this
+ // event handler chain as it also tries the next handler and so on), i.e.
+ // it returns true if we processed this event or false if we didn't but
+ // does not call TryParent() in the latter case. It also doesn't call
+ // wxApp::FilterEvent() before processing it, this is supposed to be done
+ // by the public ProcessEvent() only once for every event we handle.
+ //
+ // It is meant to be called from ProcessEvent() only and is not virtual,
+ // additional event handlers can be hooked into the normal event processing
+ // logic using TryValidator() hook.
+ bool ProcessEventHere(wxEvent& event);
+
+
private:
static const wxEventTableEntry sm_eventTableEntries[];
//else: proceed normally
}
+ if ( ProcessEventHere(event) )
+ return true;
+
+ // propagate the event upwards the window chain and/or to the application
+ // object if it wasn't processed at this level
+ return TryParent(event);
+}
+
+bool wxEvtHandler::ProcessEventHere(wxEvent& event)
+{
// An event handler can be enabled or disabled
if ( GetEvtHandlerEnabled() )
{
}
// Try going down the event handler chain
- if ( GetNextHandler() )
- {
- // notice that we shouldn't let the parent have the event even if the
- // next handler does not process it because it will have already passed
- // it to the parent in this case
- return GetNextHandler()->ProcessEvent(event);
- }
+ if ( GetNextHandler() && GetNextHandler()->ProcessEventHere(event) )
+ return true;
- // Finally propagate the event upwards the window chain and/or to the
- // application object as necessary
- return TryParent(event);
+ // We don't have a handler for this event.
+ return false;
}
bool wxEvtHandler::SafelyProcessEvent(wxEvent& event)