]> git.saurik.com Git - wxWidgets.git/commitdiff
fix the bug with the current path being restored if it was under the group being...
authorVadim Zeitlin <vadim@wxwidgets.org>
Fri, 14 Jul 2006 22:08:43 +0000 (22:08 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Fri, 14 Jul 2006 22:08:43 +0000 (22:08 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@40095 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

docs/latex/wx/config.tex
src/common/config.cpp
src/common/fileconf.cpp
src/msw/regconf.cpp

index b2969399f734cfcd8baf1ceea3952541c4ac4d48..3700a8ec72fa42eb02582ec0093e03983ac398a9 100644 (file)
@@ -454,7 +454,10 @@ in it and the second parameter is true.
 
 \func{bool}{DeleteGroup}{\param{const wxString\& }{ key}}
 
-Delete the group (with all subgroups)
+Delete the group (with all subgroups). If the current path is under the group
+being deleted it is changed to its deepest still existing component. E.g. if
+the current path is \texttt{/A/B/C/D} and the group \texttt{C} is deleted the
+path becomes \texttt{/A/B}.
 
 
 \membersection{wxConfigBase::Exists}\label{wxconfigbaseexists}
index 9f49fa0783573ee254445d383fbbf80c0d83623f..4b509a7fc0d8a41eaf22e3538e171d801b7ad8fc 100644 (file)
@@ -274,6 +274,21 @@ wxConfigPathChanger::wxConfigPathChanger(const wxConfigBase *pContainer,
   }
 }
 
+void wxConfigPathChanger::UpdateIfDeleted()
+{
+    // we don't have to do anything at all if we didn't change the path
+    if ( !m_bChanged )
+        return;
+
+    // find the deepest still existing parent path of the original path
+    while ( !m_pContainer->HasGroup(m_strOldPath) )
+    {
+        m_strOldPath = m_strOldPath.BeforeLast(wxCONFIG_PATH_SEPARATOR);
+        if ( m_strOldPath.empty() )
+            m_strOldPath = wxCONFIG_PATH_SEPARATOR;
+    }
+}
+
 wxConfigPathChanger::~wxConfigPathChanger()
 {
   // only restore path if it was changed
index fae2059278557f7d889d7d8583192409aee08d43..8078b6f5d4aacd96922afca7da860d62d534d0b5 100644 (file)
@@ -1145,6 +1145,8 @@ bool wxFileConfig::DeleteGroup(const wxString& key)
   if ( !m_pCurrentGroup->DeleteSubgroupByName(path.Name()) )
       return false;
 
+  path.UpdateIfDeleted();
+
   SetDirty();
 
   return true;
index 4c9d9e5fb7c0ecb9454fd4ac3d0fac98760d5672..1777569b8885c45327a362bba52d69ef9e383670 100644 (file)
@@ -699,7 +699,18 @@ bool wxRegConfig::DeleteGroup(const wxString& key)
 {
   wxConfigPathChanger path(this, key);
 
-  return m_keyLocal.Exists() ? LocalKey().DeleteKey(path.Name()) : true;
+  if ( !m_keyLocal.Exists() )
+  {
+      // nothing to do
+      return true;
+  }
+
+  if ( !LocalKey().DeleteKey(path.Name()) )
+      return false;
+
+  path.UpdateIfDeleted();
+
+  return true;
 }
 
 bool wxRegConfig::DeleteAll()
@@ -717,5 +728,4 @@ bool wxRegConfig::DeleteAll()
   return bOk;
 }
 
-#endif
-  // wxUSE_CONFIG
+#endif // wxUSE_CONFIG