]> git.saurik.com Git - wxWidgets.git/blobdiff - src/motif/app.cpp
added an error message if a bitmap can't be addedto the image list
[wxWidgets.git] / src / motif / app.cpp
index 79e667aa01ffbf186c9b2e705b4b5d98f1a07161..e1b12c2243f1ce2f046e9d4e8ac5418eaca78df1 100644 (file)
 #include "wx/module.h"
 #include "wx/memory.h"
 
+#if wxUSE_THREADS
+#include "wx/thread.h"
+#endif
+
 #if wxUSE_WX_RESOURCES
 #include "wx/resource.h"
 #endif
@@ -67,14 +71,6 @@ bool wxApp::Initialize()
     wxBuffer = new char[BUFSIZ + 512];
 #endif
 
-#if (defined(__WXDEBUG__) && wxUSE_MEMORY_TRACING) || wxUSE_DEBUG_CONTEXT
-
-    streambuf* sBuf = new wxDebugStreamBuf;
-    ostream* oStr = new ostream(sBuf) ;
-    wxDebugContext::SetStream(oStr, sBuf);
-
-#endif
-  
     wxClassInfo::InitializeClasses();
 
     wxTheColourDatabase = new wxColourDatabase(wxKEY_STRING);
@@ -101,7 +97,7 @@ bool wxApp::Initialize()
     wxWidgetHashTable = new wxHashTable(wxKEY_INTEGER);
 
     wxModule::RegisterModules();
-    wxASSERT( wxModule::InitializeModules() == TRUE );
+    if (!wxModule::InitializeModules()) return FALSE;
 
     return TRUE;
 }
@@ -151,6 +147,22 @@ void wxApp::CleanUp()
 
     wxClassInfo::CleanUpClasses();
 
+    delete wxTheApp;
+    wxTheApp = NULL;
+  
+#if (defined(__WXDEBUG__) && wxUSE_MEMORY_TRACING) || wxUSE_DEBUG_CONTEXT
+    // At this point we want to check if there are any memory
+    // blocks that aren't part of the wxDebugContext itself,
+    // as a special case. Then when dumping we need to ignore
+    // wxDebugContext, too.
+    if (wxDebugContext::CountObjectsLeft(TRUE) > 0)
+    {
+      wxLogDebug("There were memory leaks.\n");
+      wxDebugContext::Dump();
+      wxDebugContext::PrintStatistics();
+    }
+#endif
+  
     // do it as the very last thing because everything else can log messages
     wxLog::DontCreateOnDemand();
     // do it as the very last thing because everything else can log messages
@@ -159,8 +171,19 @@ void wxApp::CleanUp()
 
 int wxEntry( int argc, char *argv[] )
 {
+#if (defined(__WXDEBUG__) && wxUSE_MEMORY_TRACING) || wxUSE_DEBUG_CONTEXT
+    // This seems to be necessary since there are 'rogue'
+    // objects present at this point (perhaps global objects?)
+    // Setting a checkpoint will ignore them as far as the
+    // memory checking facility is concerned.
+    // Of course you may argue that memory allocated in globals should be
+    // checked, but this is a reasonable compromise.
+    wxDebugContext::SetCheckpoint();
+#endif
+
     if (!wxApp::Initialize())
       return FALSE;
+
     if (!wxTheApp)
     {
       if (!wxApp::GetInitializerFunction())
@@ -191,11 +214,11 @@ int wxEntry( int argc, char *argv[] )
     // into wxTopLevelWindows by getting created
     // in OnInit().
   
-    if (!wxTheApp->OnInit()) return 0;
-
     int retValue = 0;
-  
-    if (wxTheApp->Initialized()) retValue = wxTheApp->OnRun();
+    if (wxTheApp->OnInit())
+    {
+      if (wxTheApp->Initialized()) retValue = wxTheApp->OnRun();
+    }
 
     // flush the logged messages if any
     wxLog *pLog = wxLog::GetActiveTarget();
@@ -214,27 +237,9 @@ int wxEntry( int argc, char *argv[] )
     wxTheApp->DeletePendingObjects();
   
     wxTheApp->OnExit();
-
   
     wxApp::CleanUp();
 
-    delete wxTheApp;
-    wxTheApp = NULL;
-  
-#if (defined(__WXDEBUG__) && wxUSE_MEMORY_TRACING) || wxUSE_DEBUG_CONTEXT
-    // At this point we want to check if there are any memory
-    // blocks that aren't part of the wxDebugContext itself,
-    // as a special case. Then when dumping we need to ignore
-    // wxDebugContext, too.
-    if (wxDebugContext::CountObjectsLeft() > 0)
-    {
-      wxTrace("There were memory leaks.\n");
-      wxDebugContext::Dump();
-      wxDebugContext::PrintStatistics();
-    }
-    wxDebugContext::SetStream(NULL, NULL);
-#endif
-  
     return retValue;
 };
 
@@ -292,7 +297,20 @@ int wxApp::MainLoop()
       XtAppNextEvent( (XtAppContext) wxTheApp->GetAppContext(), &event);
 
       ProcessXEvent((WXEvent*) & event);
-      ProcessIdle();
+      
+      if (XtAppPending( (XtAppContext) wxTheApp->GetAppContext() ) == 0)
+      {
+        if (!ProcessIdle())
+        { 
+         // TODO: Robert, what's this for?
+#if wxUSE_THREADS
+          wxMutexGuiLeave();
+          usleep(20);  
+          wxMutexGuiEnter();
+#endif
+       }
+      }
+      
     }
 
     return 0;
@@ -437,7 +455,7 @@ bool wxApp::SendIdleEvents(wxWindow* win)
     if (event.MoreRequested())
         needMore = TRUE;
 
-       wxNode* node = win->GetChildren()->First();
+       wxNode* node = win->GetChildren().First();
        while (node)
        {
                wxWindow* win = (wxWindow*) node->Data();