]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/event.cpp
Better place for coordinate mirroring and removal
[wxWidgets.git] / src / common / event.cpp
index 5e40721437f53ac56ea78d16ec3973f6413cde5d..df764235acf79431caff1336578944f751a47a29 100644 (file)
@@ -31,6 +31,7 @@
     #include "wx/app.h"
     #include "wx/utils.h"
     #include "wx/stopwatch.h"
     #include "wx/app.h"
     #include "wx/utils.h"
     #include "wx/stopwatch.h"
+    #include "wx/module.h"
 
     #if wxUSE_GUI
         #include "wx/control.h"
 
     #if wxUSE_GUI
         #include "wx/control.h"
@@ -40,8 +41,6 @@
     #endif // wxUSE_GUI
 #endif
 
     #endif // wxUSE_GUI
 #endif
 
-#include "wx/module.h"
-
 // ----------------------------------------------------------------------------
 // wxWin macros
 // ----------------------------------------------------------------------------
 // ----------------------------------------------------------------------------
 // wxWin macros
 // ----------------------------------------------------------------------------
@@ -1012,6 +1011,10 @@ wxEvtHandler::wxEvtHandler()
     m_eventsLocker = new wxCriticalSection;
 #  endif
 #endif
     m_eventsLocker = new wxCriticalSection;
 #  endif
 #endif
+    // reentrace not allowed by default
+    m_reentranceAllowed = false;
+    m_eventHandlingInProgress = false;
+    
     // no client data (yet)
     m_clientData = NULL;
     m_clientDataType = wxClientData_None;
     // no client data (yet)
     m_clientData = NULL;
     m_clientDataType = wxClientData_None;
@@ -1132,10 +1135,13 @@ void wxEvtHandler::AddPendingEvent(wxEvent& event)
 
 void wxEvtHandler::ProcessPendingEvents()
 {
 
 void wxEvtHandler::ProcessPendingEvents()
 {
-    // this method is only called by wxApp if this handler does have pending
-    // events
+    // this method is only called by wxApp if this handler does have
+    // pending events
     wxCHECK_RET( m_pendingEvents,
                  wxT("Please call wxApp::ProcessPendingEvents() instead") );
     wxCHECK_RET( m_pendingEvents,
                  wxT("Please call wxApp::ProcessPendingEvents() instead") );
+    
+    // eventhandling is now in progess
+    m_eventHandlingInProgress = true;
 
     wxENTER_CRIT_SECT( Lock() );
 
 
     wxENTER_CRIT_SECT( Lock() );
 
@@ -1153,11 +1159,13 @@ void wxEvtHandler::ProcessPendingEvents()
         // It's importan we remove event from list before processing it.
         // Else a nested event loop, for example from a modal dialog, might
         // process the same event again.
         // It's importan we remove event from list before processing it.
         // Else a nested event loop, for example from a modal dialog, might
         // process the same event again.
+
         m_pendingEvents->Erase(node);
 
         wxLEAVE_CRIT_SECT( Lock() );
 
         ProcessEvent(*event);
         m_pendingEvents->Erase(node);
 
         wxLEAVE_CRIT_SECT( Lock() );
 
         ProcessEvent(*event);
+
         delete event;
 
         wxENTER_CRIT_SECT( Lock() );
         delete event;
 
         wxENTER_CRIT_SECT( Lock() );
@@ -1167,6 +1175,9 @@ void wxEvtHandler::ProcessPendingEvents()
     }
 
     wxLEAVE_CRIT_SECT( Lock() );
     }
 
     wxLEAVE_CRIT_SECT( Lock() );
+    
+    // eventhandling no longer in progess
+    m_eventHandlingInProgress = false;
 }
 
 /*
 }
 
 /*