X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/de6185e212ebc37ff11ff70278e3c4f68419b097..f0a9a84c09e9c8a85617536d62400c469b6cc62c:/src/unix/baseunix.cpp diff --git a/src/unix/baseunix.cpp b/src/unix/baseunix.cpp index de2ee2f156..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,85 +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")); - } - - return exitcode; -} - -// ---------------------------------------------------------------------------- -// misc other stuff -// ---------------------------------------------------------------------------- - -// this is in mac/utils.cpp under Mac -#if !defined(__WXMAC__) - -wxToolkitInfo& wxConsoleAppTraits::GetToolkitInfo() -{ - static wxToolkitInfo info; - int major, minor; - - FILE *f = popen("uname -r", "r"); - if (f) - { - char buf[32]; - size_t c = fread(buf, 1, sizeof(buf) - 1, f); - pclose(f); - buf[c] = '\0'; - if ( sscanf(buf, "%d.%d", &major, &minor) != 2 ) + if ( waitpid(execData.pid, &exitcode, 0) == -1 || !WIFEXITED(exitcode) ) { - // unrecognized uname string format - major = - minor = -1; + wxLogSysError(_("Waiting for subprocess termination failed")); } } - else + else // asynchronous execution { - // failed to run uname - major = - minor = -1; + 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; + } - info.versionMajor = major; - info.versionMinor = minor; - info.name = _T("wxBase"); - info.os = wxUNIX; + return exitcode; +} + +#if wxUSE_TIMER - return info; +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 // __WXMAC__ +#endif // wxUSE_TIMER + +// Note: wxConsoleAppTraits::CreateEventLoop() is defined in evtloopunix.cpp!