]> git.saurik.com Git - wxWidgets.git/blobdiff - src/x11/app.cpp
fix handling of errors due to the other end of the socket being closed
[wxWidgets.git] / src / x11 / app.cpp
index dad65db005e1cabb283c6b9143cf6b24e488f319..772abba8c6003fd25eb740631f56cfc291efe511 100644 (file)
@@ -25,6 +25,7 @@
     #include "wx/memory.h"
     #include "wx/gdicmn.h"
     #include "wx/module.h"
+    #include "wx/crt.h"
 #endif
 
 #include "wx/evtloop.h"
@@ -776,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 )
             {
@@ -788,17 +787,11 @@ bool wxApp::Yield(bool onlyIfNeeded)
             return false;
         }
 
-        s_inYield = true;
+        m_isInsideYield = true;
 
         // 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
@@ -812,13 +805,7 @@ bool wxApp::Yield(bool onlyIfNeeded)
 #endif
         ProcessIdle();
 
-        if (newEventLoop)
-        {
-            wxEventLoop::SetActive(NULL);
-            delete newEventLoop;
-        }
-
-        s_inYield = false;
+        m_isInsideYield = false;
     }
 
     return true;