]> git.saurik.com Git - wxWidgets.git/blobdiff - src/gtk/app.cpp
initial attempts to get raw bitmaps working under Mac
[wxWidgets.git] / src / gtk / app.cpp
index 704c36a9210a81e2a6c3c22f2907569b305d1e1f..1bf855421b6b23cfeb3d90ea707a3168b2fadaa3 100644 (file)
 #include "wx/msgdlg.h"
 #include "wx/file.h"
 #include "wx/filename.h"
-
-#if wxUSE_WX_RESOURCES
-    #include "wx/resource.h"
-#endif
-
 #include "wx/module.h"
 #include "wx/image.h"
 
@@ -173,6 +168,8 @@ bool wxApp::Yield(bool onlyIfNeeded)
 // wxWakeUpIdle
 //-----------------------------------------------------------------------------
 
+static bool gs_WakeUpIdle = false;
+
 void wxWakeUpIdle()
 {
 #if wxUSE_THREADS
@@ -180,8 +177,11 @@ void wxWakeUpIdle()
         wxMutexGuiEnter();
 #endif
 
-    if (g_isIdle)
+    if (g_isIdle) {
+        gs_WakeUpIdle = true;
         wxapp_install_idle_handler();
+        gs_WakeUpIdle = false;
+    }
 
 #if wxUSE_THREADS
     if (!wxThread::IsMain())
@@ -366,6 +366,11 @@ static gint wxapp_poll_func( GPollFD *ufds, guint nfds, gint timeout )
 
 void wxapp_install_idle_handler()
 {
+    // GD: this assert is raised when using the thread sample (which works)
+    //     so the test is probably not so easy. Can widget callbacks be
+    //     triggered from child threads and, if so, for which widgets?
+    // wxASSERT_MSG( wxThread::IsMain() || gs_WakeUpIdle, wxT("attempt to install idle handler from widget callback in child thread (should be exclusively from wxWakeUpIdle)") );
+
     wxASSERT_MSG( wxTheApp->m_idleTag == 0, wxT("attempt to install idle handler twice") );
 
     g_isIdle = FALSE;
@@ -709,10 +714,6 @@ bool wxApp::Initialize()
     wxInitializeStockLists();
     wxInitializeStockObjects();
 
-#if wxUSE_WX_RESOURCES
-    wxInitializeResourceSystem();
-#endif
-
     wxModule::RegisterModules();
     if (!wxModule::InitializeModules())
         return FALSE;
@@ -728,10 +729,6 @@ void wxApp::CleanUp()
 {
     wxModule::CleanUpModules();
 
-#if wxUSE_WX_RESOURCES
-    wxCleanUpResourceSystem();
-#endif
-
     delete wxTheColourDatabase;
     wxTheColourDatabase = (wxColourDatabase*) NULL;
 
@@ -746,7 +743,9 @@ void wxApp::CleanUp()
 
 #if wxUSE_THREADS
     delete wxPendingEvents;
+    wxPendingEvents = NULL;
     delete wxPendingEventsLocker;
+    wxPendingEventsLocker = NULL;
 #endif
 
     // check for memory leaks
@@ -804,10 +803,11 @@ int wxEntryStart( int& argc, char *argv[] )
     if (!wxOKlibc()) wxConvCurrent = (wxMBConv*) NULL;
 #endif
 
-    gdk_threads_enter();
-
     gtk_init( &argc, &argv );
 
+    /* we can not enter threads before gtk_init is done */
+    gdk_threads_enter();
+
     wxSetDetectableAutoRepeat( TRUE );
 
     if (!wxApp::Initialize())