From af1f0a7631eabaca3d3f24d8b2744524af36bc3f Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Sat, 24 Sep 2005 20:38:50 +0000 Subject: [PATCH] made absence of wxCHANGE_DIR flag work even under NT (slightly modified patch 1299298) git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@35661 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- docs/changes.txt | 5 +++++ src/msw/filedlg.cpp | 19 ++++++++++++++++++- 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/docs/changes.txt b/docs/changes.txt index ea01f0fc6b..99f9d4ed8f 100644 --- a/docs/changes.txt +++ b/docs/changes.txt @@ -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 ----- diff --git a/src/msw/filedlg.cpp b/src/msw/filedlg.cpp index d00e0c05c2..2bf5d527c3 100644 --- a/src/msw/filedlg.cpp +++ b/src/msw/filedlg.cpp @@ -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)) { -- 2.45.2