+void wxEvtHandler::DoSetClientObject( wxClientData *data )
+{
+ wxASSERT_MSG( m_clientDataType != wxClientData_Void,
+ wxT("can't have both object and void client data") );
+
+ if ( m_clientObject )
+ delete m_clientObject;
+
+ m_clientObject = data;
+ m_clientDataType = wxClientData_Object;
+}
+
+wxClientData *wxEvtHandler::DoGetClientObject() const
+{
+ // it's not an error to call GetClientObject() on a window which doesn't
+ // have client data at all - NULL will be returned
+ wxASSERT_MSG( m_clientDataType != wxClientData_Void,
+ wxT("this window doesn't have object client data") );
+
+ return m_clientObject;
+}
+
+void wxEvtHandler::DoSetClientData( void *data )
+{
+ wxASSERT_MSG( m_clientDataType != wxClientData_Object,
+ wxT("can't have both object and void client data") );
+
+ m_clientData = data;
+ m_clientDataType = wxClientData_Void;
+}
+
+void *wxEvtHandler::DoGetClientData() const
+{
+ // it's not an error to call GetClientData() on a window which doesn't have
+ // client data at all - NULL will be returned
+ wxASSERT_MSG( m_clientDataType != wxClientData_Object,
+ wxT("this window doesn't have void client data") );
+
+ return m_clientData;
+}
+
+// A helper func to find an wxEventConnectionRef object
+wxEventConnectionRef* wxEvtHandler::FindRefInTrackerList( wxEvtHandler *eventSink )
+{
+ wxASSERT(eventSink);
+ for( wxTrackerNode *ptn=eventSink->GetFirst(); ptn; ptn=ptn->m_nxt )
+ {
+ // Only want wxEventConnectionRef nodes here
+ if( ptn->GetType()!=wxTrackerNode::EventConnectionRef )
+ continue;
+ wxEventConnectionRef *pecr = static_cast<wxEventConnectionRef*>(ptn);
+ if( pecr && pecr->m_src==this )
+ {
+ wxASSERT( pecr->m_sink==eventSink );
+ return pecr;