+
+ if (m_pendingEvents)
+ delete m_pendingEvents;
+
+#if wxUSE_THREADS
+ delete m_eventsLocker;
+#endif
+}
+
+#if wxUSE_THREADS
+bool wxEvtHandler::ProcessThreadEvent(wxEvent& event)
+{
+ wxEvent *event_main;
+ wxCriticalSectionLocker locker(*m_eventsLocker);
+
+ // check that we are really in a child thread
+ wxASSERT( !wxThread::IsMain() );
+
+ if (m_pendingEvents == NULL)
+ m_pendingEvents = new wxList();
+
+ event_main = (wxEvent *)event.GetClassInfo()->CreateObject();
+ *event_main = event;
+
+ m_pendingEvents->Append(event_main);
+
+ wxPendingEventsLocker.Enter();
+ wxPendingEvents.Append(this);
+ wxPendingEventsLocker.Leave();
+
+ return TRUE;