]> git.saurik.com Git - wxWidgets.git/blobdiff - src/gtk1/app.cpp
Visualage C++ V4.0 duplicate symbol fixes
[wxWidgets.git] / src / gtk1 / app.cpp
index 7bc83fdbd7deb4b3816b14b56c81aeed255db09e..3196c1a79ca104d64acdad2a477c86641273acc5 100644 (file)
@@ -49,6 +49,8 @@ wxAppInitializerFunction wxAppBase::m_appInitFn = (wxAppInitializerFunction) NUL
 
 extern bool g_isIdle;
 
 
 extern bool g_isIdle;
 
+bool g_mainThreadLocked = FALSE;
+
 //-----------------------------------------------------------------------------
 // local functions
 //-----------------------------------------------------------------------------
 //-----------------------------------------------------------------------------
 // local functions
 //-----------------------------------------------------------------------------
@@ -136,9 +138,6 @@ gint wxapp_idle_callback( gpointer WXUNUSED(data) )
     // thread so we must lock it here ourselves
     gdk_threads_enter();
 
     // thread so we must lock it here ourselves
     gdk_threads_enter();
 
-    /* sent idle event to all who request them */
-    while (wxTheApp->ProcessIdle()) { }
-
     /* we don't want any more idle events until the next event is
        sent to wxGTK */
     gtk_idle_remove( wxTheApp->m_idleTag );
     /* we don't want any more idle events until the next event is
        sent to wxGTK */
     gtk_idle_remove( wxTheApp->m_idleTag );
@@ -151,6 +150,9 @@ gint wxapp_idle_callback( gpointer WXUNUSED(data) )
        emptied */
     g_isIdle = TRUE;
 
        emptied */
     g_isIdle = TRUE;
 
+    /* sent idle event to all who request them */
+    while (wxTheApp->ProcessIdle()) { }
+
     // release lock again
     gdk_threads_leave();
 
     // release lock again
     gdk_threads_leave();
 
@@ -200,6 +202,8 @@ gint wxapp_wakeup_timerout_callback( gpointer WXUNUSED(data) )
 
     // unblock other threads wishing to do some GUI things
     wxMutexGuiLeave();
 
     // unblock other threads wishing to do some GUI things
     wxMutexGuiLeave();
+    
+    g_mainThreadLocked = TRUE;
 
     // wake up other threads
     wxUsleep( 1 );
 
     // wake up other threads
     wxUsleep( 1 );
@@ -207,6 +211,8 @@ gint wxapp_wakeup_timerout_callback( gpointer WXUNUSED(data) )
     // block other thread again
     wxMutexGuiEnter();
 
     // block other thread again
     wxMutexGuiEnter();
 
+    g_mainThreadLocked = FALSE;
+
     wxapp_install_thread_wakeup();
 
     // release lock again
     wxapp_install_thread_wakeup();
 
     // release lock again
@@ -346,11 +352,11 @@ bool wxApp::ProcessIdle()
 void wxApp::OnIdle( wxIdleEvent &event )
 {
     static bool s_inOnIdle = FALSE;
 void wxApp::OnIdle( wxIdleEvent &event )
 {
     static bool s_inOnIdle = FALSE;
-
+    
     /* Avoid recursion (via ProcessEvent default case) */
     if (s_inOnIdle)
         return;
     /* Avoid recursion (via ProcessEvent default case) */
     if (s_inOnIdle)
         return;
-
+    
     s_inOnIdle = TRUE;
 
     /* Resend in the main thread events which have been prepared in other
     s_inOnIdle = TRUE;
 
     /* Resend in the main thread events which have been prepared in other
@@ -360,13 +366,6 @@ void wxApp::OnIdle( wxIdleEvent &event )
     /* 'Garbage' collection of windows deleted with Close(). */
     DeletePendingObjects();
 
     /* 'Garbage' collection of windows deleted with Close(). */
     DeletePendingObjects();
 
-    /* flush the logged messages if any */
-#if wxUSE_LOG
-    wxLog *log = wxLog::GetActiveTarget();
-    if (log != NULL && log->HasPendingMessages())
-        log->Flush();
-#endif // wxUSE_LOG
-
     /* Send OnIdle events to all windows */
     bool needMore = SendIdleEvents();
 
     /* Send OnIdle events to all windows */
     bool needMore = SendIdleEvents();
 
@@ -374,6 +373,13 @@ void wxApp::OnIdle( wxIdleEvent &event )
         event.RequestMore(TRUE);
 
     s_inOnIdle = FALSE;
         event.RequestMore(TRUE);
 
     s_inOnIdle = FALSE;
+
+    /* flush the logged messages if any */
+#if wxUSE_LOG
+    wxLog *log = wxLog::GetActiveTarget();
+    if (log != NULL && log->HasPendingMessages())
+        log->Flush();
+#endif // wxUSE_LOG
 }
 
 bool wxApp::SendIdleEvents()
 }
 
 bool wxApp::SendIdleEvents()
@@ -476,17 +482,16 @@ bool wxApp::Initialize()
     wxPendingEventsLocker = new wxCriticalSection();
 #endif
 
     wxPendingEventsLocker = new wxCriticalSection();
 #endif
 
-/*
-    wxTheFontNameDirectory =  new wxFontNameDirectory;
-    wxTheFontNameDirectory->Initialize();
-*/
-
     wxTheColourDatabase = new wxColourDatabase( wxKEY_STRING );
     wxTheColourDatabase->Initialize();
 
     wxInitializeStockLists();
     wxInitializeStockObjects();
 
     wxTheColourDatabase = new wxColourDatabase( wxKEY_STRING );
     wxTheColourDatabase->Initialize();
 
     wxInitializeStockLists();
     wxInitializeStockObjects();
 
+#if wxUSE_WX_RESOURCES
+    wxInitializeResourceSystem();
+#endif
+
     wxModule::RegisterModules();
     if (!wxModule::InitializeModules()) return FALSE;
 
     wxModule::RegisterModules();
     if (!wxModule::InitializeModules()) return FALSE;
 
@@ -497,15 +502,15 @@ void wxApp::CleanUp()
 {
     wxModule::CleanUpModules();
 
 {
     wxModule::CleanUpModules();
 
+#if wxUSE_WX_RESOURCES
+    wxCleanUpResourceSystem();
+#endif
+
     if (wxTheColourDatabase)
         delete wxTheColourDatabase;
     if (wxTheColourDatabase)
         delete wxTheColourDatabase;
+        
     wxTheColourDatabase = (wxColourDatabase*) NULL;
 
     wxTheColourDatabase = (wxColourDatabase*) NULL;
 
-/*
-    if (wxTheFontNameDirectory) delete wxTheFontNameDirectory;
-    wxTheFontNameDirectory = (wxFontNameDirectory*) NULL;
-*/
-
     wxDeleteStockObjects();
 
     wxDeleteStockLists();
     wxDeleteStockObjects();
 
     wxDeleteStockLists();
@@ -553,7 +558,17 @@ void wxApp::CleanUp()
 int wxEntry( int argc, char *argv[] )
 {
 #if wxUSE_THREADS
 int wxEntry( int argc, char *argv[] )
 {
 #if wxUSE_THREADS
-    g_thread_init(NULL);
+    /* 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: Disabled GUI threading due to outdated GTK version\n" );
+    }
+    else
+    {
+        g_thread_init(NULL);
+    }
 #endif
     
     gtk_set_locale();
 #endif
     
     gtk_set_locale();