1 /////////////////////////////////////////////////////////////////////////////// 
   2 // Name:        src/unix/apptraits.cpp 
   3 // Purpose:     implementation of wxGUIAppTraits for Unix systems 
   4 // Author:      Vadim Zeitlin 
   7 // Copyright:   (c) 2008 Vadim Zeitlin <vadim@wxwindows.org> 
   8 // Licence:     wxWindows licence 
   9 /////////////////////////////////////////////////////////////////////////////// 
  11 // ============================================================================ 
  13 // ============================================================================ 
  15 // ---------------------------------------------------------------------------- 
  17 // ---------------------------------------------------------------------------- 
  19 // for compilers that support precompilation, includes "wx.h". 
  20 #include "wx/wxprec.h" 
  26 #include "wx/apptrait.h" 
  32 #include "wx/unix/execute.h" 
  34 // ============================================================================ 
  36 // ============================================================================ 
  38 int wxGUIAppTraits::WaitForChild(wxExecuteData
& execData
) 
  40     const int flags 
= execData
.flags
; 
  41     if ( !(flags 
& wxEXEC_SYNC
) || (flags 
& wxEXEC_NOEVENTS
) ) 
  43         // async or blocking sync cases are already handled by the base class 
  44         // just fine, no need to duplicate its code here 
  45         return wxAppTraits::WaitForChild(execData
); 
  48     // here we're dealing with the case of synchronous execution when we want 
  49     // to process the GUI events while waiting for the child termination 
  51     wxEndProcessData endProcData
; 
  52     endProcData
.pid 
= execData
.pid
; 
  53     endProcData
.tag 
= AddProcessCallback
 
  56                          execData
.GetEndProcReadFD() 
  58     endProcData
.async 
= false; 
  61     // prepare to wait for the child termination: show to the user that we're 
  62     // busy and refuse all input unless explicitly told otherwise 
  64     wxWindowDisabler 
wd(!(flags 
& wxEXEC_NODISABLE
)); 
  66     // endProcData.pid will be set to 0 from wxHandleProcessTermination() when 
  67     // the process terminates 
  68     while ( endProcData
.pid 
!= 0 ) 
  70         // don't consume 100% of the CPU while we're sitting in this 
  72         if ( !CheckForRedirectedIO(execData
) ) 
  75         // give the toolkit a chance to call wxHandleProcessTermination() here 
  76         // and also repaint the GUI and handle other accumulated events 
  80     return endProcData
.exitcode
;