X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/f6342fb5e6524edffa219d5843536ea279bba4df..4e2a3778386d60356dab319afa2d3f987f86d6b2:/src/unix/appunix.cpp?ds=sidebyside diff --git a/src/unix/appunix.cpp b/src/unix/appunix.cpp index 15bff1bd77..1c89ecf7e4 100644 --- a/src/unix/appunix.cpp +++ b/src/unix/appunix.cpp @@ -8,23 +8,27 @@ // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// -#include "wx/app.h" -#include "wx/log.h" -#include "wx/evtloop.h" +#include "wx/wxprec.h" + +#ifdef __BORLANDC__ + #pragma hdrstop +#endif -//this code should not be compiled when GUI is defined -//(monolithic build issue) -#if !wxUSE_GUI +#ifndef WX_PRECOMP + #include "wx/app.h" + #include "wx/log.h" +#endif + +#include "wx/evtloop.h" #include #include -bool wxAppConsoleUnix::Initialize(int& argc, wxChar** argv) +// use unusual names for arg[cv] to avoid clashes with wxApp members with the +// same names +bool wxAppConsole::Initialize(int& argc_, wxChar** argv_) { - if ( !wxAppConsole::Initialize(argc,argv) ) - return false; - - if ( !m_mainLoop->IsOk() ) + if ( !wxAppConsoleBase::Initialize(argc_, argv_) ) return false; sigemptyset(&m_signalsCaught); @@ -32,9 +36,9 @@ bool wxAppConsoleUnix::Initialize(int& argc, wxChar** argv) return true; } -void wxAppConsoleUnix::HandleSignal(int signal) +void wxAppConsole::HandleSignal(int signal) { - wxAppConsoleUnix * const app = wxTheApp; + wxAppConsole * const app = wxTheApp; if ( !app ) return; @@ -42,7 +46,7 @@ void wxAppConsoleUnix::HandleSignal(int signal) app->WakeUpIdle(); } -void wxAppConsoleUnix::CheckSignal() +void wxAppConsole::CheckSignal() { for ( SignalHandlerHash::iterator it = m_signalHandlerHash.begin(); it != m_signalHandlerHash.end(); @@ -57,15 +61,29 @@ void wxAppConsoleUnix::CheckSignal() } } -bool wxAppConsoleUnix::SetSignalHandler(int signal, SignalHandler handler) +// the type of the signal handlers we use is "void(*)(int)" while the real +// signal handlers are extern "C" and so have incompatible type and at least +// Sun CC warns about it, so use explicit casts to suppress these warnings as +// they should be harmless +extern "C" +{ + typedef void (*SignalHandler_t)(int); +} + +bool wxAppConsole::SetSignalHandler(int signal, SignalHandler handler) { - const bool install = handler != SIG_DFL && handler != SIG_IGN; + const bool install = (SignalHandler_t)handler != SIG_DFL && + (SignalHandler_t)handler != SIG_IGN; struct sigaction sa; memset(&sa, 0, sizeof(sa)); - sa.sa_handler = &wxAppConsoleUnix::HandleSignal; - sa.sa_flags = SA_RESTART; - int res = sigaction(signal, &sa, 0); + sa.sa_handler = (SignalHandler_t)&wxAppConsole::HandleSignal; +#ifdef __VMS + sa.sa_flags = 0; +#else + sa.sa_flags = SA_RESTART; +#endif + int res = sigaction(signal, &sa, 0); if ( res != 0 ) { wxLogSysError(_("Failed to install signal handler")); @@ -80,4 +98,3 @@ bool wxAppConsoleUnix::SetSignalHandler(int signal, SignalHandler handler) return true; } -#endif // !wxUSE_GUI