From 36bd690299dc72d49c4a945fa467ac7ce2342019 Mon Sep 17 00:00:00 2001
From: Vadim Zeitlin <vadim@wxwidgets.org>
Date: Thu, 17 May 2001 10:11:34 +0000
Subject: [PATCH] added wxLog::ClearTraceMasks()

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@10192 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
---
 docs/latex/wx/log.tex | 21 ++++++++++++++++++---
 include/wx/log.h      |  4 +++-
 src/common/log.cpp    | 15 +++++++++++++++
 3 files changed, 36 insertions(+), 4 deletions(-)

diff --git a/docs/latex/wx/log.tex b/docs/latex/wx/log.tex
index 03c4fa98bc..7de410ebbd 100644
--- a/docs/latex/wx/log.tex
+++ b/docs/latex/wx/log.tex
@@ -30,8 +30,9 @@ No base class
 The functions in this section work with and manipulate the active log target.
 The {\it OnLog()} is called by the {\it wxLogXXX()} functions and invokes the 
 {\it DoLog()} of the active log target if any. Get/Set methods are used to
-install/query the current active target and, finally, {\it
-DontCreateOnDemand()} disables the automatic creation of a standard log target
+install/query the current active target and, finally, 
+\helpref{DontCreateOnDemand()}{wxlogdontcreateondemand} 
+disables the automatic creation of a standard log target
 if none actually exists. It is only useful when the application is terminating
 and shouldn't be used in other situations because it may easily lead to a loss
 of messages.
@@ -123,6 +124,7 @@ window on the corresponding error message. If you wish to enable it, please use
 
 \helpref{AddTraceMask}{wxlogaddtracemask}\\
 \helpref{RemoveTraceMask}{wxlogremovetracemask}\\
+\helpref{ClearTraceMasks}{wxlogcleartracemasks}\\
 \helpref{IsAllowedTraceMask}{wxlogisallowedtracemask}\\
 \helpref{SetVerbose}{wxlogsetverbose}\\
 \helpref{GetVerbose}{wxloggetverbose}\\
@@ -147,6 +149,15 @@ Add the {\it mask} to the list of allowed masks for
 
 See also: \helpref{RemoveTraceMask}{wxlogremovetracemask}
 
+\membersection{wxLog::ClearTraceMasks}\label{wxlogcleartracemasks}
+
+\func{static void}{ClearTraceMasks}{\void}
+
+Removes all trace masks previously set with 
+\helpref{AddTraceMask}{wxlogaddtracemask}.
+
+See also: \helpref{RemoveTraceMask}{wxlogremovetracemask}
+
 \membersection{wxLog::OnLog}\label{wxlogonlog}
 
 \func{static void}{OnLog}{\param{wxLogLevel }{ level}, \param{const char * }{ message}}
@@ -172,7 +183,11 @@ previous active log target (may be NULL).
 \func{static void}{DontCreateOnDemand}{\void}
 
 Instructs wxLog to not create new log targets on the fly if there is none
-currently. (Almost) for internal use only.
+currently. (Almost) for internal use only: it is supposed to be called by the
+application shutdown code.
+
+Note that this function also calls 
+\helpref{ClearTraceMasks}{wxlogcleartracemasks}.
 
 \membersection{wxLog::Flush}\label{wxlogflush}
 
diff --git a/include/wx/log.h b/include/wx/log.h
index 6c2e4cdd51..43fae9c89e 100644
--- a/include/wx/log.h
+++ b/include/wx/log.h
@@ -161,7 +161,7 @@ public:
     void SetVerbose(bool bVerbose = TRUE) { m_bVerbose = bVerbose; }
         // should GetActiveTarget() try to create a new log object if the
         // current is NULL?
-    static void DontCreateOnDemand() { ms_bAutoCreate = FALSE; }
+    static void DontCreateOnDemand();
 
         // trace mask (see wxTraceXXX constants for details)
     static void SetTraceMask(wxTraceMask ulMask) { ms_ulTraceMask = ulMask; }
@@ -169,6 +169,8 @@ public:
     static void AddTraceMask(const wxString& str) { ms_aTraceMasks.Add(str); }
         // add string trace mask
     static void RemoveTraceMask(const wxString& str);
+        // remove all string trace masks
+    static void ClearTraceMasks();
 
         // sets the timestamp string: this is used as strftime() format string
         // for the log targets which add time stamps to the messages - set it
diff --git a/src/common/log.cpp b/src/common/log.cpp
index 1ec43bfa0a..a60e289df5 100644
--- a/src/common/log.cpp
+++ b/src/common/log.cpp
@@ -323,6 +323,16 @@ wxLog *wxLog::SetActiveTarget(wxLog *pLogger)
     return pOldLogger;
 }
 
+void wxLog::DontCreateOnDemand()
+{
+    ms_bAutoCreate = FALSE;
+
+    // this is usually called at the end of the program and we assume that it
+    // is *always* called at the end - so we free memory here to avoid false
+    // memory leak reports from wxWin  memory tracking code
+    ClearTraceMasks();
+}
+
 void wxLog::RemoveTraceMask(const wxString& str)
 {
     int index = ms_aTraceMasks.Index(str);
@@ -330,6 +340,11 @@ void wxLog::RemoveTraceMask(const wxString& str)
         ms_aTraceMasks.Remove((size_t)index);
 }
 
+void wxLog::ClearTraceMasks()
+{
+    ms_aTraceMasks.Clear();
+}
+
 void wxLog::TimeStamp(wxString *str)
 {
     if ( ms_timestamp )
-- 
2.50.0

