]> git.saurik.com Git - wxWidgets.git/blobdiff - src/gtk1/app.cpp
Missing datetime and the db classes!!
[wxWidgets.git] / src / gtk1 / app.cpp
index 965f9967f221c4ca1f57f1f4dba9b3110ca13314..3196c1a79ca104d64acdad2a477c86641273acc5 100644 (file)
@@ -49,6 +49,8 @@ wxAppInitializerFunction wxAppBase::m_appInitFn = (wxAppInitializerFunction) NUL
 
 extern bool g_isIdle;
 
+bool g_mainThreadLocked = FALSE;
+
 //-----------------------------------------------------------------------------
 // local functions
 //-----------------------------------------------------------------------------
@@ -111,7 +113,7 @@ void wxWakeUpIdle()
 {
 #if wxUSE_THREADS
     if (!wxThread::IsMain())
-        gdk_threads_enter();
+        wxMutexGuiEnter();
 #endif
 
     if (g_isIdle) 
@@ -119,7 +121,7 @@ void wxWakeUpIdle()
     
 #if wxUSE_THREADS
     if (!wxThread::IsMain())
-        gdk_threads_leave();
+        wxMutexGuiLeave();
 #endif
 }
 
@@ -136,9 +138,6 @@ gint wxapp_idle_callback( gpointer WXUNUSED(data) )
     // 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 );
@@ -151,6 +150,9 @@ gint wxapp_idle_callback( gpointer WXUNUSED(data) )
        emptied */
     g_isIdle = TRUE;
 
+    /* sent idle event to all who request them */
+    while (wxTheApp->ProcessIdle()) { }
+
     // release lock again
     gdk_threads_leave();
 
@@ -194,13 +196,14 @@ gint wxapp_wakeup_timerout_callback( gpointer WXUNUSED(data) )
     // when getting called from GDK's time-out handler
     // we are no longer within GDK's grab on the GUI
     // thread so we must lock it here ourselves
-    
     gdk_threads_enter();
 
     wxapp_uninstall_thread_wakeup();
 
     // unblock other threads wishing to do some GUI things
     wxMutexGuiLeave();
+    
+    g_mainThreadLocked = TRUE;
 
     // wake up other threads
     wxUsleep( 1 );
@@ -208,6 +211,8 @@ gint wxapp_wakeup_timerout_callback( gpointer WXUNUSED(data) )
     // block other thread again
     wxMutexGuiEnter();
 
+    g_mainThreadLocked = FALSE;
+
     wxapp_install_thread_wakeup();
 
     // release lock again
@@ -347,11 +352,11 @@ bool wxApp::ProcessIdle()
 void wxApp::OnIdle( wxIdleEvent &event )
 {
     static bool s_inOnIdle = FALSE;
-
+    
     /* 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
@@ -361,13 +366,6 @@ void wxApp::OnIdle( wxIdleEvent &event )
     /* '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();
 
@@ -375,6 +373,13 @@ void wxApp::OnIdle( wxIdleEvent &event )
         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()
@@ -477,17 +482,16 @@ bool wxApp::Initialize()
     wxPendingEventsLocker = new wxCriticalSection();
 #endif
 
-/*
-    wxTheFontNameDirectory =  new wxFontNameDirectory;
-    wxTheFontNameDirectory->Initialize();
-*/
-
     wxTheColourDatabase = new wxColourDatabase( wxKEY_STRING );
     wxTheColourDatabase->Initialize();
 
     wxInitializeStockLists();
     wxInitializeStockObjects();
 
+#if wxUSE_WX_RESOURCES
+    wxInitializeResourceSystem();
+#endif
+
     wxModule::RegisterModules();
     if (!wxModule::InitializeModules()) return FALSE;
 
@@ -498,15 +502,15 @@ void wxApp::CleanUp()
 {
     wxModule::CleanUpModules();
 
+#if wxUSE_WX_RESOURCES
+    wxCleanUpResourceSystem();
+#endif
+
     if (wxTheColourDatabase)
         delete wxTheColourDatabase;
+        
     wxTheColourDatabase = (wxColourDatabase*) NULL;
 
-/*
-    if (wxTheFontNameDirectory) delete wxTheFontNameDirectory;
-    wxTheFontNameDirectory = (wxFontNameDirectory*) NULL;
-*/
-
     wxDeleteStockObjects();
 
     wxDeleteStockLists();
@@ -554,7 +558,17 @@ void wxApp::CleanUp()
 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();