]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/evtloopcmn.cpp
applying patch, fixes #10523
[wxWidgets.git] / src / common / evtloopcmn.cpp
index 26848196fa87237c4c7f7997d8f4674aaa7dfb1e..863946f59db59b75f87ae23331cded03f02e06ad 100644 (file)
@@ -9,14 +9,6 @@
 // Licence:     wxWindows licence
 ///////////////////////////////////////////////////////////////////////////////
 
 // Licence:     wxWindows licence
 ///////////////////////////////////////////////////////////////////////////////
 
-// ============================================================================
-// declarations
-// ============================================================================
-
-// ----------------------------------------------------------------------------
-// headers
-// ----------------------------------------------------------------------------
-
 // for compilers that support precompilation, includes "wx.h".
 #include "wx/wxprec.h"
 
 // for compilers that support precompilation, includes "wx.h".
 #include "wx/wxprec.h"
 
@@ -31,7 +23,7 @@
 #endif //WX_PRECOMP
 
 // ----------------------------------------------------------------------------
 #endif //WX_PRECOMP
 
 // ----------------------------------------------------------------------------
-// globals
+// wxEventLoopBase
 // ----------------------------------------------------------------------------
 
 wxEventLoopBase *wxEventLoopBase::ms_activeLoop = NULL;
 // ----------------------------------------------------------------------------
 
 wxEventLoopBase *wxEventLoopBase::ms_activeLoop = NULL;
@@ -42,6 +34,28 @@ wxEventLoopBase::wxEventLoopBase()
     m_eventsToProcessInsideYield = wxEVT_CATEGORY_ALL;
 }
 
     m_eventsToProcessInsideYield = wxEVT_CATEGORY_ALL;
 }
 
+bool wxEventLoopBase::IsMain() const
+{
+    if (wxTheApp)
+        return wxTheApp->GetMainLoop() == this;
+    return false;
+}
+
+/* static */
+void wxEventLoopBase::SetActive(wxEventLoopBase* loop)
+{
+    ms_activeLoop = loop;
+
+    if (wxTheApp)
+        wxTheApp->OnEventLoopEnter(loop);
+}
+
+void wxEventLoopBase::OnExit()
+{
+    if (wxTheApp)
+        wxTheApp->OnEventLoopExit(this);
+}
+
 void wxEventLoopBase::DelayPendingEventHandler(wxEvtHandler* toDelay)
 {
     wxENTER_CRIT_SECT(m_handlersWithPendingEventsLocker);
 void wxEventLoopBase::DelayPendingEventHandler(wxEvtHandler* toDelay)
 {
     wxENTER_CRIT_SECT(m_handlersWithPendingEventsLocker);
@@ -127,7 +141,7 @@ void wxEventLoopBase::ProcessPendingEvents()
     {
         // In ProcessPendingEvents(), new handlers might be added
         // and we can safely leave the critical section here.
     {
         // In ProcessPendingEvents(), new handlers might be added
         // and we can safely leave the critical section here.
-        wxENTER_CRIT_SECT(m_handlersWithPendingEventsLocker);
+        wxLEAVE_CRIT_SECT(m_handlersWithPendingEventsLocker);
 
         // NOTE: we always call ProcessPendingEvents() on the first event handler
         //       with pending events because handlers auto-remove themselves
 
         // NOTE: we always call ProcessPendingEvents() on the first event handler
         //       with pending events because handlers auto-remove themselves
@@ -135,7 +149,7 @@ void wxEventLoopBase::ProcessPendingEvents()
         //       more pending events.
         m_handlersWithPendingEvents[0]->ProcessPendingEvents();
 
         //       more pending events.
         m_handlersWithPendingEvents[0]->ProcessPendingEvents();
 
-        wxLEAVE_CRIT_SECT(m_handlersWithPendingEventsLocker);
+        wxENTER_CRIT_SECT(m_handlersWithPendingEventsLocker);
     }
 
     // now the wxHandlersWithPendingEvents is surely empty; however some event
     }
 
     // now the wxHandlersWithPendingEvents is surely empty; however some event