]> git.saurik.com Git - wxWidgets.git/blobdiff - src/msw/app.cpp
drawing optimization fix
[wxWidgets.git] / src / msw / app.cpp
index 0182dcc3a0338caff325dd5d15f03926dcd72ea0..a9fb77fdd246cb36361b6676dc80a6e11860fa07 100644 (file)
 /////////////////////////////////////////////////////////////////////////////
 
 #ifdef __GNUG__
-  #pragma implementation "app.h"
+#pragma implementation "app.h"
 #endif
 
 // For compilers that support precompilation, includes "wx.h".
 #include "wx/wxprec.h"
 
 #if defined(__BORLANDC__)
-  #pragma hdrstop
+#pragma hdrstop
 #endif
 
 #ifndef WX_PRECOMP
   #include <commctrl.h>
 #endif
 
-// use debug CRT functions for memory leak detections in VC++
-/* This still doesn't work for me, Vadim.
-#if defined(__WXDEBUG__) && defined(_MSC_VER)
+// use debug CRT functions for memory leak detections in VC++ if we're not
+// using wxWindows own methods
+#if defined(__WXDEBUG__) && defined(_MSC_VER) && !wxUSE_GLOBAL_MEMORY_OPERATORS && !defined(__NO_VC_CRTDBG__)
+    #define wxUSE_VC_CRTDBG
+#else
+    #undef wxUSE_VC_CRTDBG
+#endif
+
+#ifdef wxUSE_VC_CRTDBG
   // VC++ uses this macro as debug/release mode indicator
   #ifndef _DEBUG
     #define _DEBUG
@@ -60,7 +66,6 @@
 
   #include <crtdbg.h>
 #endif
-*/
 
 extern char *wxBuffer;
 extern char *wxOsVersion;
@@ -114,25 +119,12 @@ bool wxApp::Initialize()
 {
   wxBuffer = new char[1500];
 
-/*
-  #if defined(__WXDEBUG__) && defined(_MSC_VER)
+  #ifdef wxUSE_VC_CRTDBG
     // do check for memory leaks on program exit
     // (another useful flag is _CRTDBG_DELAY_FREE_MEM_DF which doesn't free
     //  deallocated memory which may be used to simulate low-memory condition)
     _CrtSetDbgFlag(_CrtSetDbgFlag(_CRTDBG_REPORT_FLAG) | _CRTDBG_LEAK_CHECK_DF);
   #endif // debug build under MS VC++
-*/
-
-  #if (WXDEBUG && wxUSE_MEMORY_TRACING) || wxUSE_DEBUG_CONTEXT
-    #if defined(_WINDLL)
-      streambuf* sBuf = NULL;
-    #else  // EXE
-      streambuf* sBuf = new wxDebugStreamBuf;
-    #endif // DLL
-
-    ostream* oStr = new ostream(sBuf) ;
-    wxDebugContext::SetStream(oStr, sBuf);
-  #endif  // wxUSE_MEMORY_TRACING
 
   wxClassInfo::InitializeClasses();
 
@@ -352,7 +344,7 @@ void wxApp::ConvertToStandardCommandArgs(char* lpCmdLine)
     int count = 0;
 
     // Get application name
-    char name[500];
+    char name[260]; // 260 is MAX_PATH value from windef.h
     ::GetModuleFileName(wxhInstance, name, WXSIZEOF(name));
 
     // GNUWIN32 already fills in the first arg with the application name.
@@ -492,6 +484,23 @@ 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() > 0)
+  {
+      wxLogDebug("There were memory leaks.");
+      wxDebugContext::Dump();
+      wxDebugContext::PrintStatistics();
+  }
+//  wxDebugContext::SetStream(NULL, NULL);
+#endif
+
   // do it as the very last thing because everything else can log messages
   wxLog::DontCreateOnDemand();
   delete wxLog::SetActiveTarget(NULL);
@@ -566,24 +575,14 @@ int wxEntry(WXHINSTANCE hInstance,
   }
 
   wxTheApp->OnExit();
-  wxApp::CleanUp();
 
-  delete wxTheApp;
-  wxTheApp = NULL;
+  // flush the logged messages if any
+  wxLog *pLog = wxLog::GetActiveTarget();
+  if ( pLog != NULL && pLog->HasPendingMessages() )
+    pLog->Flush();
 
-#if (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
+
+  wxApp::CleanUp();
 
   return retValue;
 #ifndef __WXDEBUG__ // catch exceptions only in release build
@@ -852,7 +851,7 @@ bool wxApp::SendIdleEvents(wxWindow* win)
 
   wxIdleEvent event;
   event.SetEventObject(win);
-  win->ProcessEvent(event);
+  win->GetEventHandler()->ProcessEvent(event);
 
   if (event.MoreRequested())
     needMore = TRUE;