no real change: rename wxPendingEvents to wxHandlersWithPendingEvents since its current name is misleading; that's not a list of events but a list of event handlers
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@57623 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -244,8 +244,8 @@ public:
|
|||||||
// (already) be dispatched
|
// (already) be dispatched
|
||||||
static bool IsMainLoopRunning();
|
static bool IsMainLoopRunning();
|
||||||
|
|
||||||
// process all events in the wxPendingEvents list -- it is necessary to
|
// process all events in the wxHandlersWithPendingEvents list -- it is necessary
|
||||||
// call this function to process posted events. This happens during each
|
// to call this function to process posted events. This happens during each
|
||||||
// event loop iteration in GUI mode but if there is no main loop, it may be
|
// event loop iteration in GUI mode but if there is no main loop, it may be
|
||||||
// also called directly.
|
// also called directly.
|
||||||
virtual void ProcessPendingEvents();
|
virtual void ProcessPendingEvents();
|
||||||
|
@@ -3080,9 +3080,9 @@ typedef void (wxEvtHandler::*wxClipboardTextEventFunction)(wxClipboardTextEvent&
|
|||||||
// list containing event handlers with pending events for them
|
// list containing event handlers with pending events for them
|
||||||
//
|
//
|
||||||
// notice that each event handler should occur at most once in this list
|
// notice that each event handler should occur at most once in this list
|
||||||
extern WXDLLIMPEXP_BASE wxList *wxPendingEvents;
|
extern WXDLLIMPEXP_BASE wxList *wxHandlersWithPendingEvents;
|
||||||
#if wxUSE_THREADS
|
#if wxUSE_THREADS
|
||||||
extern WXDLLIMPEXP_BASE wxCriticalSection *wxPendingEventsLocker;
|
extern WXDLLIMPEXP_BASE wxCriticalSection *wxHandlersWithPendingEventsLocker;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
|
@@ -163,7 +163,7 @@ bool wxAppConsoleBase::Initialize(int& WXUNUSED(argc), wxChar **argv)
|
|||||||
#endif // wxUSE_INTL
|
#endif // wxUSE_INTL
|
||||||
|
|
||||||
#if wxUSE_THREADS
|
#if wxUSE_THREADS
|
||||||
wxPendingEventsLocker = new wxCriticalSection;
|
wxHandlersWithPendingEventsLocker = new wxCriticalSection;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef __WXPALMOS__
|
#ifndef __WXPALMOS__
|
||||||
@@ -190,12 +190,12 @@ void wxAppConsoleBase::CleanUp()
|
|||||||
m_mainLoop = NULL;
|
m_mainLoop = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
delete wxPendingEvents;
|
delete wxHandlersWithPendingEvents;
|
||||||
wxPendingEvents = NULL;
|
wxHandlersWithPendingEvents = NULL;
|
||||||
|
|
||||||
#if wxUSE_THREADS
|
#if wxUSE_THREADS
|
||||||
delete wxPendingEventsLocker;
|
delete wxHandlersWithPendingEventsLocker;
|
||||||
wxPendingEventsLocker = NULL;
|
wxHandlersWithPendingEventsLocker = NULL;
|
||||||
#endif // wxUSE_THREADS
|
#endif // wxUSE_THREADS
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -327,11 +327,11 @@ bool wxAppConsoleBase::Dispatch()
|
|||||||
|
|
||||||
bool wxAppConsoleBase::HasPendingEvents() const
|
bool wxAppConsoleBase::HasPendingEvents() const
|
||||||
{
|
{
|
||||||
wxENTER_CRIT_SECT( *wxPendingEventsLocker );
|
wxENTER_CRIT_SECT( *wxHandlersWithPendingEventsLocker );
|
||||||
|
|
||||||
bool has = wxPendingEvents && !wxPendingEvents->IsEmpty();
|
bool has = wxHandlersWithPendingEvents && !wxHandlersWithPendingEvents->IsEmpty();
|
||||||
|
|
||||||
wxLEAVE_CRIT_SECT( *wxPendingEventsLocker );
|
wxLEAVE_CRIT_SECT( *wxHandlersWithPendingEventsLocker );
|
||||||
|
|
||||||
return has;
|
return has;
|
||||||
}
|
}
|
||||||
@@ -347,34 +347,34 @@ bool wxAppConsoleBase::IsMainLoopRunning()
|
|||||||
void wxAppConsoleBase::ProcessPendingEvents()
|
void wxAppConsoleBase::ProcessPendingEvents()
|
||||||
{
|
{
|
||||||
#if wxUSE_THREADS
|
#if wxUSE_THREADS
|
||||||
if ( !wxPendingEventsLocker )
|
if ( !wxHandlersWithPendingEventsLocker )
|
||||||
return;
|
return;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
wxENTER_CRIT_SECT( *wxPendingEventsLocker );
|
wxENTER_CRIT_SECT( *wxHandlersWithPendingEventsLocker );
|
||||||
|
|
||||||
if (wxPendingEvents)
|
if (wxHandlersWithPendingEvents)
|
||||||
{
|
{
|
||||||
// iterate until the list becomes empty: the handlers remove themselves
|
// iterate until the list becomes empty: the handlers remove themselves
|
||||||
// from it when they don't have any more pending events
|
// from it when they don't have any more pending events
|
||||||
wxList::compatibility_iterator node = wxPendingEvents->GetFirst();
|
wxList::compatibility_iterator node = wxHandlersWithPendingEvents->GetFirst();
|
||||||
while (node)
|
while (node)
|
||||||
{
|
{
|
||||||
// In ProcessPendingEvents(), new handlers might be add
|
// In ProcessPendingEvents(), new handlers might be add
|
||||||
// and we can safely leave the critical section here.
|
// and we can safely leave the critical section here.
|
||||||
wxLEAVE_CRIT_SECT( *wxPendingEventsLocker );
|
wxLEAVE_CRIT_SECT( *wxHandlersWithPendingEventsLocker );
|
||||||
|
|
||||||
wxEvtHandler *handler = (wxEvtHandler *)node->GetData();
|
wxEvtHandler *handler = (wxEvtHandler *)node->GetData();
|
||||||
handler->ProcessPendingEvents();
|
handler->ProcessPendingEvents();
|
||||||
|
|
||||||
wxENTER_CRIT_SECT( *wxPendingEventsLocker );
|
wxENTER_CRIT_SECT( *wxHandlersWithPendingEventsLocker );
|
||||||
|
|
||||||
// restart as the iterators could have been invalidated
|
// restart as the iterators could have been invalidated
|
||||||
node = wxPendingEvents->GetFirst();
|
node = wxHandlersWithPendingEvents->GetFirst();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
wxLEAVE_CRIT_SECT( *wxPendingEventsLocker );
|
wxLEAVE_CRIT_SECT( *wxHandlersWithPendingEventsLocker );
|
||||||
}
|
}
|
||||||
|
|
||||||
void wxAppConsoleBase::WakeUpIdle()
|
void wxAppConsoleBase::WakeUpIdle()
|
||||||
|
@@ -145,11 +145,11 @@ IMPLEMENT_DYNAMIC_CLASS(wxEventTableEntryModule, wxModule)
|
|||||||
|
|
||||||
// List containing event handlers with pending events (each handler can occur
|
// List containing event handlers with pending events (each handler can occur
|
||||||
// at most once here)
|
// at most once here)
|
||||||
wxList *wxPendingEvents = NULL;
|
wxList *wxHandlersWithPendingEvents = NULL;
|
||||||
|
|
||||||
#if wxUSE_THREADS
|
#if wxUSE_THREADS
|
||||||
// protects wxPendingEvents list
|
// protects wxHandlersWithPendingEvents list
|
||||||
wxCriticalSection *wxPendingEventsLocker = NULL;
|
wxCriticalSection *wxHandlersWithPendingEventsLocker = NULL;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// common event types are defined here, other event types are defined by the
|
// common event types are defined here, other event types are defined by the
|
||||||
@@ -1089,25 +1089,25 @@ wxEvtHandler::~wxEvtHandler()
|
|||||||
m_pendingEvents->DeleteContents(true);
|
m_pendingEvents->DeleteContents(true);
|
||||||
delete m_pendingEvents;
|
delete m_pendingEvents;
|
||||||
|
|
||||||
// Remove us from wxPendingEvents if necessary.
|
// Remove us from wxHandlersWithPendingEvents if necessary.
|
||||||
if ( wxPendingEvents )
|
if ( wxHandlersWithPendingEvents )
|
||||||
{
|
{
|
||||||
#if wxUSE_THREADS
|
#if wxUSE_THREADS
|
||||||
if (wxPendingEventsLocker)
|
if (wxHandlersWithPendingEventsLocker)
|
||||||
wxENTER_CRIT_SECT(*wxPendingEventsLocker);
|
wxENTER_CRIT_SECT(*wxHandlersWithPendingEventsLocker);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if ( wxPendingEvents->DeleteObject(this) )
|
if ( wxHandlersWithPendingEvents->DeleteObject(this) )
|
||||||
{
|
{
|
||||||
// check that we were present only once in the list
|
// check that we were present only once in the list
|
||||||
wxASSERT_MSG( !wxPendingEvents->Find(this),
|
wxASSERT_MSG( !wxHandlersWithPendingEvents->Find(this),
|
||||||
"Handler occurs twice in wxPendingEvents list" );
|
"Handler occurs twice in wxHandlersWithPendingEvents list" );
|
||||||
}
|
}
|
||||||
//else: we weren't in this list at all, it's ok
|
//else: we weren't in this list at all, it's ok
|
||||||
|
|
||||||
#if wxUSE_THREADS
|
#if wxUSE_THREADS
|
||||||
if (wxPendingEventsLocker)
|
if (wxHandlersWithPendingEventsLocker)
|
||||||
wxLEAVE_CRIT_SECT(*wxPendingEventsLocker);
|
wxLEAVE_CRIT_SECT(*wxHandlersWithPendingEventsLocker);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1146,19 +1146,19 @@ void wxEvtHandler::QueueEvent(wxEvent *event)
|
|||||||
// 2) Add this event handler to list of event handlers that
|
// 2) Add this event handler to list of event handlers that
|
||||||
// have pending events.
|
// have pending events.
|
||||||
|
|
||||||
wxENTER_CRIT_SECT(*wxPendingEventsLocker);
|
wxENTER_CRIT_SECT(*wxHandlersWithPendingEventsLocker);
|
||||||
|
|
||||||
if ( !wxPendingEvents )
|
if ( !wxHandlersWithPendingEvents )
|
||||||
wxPendingEvents = new wxList;
|
wxHandlersWithPendingEvents = new wxList;
|
||||||
if ( !wxPendingEvents->Find(this) )
|
if ( !wxHandlersWithPendingEvents->Find(this) )
|
||||||
wxPendingEvents->Append(this);
|
wxHandlersWithPendingEvents->Append(this);
|
||||||
|
|
||||||
wxLEAVE_CRIT_SECT(*wxPendingEventsLocker);
|
wxLEAVE_CRIT_SECT(*wxHandlersWithPendingEventsLocker);
|
||||||
|
|
||||||
// only release m_pendingEventsLock now because otherwise there is a race
|
// only release m_pendingEventsLock now because otherwise there is a race
|
||||||
// condition as described in the ticket #9093: we could process the event
|
// condition as described in the ticket #9093: we could process the event
|
||||||
// just added to m_pendingEvents in our ProcessPendingEvents() below before
|
// just added to m_pendingEvents in our ProcessPendingEvents() below before
|
||||||
// we had time to append this pointer to wxPendingEvents list; thus
|
// we had time to append this pointer to wxHandlersWithPendingEvents list; thus
|
||||||
// breaking the invariant that a handler should be in the list iff it has
|
// breaking the invariant that a handler should be in the list iff it has
|
||||||
// any pending events to process
|
// any pending events to process
|
||||||
wxLEAVE_CRIT_SECT( m_pendingEventsLock );
|
wxLEAVE_CRIT_SECT( m_pendingEventsLock );
|
||||||
@@ -1190,13 +1190,13 @@ void wxEvtHandler::ProcessPendingEvents()
|
|||||||
if ( m_pendingEvents->IsEmpty() )
|
if ( m_pendingEvents->IsEmpty() )
|
||||||
{
|
{
|
||||||
#if wxUSE_THREADS
|
#if wxUSE_THREADS
|
||||||
if (wxPendingEventsLocker)
|
if (wxHandlersWithPendingEventsLocker)
|
||||||
wxENTER_CRIT_SECT(*wxPendingEventsLocker);
|
wxENTER_CRIT_SECT(*wxHandlersWithPendingEventsLocker);
|
||||||
#endif
|
#endif
|
||||||
wxPendingEvents->DeleteObject(this);
|
wxHandlersWithPendingEvents->DeleteObject(this);
|
||||||
#if wxUSE_THREADS
|
#if wxUSE_THREADS
|
||||||
if (wxPendingEventsLocker)
|
if (wxHandlersWithPendingEventsLocker)
|
||||||
wxLEAVE_CRIT_SECT(*wxPendingEventsLocker);
|
wxLEAVE_CRIT_SECT(*wxHandlersWithPendingEventsLocker);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user