X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/83d8eb470b87ee0f19a203d2af3b70b153a87554..f0a9a84c09e9c8a85617536d62400c469b6cc62c:/src/unix/baseunix.cpp diff --git a/src/unix/baseunix.cpp b/src/unix/baseunix.cpp index d7e34da3c5..c5e3ddcee1 100644 --- a/src/unix/baseunix.cpp +++ b/src/unix/baseunix.cpp @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////// -// Name: unix/baseunix.cpp +// Name: src/unix/baseunix.cpp // Purpose: misc stuff only used in console applications under Unix // Author: Vadim Zeitlin // Modified by: @@ -27,11 +27,15 @@ #ifndef WX_PRECOMP #include "wx/log.h" #include "wx/intl.h" + #include "wx/utils.h" #endif //WX_PRECOMP #include "wx/apptrait.h" -#include "wx/utils.h" #include "wx/unix/execute.h" +#include "wx/evtloop.h" +#include "wx/gsocket.h" + +#include "wx/unix/private/timer.h" // for waitpid() #include @@ -41,86 +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) ) - { - 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) + if ( execData.flags & wxEXEC_SYNC ) { - 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; +} - return info; +#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 // __WXMAC__ +#endif // wxUSE_TIMER +// Note: wxConsoleAppTraits::CreateEventLoop() is defined in evtloopunix.cpp!