]> git.saurik.com Git - wxWidgets.git/commitdiff
made absence of wxCHANGE_DIR flag work even under NT (slightly modified patch 1299298)
authorVadim Zeitlin <vadim@wxwidgets.org>
Sat, 24 Sep 2005 20:38:50 +0000 (20:38 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Sat, 24 Sep 2005 20:38:50 +0000 (20:38 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@35661 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

docs/changes.txt
src/msw/filedlg.cpp

index ea01f0fc6b0f96047bab988deb7091cd6c4dfc78..99f9d4ed8fd05205bd3560f5ee48fade2aaf72d2 100644 (file)
@@ -5,10 +5,15 @@ wxWidgets Change Log - For more verbose changes, see the manual
 2.7.0
 -----
 
+wxMSW:
+
+- wxFileDialog respects absence of wxCHANGE_DIR flag under NT (Brad Anderson)
+
 Unix:
 
 - NO_GCC_PRAGMA is not used any more, remove checks for it if you used it
 
+
 2.6.2
 -----
 
index d00e0c05c2e14f4b86b37313c392a686478c0089..2bf5d527c3b387a8a7dbfe99882a2f984dfc2fd9 100644 (file)
@@ -257,7 +257,8 @@ int wxFileDialog::ShowModal()
     }
 
     // if wxCHANGE_DIR flag is not given we shouldn't change the CWD which the
-    // standard dialog does by default
+    // standard dialog does by default (notice that under NT it does it anyhow,
+    // OFN_NOCHANGEDIR or not, see below)
     if ( !(m_dialogStyle & wxCHANGE_DIR) )
     {
         msw_flags |= OFN_NOCHANGEDIR;
@@ -387,6 +388,9 @@ int wxFileDialog::ShowModal()
         }
     }
 
+    // store off before the standard windows dialog can possibly change it
+    const wxString cwdOrig = wxGetCwd();
+
     //== Execute FileDialog >>=================================================
 
     bool success = (m_dialogStyle & wxSAVE ? GetSaveFileName(&of)
@@ -394,6 +398,19 @@ int wxFileDialog::ShowModal()
 
     DWORD errCode = CommDlgExtendedError();
 
+    // GetOpenFileName will always change the current working directory on 
+    // (according to MSDN) "Windows NT 4.0/2000/XP" because the flag
+    // OFN_NOCHANGEDIR has no effect.  If the user did not specify wxCHANGE_DIR
+    // let's restore the current working directory to what it was before the
+    // dialog was shown (assuming this behavior extends to Windows Server 2003
+    // seems safe).
+    if ( success &&
+            (msw_flags & OFN_NOCHANGEDIR) &&
+                wxGetOsVersion() == wxWINDOWS_NT )
+    {
+        wxSetWorkingDirectory(cwdOrig);
+    }
+
 #ifdef __WIN32__
     if (!success && (errCode == CDERR_STRUCTSIZE))
     {