]> git.saurik.com Git - wxWidgets.git/blobdiff - src/x11/app.cpp
Fixed and refactored wxPropertyGridManager decsription text box painting
[wxWidgets.git] / src / x11 / app.cpp
index 90ea2a60af89ebf1e8eee0b0eb7f657091ec3a13..e37d35ad289238cb92ba20807db52b360c8098ec 100644 (file)
@@ -769,7 +769,7 @@ void wxApp::Exit()
 
 // Yield to other processes
 
-bool wxApp::Yield(bool onlyIfNeeded)
+bool wxApp::DoYield(bool onlyIfNeeded, long eventsToProcess)
 {
     // Sometimes only 2 yields seem
     // to do the trick, e.g. in the
@@ -777,9 +777,7 @@ bool wxApp::Yield(bool onlyIfNeeded)
     int i;
     for (i = 0; i < 2; i++)
     {
-        static bool s_inYield = false;
-
-        if ( s_inYield )
+        if ( m_isInsideYield )
         {
             if ( !onlyIfNeeded )
             {
@@ -789,22 +787,18 @@ bool wxApp::Yield(bool onlyIfNeeded)
             return false;
         }
 
-        s_inYield = true;
+        m_isInsideYield = true;
+        m_eventsToProcessInsideYield = eventsToProcess;
 
         // Make sure we have an event loop object,
         // or Pending/Dispatch will fail
-        wxEventLoopBase * const eventLoop = wxEventLoop::GetActive();
-        wxEventLoop* newEventLoop = NULL;
-        if (!eventLoop)
-        {
-            newEventLoop = new wxEventLoop;
-            wxEventLoop::SetActive(newEventLoop);
-        }
+        wxEventLoopGuarantor dummyLoopIfNeeded;
 
         // Call dispatch at least once so that sockets
         // can be tested
         wxTheApp->Dispatch();
 
+        // TODO: implement event filtering using the eventsToProcess mask
         while (wxTheApp && wxTheApp->Pending())
             wxTheApp->Dispatch();
 
@@ -813,13 +807,7 @@ bool wxApp::Yield(bool onlyIfNeeded)
 #endif
         ProcessIdle();
 
-        if (newEventLoop)
-        {
-            wxEventLoop::SetActive(NULL);
-            delete newEventLoop;
-        }
-
-        s_inYield = false;
+        m_isInsideYield = false;
     }
 
     return true;