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
;