#ifndef WX_PRECOMP
#include "wx/app.h"
+ #include "wx/list.h"
#endif
#include "wx/thread.h"
+#include "wx/confbase.h"
+
+// ===========================================================================
+// implementation
+// ===========================================================================
// ---------------------------------------------------------------------------
// wxAppBase
void wxAppBase::ProcessPendingEvents()
{
// ensure that we're the only thread to modify the pending events list
- wxCRIT_SECT_LOCKER(locker, wxPendingEventsLocker);
+ wxENTER_CRIT_SECT( *wxPendingEventsLocker );
if ( !wxPendingEvents )
+ {
+ wxLEAVE_CRIT_SECT( *wxPendingEventsLocker );
return;
+ }
// iterate until the list becomes empty
wxNode *node = wxPendingEvents->First();
while (node)
{
wxEvtHandler *handler = (wxEvtHandler *)node->Data();
+ delete node;
+ // In ProcessPendingEvents(), new handlers might be add
+ // and we can safely leave the critical section here.
+ wxLEAVE_CRIT_SECT( *wxPendingEventsLocker );
handler->ProcessPendingEvents();
+ wxENTER_CRIT_SECT( *wxPendingEventsLocker );
- delete node;
node = wxPendingEvents->First();
}
+
+ wxLEAVE_CRIT_SECT( *wxPendingEventsLocker );
}
+int wxAppBase::OnExit()
+{
+#if wxUSE_CONFIG
+ // delete the config object if any (don't use Get() here, but Set()
+ // because Get() could create a new config object)
+ delete wxConfigBase::Set((wxConfigBase *) NULL);
+#endif // wxUSE_CONFIG
+
+ return 0;
+}