]> git.saurik.com Git - wxWidgets.git/blobdiff - src/msw/registry.cpp
added automatic growing of in-place wxTextCtrls for generic wxListCtrl and wxTreeCtrl
[wxWidgets.git] / src / msw / registry.cpp
index a761867e7df6cce8dd08a7e6c3df23697e54f900..978d7ee4faa7e2464f44185fd866e380ce4ff808 100644 (file)
@@ -27,7 +27,6 @@
 #include  "wx/string.h"
 #include  "wx/intl.h"
 #include  "wx/log.h"
-#include  "wx/config.h"    // for wxExpandEnvVars
 
 #ifndef __WIN16__
 
@@ -316,6 +315,9 @@ bool wxRegKey::GetKeyInfo(size_t *pnSubKeys,
     #define REG_PARAM   (LPDWORD)
 #endif
 
+  // it might be unexpected to some that this function doesn't open the key
+  wxASSERT_MSG( IsOpened(), _T("key should be opened in GetKeyInfo") );
+
   m_dwLastError = ::RegQueryInfoKey
                   (
                     (HKEY) m_hKey,
@@ -343,8 +345,8 @@ bool wxRegKey::GetKeyInfo(size_t *pnSubKeys,
                   GetName().c_str());
     return FALSE;
   }
-  else
-    return TRUE;
+
+  return TRUE;
 #else // Win16
   wxFAIL_MSG("GetKeyInfo() not implemented");
 
@@ -618,8 +620,9 @@ bool wxRegKey::DeleteSelf()
   // prevent a buggy program from erasing one of the root registry keys or an
   // immediate subkey (i.e. one which doesn't have '\\' inside) of any other
   // key except HKCR (HKCR has some "deleteable" subkeys)
-  if ( m_strKey.IsEmpty() || (m_hRootKey != HKCR &&
-       m_strKey.Find(REG_SEPARATOR) == wxNOT_FOUND) ) {
+  if ( m_strKey.IsEmpty() ||
+       ((m_hRootKey != (WXHKEY) aStdKeys[HKCR].hkey) &&
+        (m_strKey.Find(REG_SEPARATOR) == wxNOT_FOUND)) ) {
       wxLogError(_("Registry key '%s' is needed for normal system operation,\ndeleting it will leave your system in unusable state:\noperation aborted."), GetFullName(this));
 
       return FALSE;
@@ -823,7 +826,9 @@ bool wxRegKey::QueryValue(const wxChar *szValue, long *plValue) const
 
 #endif  //Win32
 
-bool wxRegKey::QueryValue(const wxChar *szValue, wxString& strValue) const
+bool wxRegKey::QueryValue(const wxChar *szValue,
+                          wxString& strValue,
+                          bool raw) const
 {
   if ( CONST_CAST Open() ) {
     #ifdef  __WIN32__
@@ -846,6 +851,30 @@ bool wxRegKey::QueryValue(const wxChar *szValue, wxString& strValue) const
                                             pBuf,
                                             &dwSize);
             strValue.UngetWriteBuf();
+
+            // expand the var expansions in the string unless disabled
+            if ( (dwType == REG_EXPAND_SZ) && !raw )
+            {
+                DWORD dwExpSize = ::ExpandEnvironmentStrings(strValue, NULL, 0);
+                bool ok = dwExpSize != 0;
+                if ( ok )
+                {
+                    wxString strExpValue;
+                    ok = ::ExpandEnvironmentStrings
+                           (
+                            strValue,
+                            strExpValue.GetWriteBuf(dwExpSize),
+                            dwExpSize
+                           ) != 0;
+                    strExpValue.UngetWriteBuf();
+                    strValue = strExpValue;
+                }
+
+                if ( !ok )
+                {
+                    wxLogLastError(_T("ExpandEnvironmentStrings"));
+                }
+            }
         }
 
         if ( m_dwLastError == ERROR_SUCCESS ) {