New event locking.
Removed CVS trash. Some compile fixes. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@4716 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
parent
0979c96223
commit
16c1f79c04
@ -47,22 +47,31 @@
|
|||||||
void wxAppBase::ProcessPendingEvents()
|
void wxAppBase::ProcessPendingEvents()
|
||||||
{
|
{
|
||||||
// ensure that we're the only thread to modify the pending events list
|
// ensure that we're the only thread to modify the pending events list
|
||||||
wxCRIT_SECT_LOCKER(locker, *wxPendingEventsLocker);
|
wxENTER_CRIT_SECT( *wxPendingEventsLocker );
|
||||||
|
|
||||||
if ( !wxPendingEvents )
|
if ( !wxPendingEvents )
|
||||||
|
{
|
||||||
|
wxLEAVE_CRIT_SECT( *wxPendingEventsLocker );
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
// iterate until the list becomes empty
|
// iterate until the list becomes empty
|
||||||
wxNode *node = wxPendingEvents->First();
|
wxNode *node = wxPendingEvents->First();
|
||||||
while (node)
|
while (node)
|
||||||
{
|
{
|
||||||
wxEvtHandler *handler = (wxEvtHandler *)node->Data();
|
wxEvtHandler *handler = (wxEvtHandler *)node->Data();
|
||||||
|
|
||||||
handler->ProcessPendingEvents();
|
|
||||||
|
|
||||||
delete node;
|
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 );
|
||||||
|
|
||||||
node = wxPendingEvents->First();
|
node = wxPendingEvents->First();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
wxLEAVE_CRIT_SECT( *wxPendingEventsLocker );
|
||||||
}
|
}
|
||||||
|
|
||||||
int wxAppBase::OnExit()
|
int wxAppBase::OnExit()
|
||||||
|
@ -583,12 +583,6 @@ wxEvtHandler::~wxEvtHandler()
|
|||||||
|
|
||||||
bool wxEvtHandler::ProcessThreadEvent(wxEvent& event)
|
bool wxEvtHandler::ProcessThreadEvent(wxEvent& event)
|
||||||
{
|
{
|
||||||
#if defined(__VISAGECPP__)
|
|
||||||
wxCriticalSectionLocker locker(m_eventsLocker);
|
|
||||||
#else
|
|
||||||
wxCriticalSectionLocker locker(*m_eventsLocker);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// check that we are really in a child thread
|
// check that we are really in a child thread
|
||||||
wxASSERT_MSG( !wxThread::IsMain(),
|
wxASSERT_MSG( !wxThread::IsMain(),
|
||||||
wxT("use ProcessEvent() in main thread") );
|
wxT("use ProcessEvent() in main thread") );
|
||||||
@ -602,6 +596,14 @@ bool wxEvtHandler::ProcessThreadEvent(wxEvent& event)
|
|||||||
|
|
||||||
void wxEvtHandler::AddPendingEvent(wxEvent& event)
|
void wxEvtHandler::AddPendingEvent(wxEvent& event)
|
||||||
{
|
{
|
||||||
|
// 1) Add event to list of pending events of this event handler
|
||||||
|
|
||||||
|
#if defined(__VISAGECPP__)
|
||||||
|
wxENTER_CRIT_SECT( m_eventsLocker);
|
||||||
|
#else
|
||||||
|
wxENTER_CRIT_SECT( *m_eventsLocker);
|
||||||
|
#endif
|
||||||
|
|
||||||
if ( !m_pendingEvents )
|
if ( !m_pendingEvents )
|
||||||
m_pendingEvents = new wxList;
|
m_pendingEvents = new wxList;
|
||||||
|
|
||||||
@ -609,6 +611,15 @@ void wxEvtHandler::AddPendingEvent(wxEvent& event)
|
|||||||
|
|
||||||
m_pendingEvents->Append(event2);
|
m_pendingEvents->Append(event2);
|
||||||
|
|
||||||
|
#if defined(__VISAGECPP__)
|
||||||
|
wxLEAVE_CRIT_SECT( m_eventsLocker);
|
||||||
|
#else
|
||||||
|
wxLEAVE_CRIT_SECT( *m_eventsLocker);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// 2) Add this event handler to list of event handlers that
|
||||||
|
// have pending events.
|
||||||
|
|
||||||
wxENTER_CRIT_SECT(*wxPendingEventsLocker);
|
wxENTER_CRIT_SECT(*wxPendingEventsLocker);
|
||||||
|
|
||||||
if ( !wxPendingEvents )
|
if ( !wxPendingEvents )
|
||||||
@ -617,28 +628,49 @@ void wxEvtHandler::AddPendingEvent(wxEvent& event)
|
|||||||
|
|
||||||
wxLEAVE_CRIT_SECT(*wxPendingEventsLocker);
|
wxLEAVE_CRIT_SECT(*wxPendingEventsLocker);
|
||||||
|
|
||||||
|
// 3) Inform the system that new pending events are somwehere,
|
||||||
|
// and that these should be processed in idle time.
|
||||||
|
|
||||||
wxWakeUpIdle();
|
wxWakeUpIdle();
|
||||||
}
|
}
|
||||||
|
|
||||||
void wxEvtHandler::ProcessPendingEvents()
|
void wxEvtHandler::ProcessPendingEvents()
|
||||||
{
|
{
|
||||||
#if defined(__VISAGECPP__)
|
#if defined(__VISAGECPP__)
|
||||||
wxCRIT_SECT_LOCKER(locker, m_eventsLocker);
|
wxENTER_CRIT_SECT( m_eventsLocker);
|
||||||
#else
|
#else
|
||||||
wxCRIT_SECT_LOCKER(locker, *m_eventsLocker);
|
wxENTER_CRIT_SECT( *m_eventsLocker);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
wxNode *node = m_pendingEvents->First();
|
wxNode *node = m_pendingEvents->First();
|
||||||
wxEvent *event;
|
|
||||||
|
|
||||||
while ( node )
|
while ( node )
|
||||||
{
|
{
|
||||||
event = (wxEvent *)node->Data();
|
wxEvent *event = (wxEvent *)node->Data();
|
||||||
|
delete node;
|
||||||
|
|
||||||
|
// In ProcessEvent, new events might get added and
|
||||||
|
// we can safely leave the crtical section here.
|
||||||
|
#if defined(__VISAGECPP__)
|
||||||
|
wxLEAVE_CRIT_SECT( m_eventsLocker);
|
||||||
|
#else
|
||||||
|
wxLEAVE_CRIT_SECT( *m_eventsLocker);
|
||||||
|
#endif
|
||||||
ProcessEvent(*event);
|
ProcessEvent(*event);
|
||||||
delete event;
|
delete event;
|
||||||
delete node;
|
#if defined(__VISAGECPP__)
|
||||||
|
wxENTER_CRIT_SECT( m_eventsLocker);
|
||||||
|
#else
|
||||||
|
wxENTER_CRIT_SECT( *m_eventsLocker);
|
||||||
|
#endif
|
||||||
|
|
||||||
node = m_pendingEvents->First();
|
node = m_pendingEvents->First();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if defined(__VISAGECPP__)
|
||||||
|
wxLEAVE_CRIT_SECT( m_eventsLocker);
|
||||||
|
#else
|
||||||
|
wxLEAVE_CRIT_SECT( *m_eventsLocker);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -11,8 +11,10 @@
|
|||||||
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include "gdk/gdk.h"
|
|
||||||
#include "glib.h"
|
#include <gdk/gdk.h>
|
||||||
|
#include <glib.h>
|
||||||
|
|
||||||
#include "wx/gsocket.h"
|
#include "wx/gsocket.h"
|
||||||
#include "wx/unix/gsockunx.h"
|
#include "wx/unix/gsockunx.h"
|
||||||
|
|
||||||
|
@ -26,9 +26,9 @@
|
|||||||
#include "wx/tooltip.h"
|
#include "wx/tooltip.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "gdk/gdk.h"
|
#include <gdk/gdk.h>
|
||||||
#include "gtk/gtk.h"
|
#include <gtk/gtk.h>
|
||||||
#include "gdk/gdkkeysyms.h"
|
#include <gdk/gdkkeysyms.h>
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// idle system
|
// idle system
|
||||||
|
@ -19,9 +19,9 @@
|
|||||||
#include "wx/menu.h"
|
#include "wx/menu.h"
|
||||||
#include "wx/intl.h"
|
#include "wx/intl.h"
|
||||||
|
|
||||||
#include "glib.h"
|
#include <glib.h>
|
||||||
#include "gdk/gdk.h"
|
#include <gdk/gdk.h>
|
||||||
#include "gtk/gtk.h"
|
#include <gtk/gtk.h>
|
||||||
#include "wx/gtk/win_gtk.h"
|
#include "wx/gtk/win_gtk.h"
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
|
@ -21,8 +21,8 @@
|
|||||||
#include "wx/accel.h"
|
#include "wx/accel.h"
|
||||||
#endif // wxUSE_ACCEL
|
#endif // wxUSE_ACCEL
|
||||||
|
|
||||||
#include "gdk/gdk.h"
|
#include <gdk/gdk.h>
|
||||||
#include "gtk/gtk.h"
|
#include <gtk/gtk.h>
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// idle system
|
// idle system
|
||||||
|
@ -11,8 +11,10 @@
|
|||||||
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include "gdk/gdk.h"
|
|
||||||
#include "glib.h"
|
#include <gdk/gdk.h>
|
||||||
|
#include <glib.h>
|
||||||
|
|
||||||
#include "wx/gsocket.h"
|
#include "wx/gsocket.h"
|
||||||
#include "wx/unix/gsockunx.h"
|
#include "wx/unix/gsockunx.h"
|
||||||
|
|
||||||
|
@ -26,9 +26,9 @@
|
|||||||
#include "wx/tooltip.h"
|
#include "wx/tooltip.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "gdk/gdk.h"
|
#include <gdk/gdk.h>
|
||||||
#include "gtk/gtk.h"
|
#include <gtk/gtk.h>
|
||||||
#include "gdk/gdkkeysyms.h"
|
#include <gdk/gdkkeysyms.h>
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// idle system
|
// idle system
|
||||||
|
@ -19,9 +19,9 @@
|
|||||||
#include "wx/menu.h"
|
#include "wx/menu.h"
|
||||||
#include "wx/intl.h"
|
#include "wx/intl.h"
|
||||||
|
|
||||||
#include "glib.h"
|
#include <glib.h>
|
||||||
#include "gdk/gdk.h"
|
#include <gdk/gdk.h>
|
||||||
#include "gtk/gtk.h"
|
#include <gtk/gtk.h>
|
||||||
#include "wx/gtk/win_gtk.h"
|
#include "wx/gtk/win_gtk.h"
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
|
@ -21,8 +21,8 @@
|
|||||||
#include "wx/accel.h"
|
#include "wx/accel.h"
|
||||||
#endif // wxUSE_ACCEL
|
#endif // wxUSE_ACCEL
|
||||||
|
|
||||||
#include "gdk/gdk.h"
|
#include <gdk/gdk.h>
|
||||||
#include "gtk/gtk.h"
|
#include <gtk/gtk.h>
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// idle system
|
// idle system
|
||||||
|
Loading…
Reference in New Issue
Block a user