X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/717de46036ff913de0f5c5cbb1d0fd0bb03f4c3a..0c62004afb4926ecce56883250aaf72890b2ff9d:/src/common/appbase.cpp?ds=sidebyside diff --git a/src/common/appbase.cpp b/src/common/appbase.cpp index 738d2f311a..209241a55b 100644 --- a/src/common/appbase.cpp +++ b/src/common/appbase.cpp @@ -44,6 +44,7 @@ #include "wx/msgout.h" #include "wx/ptr_scpd.h" #include "wx/tokenzr.h" +#include "wx/thread.h" #if wxUSE_EXCEPTIONS && wxUSE_STL #include @@ -177,11 +178,7 @@ bool wxAppConsoleBase::Initialize(int& argcOrig, wxChar **argvOrig) #endif #ifndef __WXPALMOS__ -#if wxUSE_UNICODE - if ( m_appName.empty() && (bool) argv ) -#else if ( m_appName.empty() && argv ) -#endif { // the application name is, by default, the name of its executable file wxFileName::SplitPath(argv[0], NULL, &m_appName, NULL); @@ -362,21 +359,21 @@ void wxAppConsoleBase::ProcessPendingEvents() if (wxPendingEvents) { - // iterate until the list becomes empty + // iterate until the list becomes empty: the handlers remove themselves + // from it when they don't have any more pending events wxList::compatibility_iterator node = wxPendingEvents->GetFirst(); while (node) { - wxEvtHandler *handler = (wxEvtHandler *)node->GetData(); - wxPendingEvents->Erase(node); - // In ProcessPendingEvents(), new handlers might be add // and we can safely leave the critical section here. wxLEAVE_CRIT_SECT( *wxPendingEventsLocker ); + wxEvtHandler *handler = (wxEvtHandler *)node->GetData(); handler->ProcessPendingEvents(); wxENTER_CRIT_SECT( *wxPendingEventsLocker ); + // restart as the iterators could have been invalidated node = wxPendingEvents->GetFirst(); } } @@ -648,13 +645,6 @@ void wxConsoleAppTraitsBase::RemoveFromPendingDelete(wxObject * WXUNUSED(object) // nothing to do } -#if wxUSE_SOCKETS -GSocketGUIFunctionsTable* wxConsoleAppTraitsBase::GetSocketGUIFunctionsTable() -{ - return NULL; -} -#endif - // ---------------------------------------------------------------------------- // wxAppTraits // ---------------------------------------------------------------------------- @@ -667,6 +657,31 @@ void wxAppTraitsBase::SetLocale() } #endif +#if wxUSE_THREADS +void wxMutexGuiEnterImpl(); +void wxMutexGuiLeaveImpl(); + +void wxAppTraitsBase::MutexGuiEnter() +{ + wxMutexGuiEnterImpl(); +} + +void wxAppTraitsBase::MutexGuiLeave() +{ + wxMutexGuiLeaveImpl(); +} + +void WXDLLIMPEXP_BASE wxMutexGuiEnter() +{ + wxAppConsoleBase::GetInstance()->GetTraits()->MutexGuiEnter(); +} + +void WXDLLIMPEXP_BASE wxMutexGuiLeave() +{ + wxAppConsoleBase::GetInstance()->GetTraits()->MutexGuiLeave(); +} +#endif // wxUSE_THREADS + #ifdef __WXDEBUG__ bool wxAppTraitsBase::ShowAssertDialog(const wxString& msgOriginal) @@ -794,12 +809,6 @@ void wxTrap() { #if defined(__WXMSW__) && !defined(__WXMICROWIN__) DebugBreak(); -#elif defined(__WXMAC__) && !defined(__DARWIN__) - #if __powerc - Debugger(); - #else - SysBreak(); - #endif #elif defined(_MSL_USING_MW_C_HEADERS) && _MSL_USING_MW_C_HEADERS Debugger(); #elif defined(__UNIX__)