X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/8bb6b2c057edbcc5b87f00a8af6ac70f6fd69727..f0a9a84c09e9c8a85617536d62400c469b6cc62c:/src/unix/baseunix.cpp diff --git a/src/unix/baseunix.cpp b/src/unix/baseunix.cpp index 8f63455618..c5e3ddcee1 100644 --- a/src/unix/baseunix.cpp +++ b/src/unix/baseunix.cpp @@ -32,6 +32,10 @@ #include "wx/apptrait.h" #include "wx/unix/execute.h" +#include "wx/evtloop.h" +#include "wx/gsocket.h" + +#include "wx/unix/private/timer.h" // for waitpid() #include @@ -41,43 +45,45 @@ // wxConsoleAppTraits implementation // ============================================================================ -// ---------------------------------------------------------------------------- -// wxExecute support -// ---------------------------------------------------------------------------- - -bool wxConsoleAppTraits::CreateEndProcessPipe(wxExecuteData& WXUNUSED(data)) -{ - // nothing to do, so always ok - return true; -} - -bool -wxConsoleAppTraits::IsWriteFDOfEndProcessPipe(wxExecuteData& WXUNUSED(data), - int WXUNUSED(fd)) -{ - // we don't have any pipe - return false; -} - -void -wxConsoleAppTraits::DetachWriteFDOfEndProcessPipe(wxExecuteData& WXUNUSED(data)) -{ - // nothing to do -} - - int wxConsoleAppTraits::WaitForChild(wxExecuteData& execData) { - wxASSERT_MSG( execData.flags & wxEXEC_SYNC, - wxT("async execution not supported yet") ); - int exitcode = 0; - if ( waitpid(execData.pid, &exitcode, 0) == -1 || !WIFEXITED(exitcode) ) + if ( execData.flags & wxEXEC_SYNC ) { - wxLogSysError(_("Waiting for subprocess termination failed")); + if ( waitpid(execData.pid, &exitcode, 0) == -1 || !WIFEXITED(exitcode) ) + { + wxLogSysError(_("Waiting for subprocess termination failed")); + } + } + else // asynchronous execution + { + wxEndProcessData *endProcData = new wxEndProcessData; + endProcData->process = execData.process; + endProcData->pid = execData.pid; + endProcData->tag = wxAddProcessCallback + ( + endProcData, + execData.pipeEndProcDetect.Detach(wxPipe::Read) + ); + + execData.pipeEndProcDetect.Close(); + exitcode = execData.pid; + } return exitcode; } +#if wxUSE_TIMER + +wxTimerImpl *wxConsoleAppTraits::CreateTimerImpl(wxTimer *timer) +{ + // this doesn't work yet as there is no main loop in console applications + // (but it will be added later) + return new wxUnixTimerImpl(timer); +} + +#endif // wxUSE_TIMER + +// Note: wxConsoleAppTraits::CreateEventLoop() is defined in evtloopunix.cpp!