]> 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 c3f805327cf42b6c04b3becdda81b1cb03083523..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())
@@ -239,7 +239,11 @@ static gint wxapp_idle_callback( gpointer WXUNUSED(data) )
         if (wxTopLevelWindows.GetCount() > 0)
         {
             wxWindow* win = (wxWindow*) wxTopLevelWindows.GetLast()->GetData();
+#ifdef __WXGTK20__
+            if (win->IsKindOf(CLASSINFO(wxMessageDialog)))
+#else
             if (win->IsKindOf(CLASSINFO(wxGenericMessageDialog)))
+#endif
                 win->OnInternalIdle();
         }
         return TRUE;
@@ -362,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;
@@ -705,10 +714,6 @@ bool wxApp::Initialize()
     wxInitializeStockLists();
     wxInitializeStockObjects();
 
-#if wxUSE_WX_RESOURCES
-    wxInitializeResourceSystem();
-#endif
-
     wxModule::RegisterModules();
     if (!wxModule::InitializeModules())
         return FALSE;
@@ -724,10 +729,6 @@ void wxApp::CleanUp()
 {
     wxModule::CleanUpModules();
 
-#if wxUSE_WX_RESOURCES
-    wxCleanUpResourceSystem();
-#endif
-
     delete wxTheColourDatabase;
     wxTheColourDatabase = (wxColourDatabase*) NULL;
 
@@ -742,7 +743,9 @@ void wxApp::CleanUp()
 
 #if wxUSE_THREADS
     delete wxPendingEvents;
+    wxPendingEvents = NULL;
     delete wxPendingEventsLocker;
+    wxPendingEventsLocker = NULL;
 #endif
 
     // check for memory leaks
@@ -800,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())