]> git.saurik.com Git - wxWidgets.git/blobdiff - src/gtk/app.cpp
wxMax instead of max, former is always around
[wxWidgets.git] / src / gtk / app.cpp
index 53aa238e66165046506fec4f015e4c5adcb8f348..86822b5abd5be560ca97369162302db3b2b1c615 100644 (file)
 #include "wx/module.h"
 #include "wx/image.h"
 
+#ifdef __WXGPE__
+#include <gpe/init.h>
+#endif
+
 #ifdef __WXUNIVERSAL__
     #include "wx/univ/theme.h"
     #include "wx/univ/renderer.h"
@@ -160,20 +164,31 @@ bool wxApp::Yield(bool onlyIfNeeded)
 // wxWakeUpIdle
 //-----------------------------------------------------------------------------
 
+// RR/KH: The wxMutexGui calls are not needed on GTK2 according to
+// the GTK faq, http://www.gtk.org/faq/#AEN500
+// The calls to gdk_threads_enter() and leave() are specifically noted
+// as not being necessary.  The MutexGui calls are still left in for GTK1.
+// Eliminating the MutexGui calls fixes the long-standing "random" lockup
+// when using wxPostEvent (which calls WakeUpIdle) from a thread.
+
 void wxApp::WakeUpIdle()
 {
+#ifndef __WXGTK20__
 #if wxUSE_THREADS
     if (!wxThread::IsMain())
         wxMutexGuiEnter();
-#endif
+#endif // wxUSE_THREADS_
+#endif // __WXGTK2__
 
     if (g_isIdle)
         wxapp_install_idle_handler();
 
+#ifndef __WXGTK20__
 #if wxUSE_THREADS
     if (!wxThread::IsMain())
         wxMutexGuiLeave();
-#endif
+#endif // wxUSE_THREADS_
+#endif // __WXGTK2__
 }
 
 //-----------------------------------------------------------------------------
@@ -539,13 +554,15 @@ GdkVisual *wxApp::GetGdkVisual()
 
 bool wxApp::Initialize(int& argc, wxChar **argv)
 {
+    bool init_result;
+    
 #if wxUSE_THREADS
     // GTK 1.2 up to version 1.2.3 has broken threads
     if ((gtk_major_version == 1) &&
         (gtk_minor_version == 2) &&
         (gtk_micro_version < 4))
     {
-        printf( "wxWindows warning: GUI threading disabled due to outdated GTK version\n" );
+        printf( "wxWidgets warning: GUI threading disabled due to outdated GTK version\n" );
     }
     else
     {
@@ -582,7 +599,13 @@ bool wxApp::Initialize(int& argc, wxChar **argv)
     argvGTK[argc] = NULL;
 
     int argcGTK = argc;
-    gtk_init( &argcGTK, &argvGTK );
+    
+#ifdef __WXGPE__
+    init_result = true;  // is there a _check() version of this?
+    gpe_application_init( &argcGTK, &argvGTK );
+#else
+    init_result = gtk_init_check( &argcGTK, &argvGTK );
+#endif
 
     if ( argcGTK != argc )
     {
@@ -609,9 +632,14 @@ bool wxApp::Initialize(int& argc, wxChar **argv)
 #else // !wxUSE_UNICODE
     // gtk_init() shouldn't actually change argv itself (just its contents) so
     // it's ok to pass pointer to it
-    gtk_init( &argc, &argv );
+    init_result = gtk_init_check( &argc, &argv );
 #endif // wxUSE_UNICODE/!wxUSE_UNICODE
 
+    if (!init_result) {
+        wxLogError(wxT("Unable to initialize gtk, is DISPLAY set properly?"));
+        return false;
+    }
+    
     // we can not enter threads before gtk_init is done
     gdk_threads_enter();
 
@@ -628,8 +656,6 @@ bool wxApp::Initialize(int& argc, wxChar **argv)
     wxFont::SetDefaultEncoding(wxLocale::GetSystemEncoding());
 #endif
 
-    wxGetRootWindow();
-
     return true;
 }