X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/e4b713a278375619150b76eebb04be1eae889564..f78024a1f98fac96991a9f87804000512a32a976:/src/common/event.cpp diff --git a/src/common/event.cpp b/src/common/event.cpp index 02c63cc4fa..221360d838 100644 --- a/src/common/event.cpp +++ b/src/common/event.cpp @@ -761,6 +761,9 @@ wxEvtHandler::wxEvtHandler() m_eventsLocker = new wxCriticalSection; # endif #endif + // no client data (yet) + m_clientData = NULL; + m_clientDataType = wxClientData_None; } wxEvtHandler::~wxEvtHandler() @@ -798,6 +801,10 @@ wxEvtHandler::~wxEvtHandler() delete m_eventsLocker; # endif #endif + + // we only delete object data, not untyped + if ( m_clientDataType == wxClientData_Object ) + delete m_clientObject; } #if wxUSE_THREADS @@ -913,6 +920,8 @@ bool wxEvtHandler::ProcessEvent(wxEvent& event) info = CLASSINFO(wxWindowGTK); # elif defined(__WXMGL__) info = CLASSINFO(wxWindowMGL); +# elif defined(__WXPM__) + info = CLASSINFO(wxWindowOS2); # elif defined(__WXMAC__) info = CLASSINFO(wxWindowMac); # elif defined(__WXMOTIF__) @@ -1171,6 +1180,48 @@ bool wxEvtHandler::SearchDynamicEventTable( wxEvent& event ) return FALSE; }; +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; +} + + #if WXWIN_COMPATIBILITY bool wxEvtHandler::OnClose() {