]> git.saurik.com Git - wxWidgets.git/blobdiff - src/unix/apptraits.cpp
Fix wxHtmlHelpData::SetTempDir() to behave correctly without trailing slash.
[wxWidgets.git] / src / unix / apptraits.cpp
index a19b8e0e8758007538d014c86a3d591923e23fa6..d29f9acdbb838931f946a11bcf8d8666c39da831 100644 (file)
@@ -3,7 +3,6 @@
 // Purpose:     implementation of wxGUIAppTraits for Unix systems
 // Author:      Vadim Zeitlin
 // Created:     2008-03-22
-// RCS-ID:      $Id$
 // Copyright:   (c) 2008 Vadim Zeitlin <vadim@wxwindows.org>
 // Licence:     wxWindows licence
 ///////////////////////////////////////////////////////////////////////////////
     #pragma hdrstop
 #endif
 
+#include "wx/apptrait.h"
+
 #ifndef WX_PRECOMP
+    #include "wx/utils.h"
 #endif // WX_PRECOMP
 
-#include "wx/apptrait.h"
 #include "wx/unix/execute.h"
+#include "wx/evtloop.h"
 
 // ============================================================================
 // implementation
 
 int wxGUIAppTraits::WaitForChild(wxExecuteData& execData)
 {
-    const int flags = execData.flags;
-    if ( !(flags & wxEXEC_SYNC) || (flags & wxEXEC_NOEVENTS) )
-    {
-        // async or blocking sync cases are already handled by the base class
-        // just fine, no need to duplicate its code here
-        return wxAppTraits::WaitForChild(execData);
-    }
-
-    // here we're dealing with the case of synchronous execution when we want
-    // to process the GUI events while waiting for the child termination
-
-    wxEndProcessData endProcData;
-    endProcData.pid = execData.pid;
-    endProcData.tag = AddProcessCallback
-                      (
-                         &endProcData,
-                         execData.GetEndProcReadFD()
-                      );
-    endProcData.async = false;
-
-
     // prepare to wait for the child termination: show to the user that we're
     // busy and refuse all input unless explicitly told otherwise
     wxBusyCursor bc;
-    wxWindowDisabler wd(!(flags & wxEXEC_NODISABLE));
-
-    // endProcData.pid will be set to 0 from wxHandleProcessTermination() when
-    // the process terminates
-    while ( endProcData.pid != 0 )
-    {
-        // don't consume 100% of the CPU while we're sitting in this
-        // loop
-        if ( !CheckForRedirectedIO(execData) )
-            wxMilliSleep(1);
+    wxWindowDisabler wd(!(execData.flags & wxEXEC_NODISABLE));
 
-        // give the toolkit a chance to call wxHandleProcessTermination() here
-        // and also repaint the GUI and handle other accumulated events
-        wxYield();
-    }
-
-    return endProcData.exitcode;
+    // Allocate an event loop that will be used to wait for the process
+    // to terminate, will handle stdout, stderr, and any other events and pass
+    // it to the common (to console and GUI) code which will run it.
+    wxGUIEventLoop loop;
+    return RunLoopUntilChildExit(execData, loop);
 }
 
-