X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/0b11099dd69b60d2fa5240df8e4137d21d97f21d..5875d39c9ba19f518e691792524f2fd03261c825:/src/msw/filedlg.cpp?ds=sidebyside diff --git a/src/msw/filedlg.cpp b/src/msw/filedlg.cpp index 541ea70c69..2bf5d527c3 100644 --- a/src/msw/filedlg.cpp +++ b/src/msw/filedlg.cpp @@ -17,10 +17,6 @@ // headers // ---------------------------------------------------------------------------- -#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA) - #pragma implementation "filedlg.h" -#endif - // For compilers that support precompilation, includes "wx.h". #include "wx/wxprec.h" @@ -28,7 +24,7 @@ #pragma hdrstop #endif -#if wxUSE_FILEDLG && !defined(__SMARTPHONE__) +#if wxUSE_FILEDLG && !(defined(__SMARTPHONE__) && defined(__WXWINCE__)) #ifndef WX_PRECOMP #include "wx/utils.h" @@ -40,22 +36,16 @@ #include "wx/app.h" #endif -#include "wx/msw/private.h" - -#if !defined(__WIN32__) || defined(__WXWINCE__) - #include -#endif +#include "wx/msw/wrapcdlg.h" -#include #include #include #include "wx/filename.h" #include "wx/tokenzr.h" +#include "wx/math.h" -#ifndef OFN_EXPLORER - #define OFN_EXPLORER 0x00080000 -#endif +#include "wx/msw/missing.h" // ---------------------------------------------------------------------------- // constants @@ -88,7 +78,7 @@ IMPLEMENT_CLASS(wxFileDialog, wxFileDialogBase) // hook function for moving the dialog // ---------------------------------------------------------------------------- -UINT APIENTRY +UINT_PTR APIENTRY wxFileDialogHookFunction(HWND hDlg, UINT iMsg, WPARAM WXUNUSED(wParam), @@ -252,8 +242,13 @@ int wxFileDialog::ShowModal() programmer needs the PLACES BAR (left side of dlg) they just shouldn't move or center the dlg. */ - if (m_bMovedWindow) // we need the these flags. - msw_flags |= OFN_EXPLORER|OFN_ENABLEHOOK|OFN_ENABLESIZING; + if (m_bMovedWindow) // we need these flags. + { + msw_flags |= OFN_EXPLORER|OFN_ENABLEHOOK; +#ifndef __WXWINCE__ + msw_flags |= OFN_ENABLESIZING; +#endif + } if (m_dialogStyle & wxMULTIPLE ) { @@ -262,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; @@ -296,8 +292,8 @@ int wxFileDialog::ShowModal() // forward slashes) and also squeeze multiple consecutive slashes into one // as it doesn't like two backslashes in a row neither - wxString dir; - size_t i, len = m_dir.length(); + wxString dir; + size_t i, len = m_dir.length(); dir.reserve(len); for ( i = 0; i < len; i++ ) { @@ -392,7 +388,8 @@ int wxFileDialog::ShowModal() } } - //== Execute FileDialog >>================================================= + // store off before the standard windows dialog can possibly change it + const wxString cwdOrig = wxGetCwd(); //== Execute FileDialog >>================================================= @@ -401,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)) { @@ -508,5 +518,5 @@ int wxFileDialog::ShowModal() } -#endif // wxUSE_FILEDLG +#endif // wxUSE_FILEDLG && !(__SMARTPHONE__ && __WXWINCE__)