/////////////////////////////////////////////////////////////////////////////
-// Name: wx/unix/appunix.cpp
+// Name: src/unix/appunix.cpp
// Purpose: wxAppConsole with wxMainLoop implementation
// Author: Lukasz Michalski
// Created: 28/01/2005
// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
-#include "wx/app.h"
-#include "wx/log.h"
+#include "wx/wxprec.h"
+
+#ifdef __BORLANDC__
+ #pragma hdrstop
+#endif
+
+#ifndef WX_PRECOMP
+ #include "wx/app.h"
+ #include "wx/log.h"
+#endif
+
#include "wx/evtloop.h"
#include <signal.h>
#include <unistd.h>
-bool wxAppConsoleUnix::Initialize(int& argc, wxChar** argv)
-{
- if ( !wxAppConsole::Initialize(argc,argv) )
- return false;
+#ifndef SA_RESTART
+ // don't use for systems which don't define it (at least VMS and QNX)
+ #define SA_RESTART 0
+#endif
- if ( !m_mainLoop->IsOk() )
+// use unusual names for arg[cv] to avoid clashes with wxApp members with the
+// same names
+bool wxAppConsole::Initialize(int& argc_, wxChar** argv_)
+{
+ if ( !wxAppConsoleBase::Initialize(argc_, argv_) )
return false;
sigemptyset(&m_signalsCaught);
return true;
}
-void wxAppConsoleUnix::HandleSignal(int signal)
+void wxAppConsole::HandleSignal(int signal)
{
- wxAppConsoleUnix * const app = wxTheApp;
+ wxAppConsole * const app = wxTheApp;
if ( !app )
return;
app->WakeUpIdle();
}
-void wxAppConsoleUnix::CheckSignal()
+void wxAppConsole::CheckSignal()
{
for ( SignalHandlerHash::iterator it = m_signalHandlerHash.begin();
it != m_signalHandlerHash.end();
}
}
-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"
{
- const bool install = handler != SIG_DFL && handler != SIG_IGN;
+ typedef void (*SignalHandler_t)(int);
+}
+
+bool wxAppConsole::SetSignalHandler(int signal, SignalHandler handler)
+{
+ 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_handler = (SignalHandler_t)&wxAppConsole::HandleSignal;
sa.sa_flags = SA_RESTART;
int res = sigaction(signal, &sa, 0);
if ( res != 0 )
return true;
}
+