]> git.saurik.com Git - wxWidgets.git/blobdiff - src/unix/appunix.cpp
Ensure there is valid context for DrawRectangle
[wxWidgets.git] / src / unix / appunix.cpp
index db90d98ffe103b83e36b585f4c1af304793488ab..5c59dec71ca6d81a702dd9f7381ed713f249cefd 100644 (file)
@@ -1,5 +1,5 @@
 /////////////////////////////////////////////////////////////////////////////
 /////////////////////////////////////////////////////////////////////////////
-// Name:        wx/unix/appunix.cpp
+// Name:        src/unix/appunix.cpp
 // Purpose:     wxAppConsole with wxMainLoop implementation
 // Author:      Lukasz Michalski
 // Created:     28/01/2005
 // Purpose:     wxAppConsole with wxMainLoop implementation
 // Author:      Lukasz Michalski
 // Created:     28/01/2005
@@ -8,16 +8,32 @@
 // Licence:     wxWindows licence
 /////////////////////////////////////////////////////////////////////////////
 
 // 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>
 
 #include "wx/evtloop.h"
 
 #include <signal.h>
 #include <unistd.h>
 
-bool wxAppConsole::Initialize(int& argc, wxChar** argv)
+#ifndef SA_RESTART
+    // don't use for systems which don't define it (at least VMS and QNX)
+    #define SA_RESTART 0
+#endif
+
+// 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) )
+    if ( !wxAppConsoleBase::Initialize(argc_, argv_) )
         return false;
 
     sigemptyset(&m_signalsCaught);
         return false;
 
     sigemptyset(&m_signalsCaught);
@@ -50,13 +66,23 @@ void wxAppConsole::CheckSignal()
     }
 }
 
     }
 }
 
+// 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)
 {
 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));
 
     struct sigaction sa;
     memset(&sa, 0, sizeof(sa));
-    sa.sa_handler = &wxAppConsole::HandleSignal;
+    sa.sa_handler = (SignalHandler_t)&wxAppConsole::HandleSignal;
     sa.sa_flags = SA_RESTART;
     int res = sigaction(signal, &sa, 0);
     if ( res != 0 )
     sa.sa_flags = SA_RESTART;
     int res = sigaction(signal, &sa, 0);
     if ( res != 0 )