]> git.saurik.com Git - wxWidgets.git/blobdiff - src/motif/app.cpp
drawing optimization fix
[wxWidgets.git] / src / motif / app.cpp
index 8c006f4e9a97a6bb9f72bb9227ebe739482a6ea5..1d34942d06d3adc8bc5d703549c750712575e7e7 100644 (file)
@@ -67,14 +67,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);
@@ -151,6 +143,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 +167,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 +210,19 @@ 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();
+    if ( pLog != NULL && pLog->HasPendingMessages() )
+      pLog->Flush();
+
+    delete wxLog::SetActiveTarget(new wxLogStderr); // So dialog boxes aren't used
+                                   // for further messages
 
     if (wxTheApp->GetTopWindow())
     {
@@ -209,23 +236,6 @@ int wxEntry( int argc, char *argv[] )
   
     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;
 };
 
@@ -294,7 +304,7 @@ void wxApp::ProcessXEvent(WXEvent* _event)
 {
     XEvent* event = (XEvent*) _event;
 
-    if (CheckForAccelerator(_event))
+    if ((event->type == KeyPress) && CheckForAccelerator(_event))
     {
         // Do nothing! We intercepted and processed the event as an accelerator.
         return;