]> git.saurik.com Git - wxWidgets.git/blobdiff - src/unix/utilsunx.cpp
workaround for blocking behaviour under carbon when running in classic
[wxWidgets.git] / src / unix / utilsunx.cpp
index 2f15a8cb268c60c4a02a9b3272f776330c1ccc83..2447a559fd4aa64cd3768eb362e36bdfa3d9a034 100644 (file)
@@ -15,6 +15,9 @@
 // headers
 // ----------------------------------------------------------------------------
 
 // headers
 // ----------------------------------------------------------------------------
 
+// for compilers that support precompilation, includes "wx.h".
+#include "wx/wxprec.h"
+
 #include "wx/defs.h"
 #include "wx/string.h"
 
 #include "wx/defs.h"
 #include "wx/string.h"
 
 
 #include "wx/unix/execute.h"
 
 
 #include "wx/unix/execute.h"
 
-#ifdef __WXBASE__
+#if wxUSE_STREAMS
+
+// define this to let wxexec.cpp know that we know what we're doing
+#define _WX_USED_BY_WXEXECUTE_
+#include "../common/execcmn.cpp"
+
+#endif // wxUSE_STREAMS
+
+#if wxUSE_BASE
 
 #if defined( __MWERKS__ ) && defined(__MACH__)
 #define WXWIN_OS_DESCRIPTION "MacOS X"
 
 #if defined( __MWERKS__ ) && defined(__MACH__)
 #define WXWIN_OS_DESCRIPTION "MacOS X"
@@ -347,22 +358,6 @@ bool wxShutdown(wxShutdownFlags wFlags)
 
 #if wxUSE_STREAMS
 
 
 #if wxUSE_STREAMS
 
-// ----------------------------------------------------------------------------
-// wxPipeInputStream: stream for reading from a pipe
-// ----------------------------------------------------------------------------
-
-class wxPipeInputStream : public wxFileInputStream
-{
-public:
-    wxPipeInputStream(int fd) : wxFileInputStream(fd) { }
-
-    // return TRUE if the pipe is still opened
-    bool IsOpened() const { return !Eof(); }
-
-    // return TRUE if we have anything to read, don't block
-    virtual bool CanRead() const;
-};
-
 bool wxPipeInputStream::CanRead() const
 {
     if ( m_lasterror == wxSTREAM_EOF )
 bool wxPipeInputStream::CanRead() const
 {
     if ( m_lasterror == wxSTREAM_EOF )
@@ -399,10 +394,6 @@ bool wxPipeInputStream::CanRead() const
     }
 }
 
     }
 }
 
-// define this to let wxexec.cpp know that we know what we're doing
-#define _WX_USED_BY_WXEXECUTE_
-#include "../common/execcmn.cpp"
-
 #endif // wxUSE_STREAMS
 
 // ----------------------------------------------------------------------------
 #endif // wxUSE_STREAMS
 
 // ----------------------------------------------------------------------------
@@ -586,6 +577,9 @@ long wxExecute(wxChar **argv,
     {
         ARGS_CLEANUP;
 
     {
         ARGS_CLEANUP;
 
+        // save it for WaitForChild() use
+        execData.pid = pid;
+
         // prepare for IO redirection
 
 #if wxUSE_STREAMS
         // prepare for IO redirection
 
 #if wxUSE_STREAMS
@@ -829,17 +823,6 @@ wxString wxGetOsDescription()
 
 #endif // !__WXMAC__
 
 
 #endif // !__WXMAC__
 
-int wxGetOsVersion(int *verMaj, int *verMin)
-{
-    // we want this function to work even if there is no wxApp
-    wxConsoleAppTraits traitsConsole;
-    wxAppTraits *traits = wxTheApp ? wxTheApp->GetTraits() : NULL;
-    if ( ! traits )
-        traits = &traitsConsole;
-
-    return traits->GetOSVersion(verMaj, verMin);
-}
-
 unsigned long wxGetProcessId()
 {
     return (unsigned long)getpid();
 unsigned long wxGetProcessId()
 {
     return (unsigned long)getpid();
@@ -1061,7 +1044,7 @@ void wxFatalError( const wxString &msg, const wxString &title )
 
 #endif // WXWIN_COMPATIBILITY_2_2
 
 
 #endif // WXWIN_COMPATIBILITY_2_2
 
-#endif // __WXBASE__
+#endif // wxUSE_BASE
 
 #if wxUSE_GUI
 
 
 #if wxUSE_GUI
 
@@ -1158,14 +1141,27 @@ int wxGUIAppTraits::WaitForChild(wxExecuteData& execData)
         // process terminates
         while ( endProcData->pid != 0 )
         {
         // process terminates
         while ( endProcData->pid != 0 )
         {
+            bool idle = true;
+
 #if wxUSE_STREAMS
             if ( execData.bufOut )
 #if wxUSE_STREAMS
             if ( execData.bufOut )
+            {
                 execData.bufOut->Update();
                 execData.bufOut->Update();
+                idle = false;
+            }
 
             if ( execData.bufErr )
 
             if ( execData.bufErr )
+            {
                 execData.bufErr->Update();
                 execData.bufErr->Update();
+                idle = false;
+            }
 #endif // wxUSE_STREAMS
 
 #endif // wxUSE_STREAMS
 
+            // don't consume 100% of the CPU while we're sitting this in this
+            // loop
+            if ( idle )
+                wxUsleep(1);
+
             // give GTK+ a chance to call GTK_EndProcessDetector here and
             // also repaint the GUI
             wxYield();
             // give GTK+ a chance to call GTK_EndProcessDetector here and
             // also repaint the GUI
             wxYield();
@@ -1183,6 +1179,9 @@ int wxGUIAppTraits::WaitForChild(wxExecuteData& execData)
     }
 }
 
     }
 }
 
+#endif // wxUSE_GUI
+#if wxUSE_BASE
+
 void wxHandleProcessTermination(wxEndProcessData *proc_data)
 {
     // notify user about termination if required
 void wxHandleProcessTermination(wxEndProcessData *proc_data)
 {
     // notify user about termination if required
@@ -1203,5 +1202,4 @@ void wxHandleProcessTermination(wxEndProcessData *proc_data)
     }
 }
 
     }
 }
 
-#endif // wxUSE_GUI
-
+#endif // wxUSE_BASE