X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/780d7317eda90f5f2ac353f6b7a72142d4cd3180..96b2cbe8b39292fed91654ff0d1f4b1c16561acb:/src/msw/stdpaths.cpp diff --git a/src/msw/stdpaths.cpp b/src/msw/stdpaths.cpp index 6bf5c71422..1f21d6d5ae 100644 --- a/src/msw/stdpaths.cpp +++ b/src/msw/stdpaths.cpp @@ -26,15 +26,15 @@ #if wxUSE_STDPATHS +#include "wx/stdpaths.h" + #ifndef WX_PRECOMP - #include "wx/app.h" + #include "wx/utils.h" #endif //WX_PRECOMP #include "wx/dynlib.h" #include "wx/filename.h" -#include "wx/stdpaths.h" - #include "wx/msw/private.h" #include "wx/msw/wrapshl.h" @@ -50,7 +50,7 @@ typedef HRESULT (WINAPI *SHGetSpecialFolderPath_t)(HWND, LPTSTR, int, BOOL); // ---------------------------------------------------------------------------- // used in our wxLogTrace messages -static const wxChar *TRACE_MASK = _T("stdpaths"); +#define TRACE_MASK _T("stdpaths") #ifndef CSIDL_APPDATA #define CSIDL_APPDATA 0x001a @@ -68,6 +68,10 @@ static const wxChar *TRACE_MASK = _T("stdpaths"); #define CSIDL_PROGRAM_FILES 0x0026 #endif +#ifndef CSIDL_PERSONAL + #define CSIDL_PERSONAL 0x0005 +#endif + #ifndef SHGFP_TYPE_CURRENT #define SHGFP_TYPE_CURRENT 0 #endif @@ -75,7 +79,6 @@ static const wxChar *TRACE_MASK = _T("stdpaths"); #ifndef SHGFP_TYPE_DEFAULT #define SHGFP_TYPE_DEFAULT 1 #endif - // ---------------------------------------------------------------------------- // module globals // ---------------------------------------------------------------------------- @@ -106,6 +109,8 @@ static ShellFunctions gs_shellFuncs; static void ResolveShellFunctions() { +#if wxUSE_DYNLIB_CLASS + // start with the newest functions, fall back to the oldest ones #ifdef __WXWINCE__ wxString shellDllName(_T("coredll")); @@ -117,8 +122,7 @@ static void ResolveShellFunctions() wxDynamicLibrary dllShellFunctions( shellDllName ); if ( !dllShellFunctions.IsLoaded() ) { - wxString traceMessage = wxString::Format( _T("Failed to load %s.dll"), shellDllName ); - wxLogTrace(TRACE_MASK, traceMessage ); + wxLogTrace(TRACE_MASK, _T("Failed to load %s.dll"), shellDllName.c_str() ); } // don't give errors if the functions are unavailable, we're ready to deal @@ -154,6 +158,7 @@ static void ResolveShellFunctions() // because we also link to it statically, so it's ok gs_shellFuncs.initialized = true; +#endif } // ============================================================================ @@ -240,13 +245,43 @@ wxString wxStandardPaths::DoGetDirectory(int csidl) return dir; } +/* static */ +wxString wxStandardPaths::GetAppDir() +{ + wxFileName fn(wxGetFullModuleName()); + + // allow running the apps directly from build directory in debug builds +#ifdef __WXDEBUG__ + wxString lastdir; + if ( fn.GetDirCount() ) + { + lastdir = fn.GetDirs().Last(); + lastdir.MakeLower(); + if ( lastdir.Matches(_T("debug*")) || lastdir.Matches(_T("vc_msw*")) ) + fn.RemoveLastDir(); + } +#endif // __WXDEBUG__ + + return fn.GetPath(); +} + +wxString wxStandardPaths::GetDocumentsDir() const +{ + return DoGetDirectory(CSIDL_PERSONAL); +} + // ---------------------------------------------------------------------------- // public functions // ---------------------------------------------------------------------------- +wxString wxStandardPaths::GetExecutablePath() const +{ + return wxGetFullModuleName(); +} + wxString wxStandardPaths::GetConfigDir() const { - return AppendAppName(DoGetDirectory(CSIDL_COMMON_APPDATA)); + return AppendAppInfo(DoGetDirectory(CSIDL_COMMON_APPDATA)); } wxString wxStandardPaths::GetUserConfigDir() const @@ -258,25 +293,26 @@ wxString wxStandardPaths::GetDataDir() const { // under Windows each program is usually installed in its own directory and // so its datafiles are in the same directory as its main executable - return wxFileName(wxGetFullModuleName()).GetPath(); + return GetAppDir(); } wxString wxStandardPaths::GetUserDataDir() const { - return AppendAppName(GetUserConfigDir()); + return AppendAppInfo(GetUserConfigDir()); } wxString wxStandardPaths::GetUserLocalDataDir() const { - return AppendAppName(DoGetDirectory(CSIDL_LOCAL_APPDATA)); + return AppendAppInfo(DoGetDirectory(CSIDL_LOCAL_APPDATA)); } wxString wxStandardPaths::GetPluginsDir() const { - return wxFileName(wxGetFullModuleName()).GetPath(); + // there is no standard location for plugins, suppose they're in the same + // directory as the .exe + return GetAppDir(); } - // ============================================================================ // wxStandardPathsWin16 implementation // ============================================================================