Signed-off-by: Alex Henrie alexhenrie24@gmail.com --- I recently wanted to try out the Windows version of Avidemux on a file I had just downloaded from the web, and Avidemux's Open dialog defaulted to C:\Users\alex, but when I double-clicked Downloads it was empty. --- dlls/shell32/shellpath.c | 52 ++++++++++++++++++++++++++-------------- 1 file changed, 34 insertions(+), 18 deletions(-)
diff --git a/dlls/shell32/shellpath.c b/dlls/shell32/shellpath.c index 8c6e8a89b2..28984a9dc1 100644 --- a/dlls/shell32/shellpath.c +++ b/dlls/shell32/shellpath.c @@ -4354,6 +4354,12 @@ static inline BOOL _SHAppendToUnixPath(char *szBasePath, LPCWSTR pwszSubPath) { case IDS_MYVIDEOS: lstrcpyW(wszSubPath, My_VideosW); break; + case IDS_DOWNLOADS: + lstrcpyW(wszSubPath, DownloadsW); + break; + case IDS_TEMPLATES: + lstrcpyW(wszSubPath, TemplatesW); + break; default: ERR("LoadString(%d) failed!\n", LOWORD(pwszSubPath)); return FALSE; @@ -4380,21 +4386,21 @@ static inline BOOL _SHAppendToUnixPath(char *szBasePath, LPCWSTR pwszSubPath) { /****************************************************************************** * _SHCreateSymbolicLinks [Internal] * - * Sets up symbol links for various shell folders to point into the users home + * Sets up symbol links for various shell folders to point into the user's home * directory. We do an educated guess about what the user would probably want: * - If there is a 'My Documents' directory in $HOME, the user probably wants - * wine's 'My Documents' to point there. Furthermore, we imply that the user - * is a Windows lover and has no problem with wine creating 'My Pictures', - * 'My Music' and 'My Videos' subfolders under '$HOME/My Documents', if those - * do not already exits. We put appropriate symbolic links in place for those, - * too. + * wine's 'My Documents' to point there. Furthermore, we infer that the user + * is a Windows lover and has no problem with wine creating subfolders for + * 'My Pictures', 'My Music', 'My Videos' etc. under '$HOME/My Documents', if + * those do not already exist. We put appropriate symbolic links in place for + * those, too. * - If there is no 'My Documents' directory in $HOME, we let 'My Documents' * point directly to $HOME. We assume the user to be a unix hacker who does not * want wine to create anything anywhere besides the .wine directory. So, if * there already is a 'My Music' directory in $HOME, we symlink the 'My Music' * shell folder to it. But if not, then we check XDG_MUSIC_DIR - "well known" * directory, and try to link to that. If that fails, then we symlink to - * $HOME directly. The same holds fo 'My Pictures' and 'My Videos'. + * $HOME directly. The same holds for 'My Pictures', 'My Videos' etc. * - The Desktop shell folder is symlinked to XDG_DESKTOP_DIR. If that does not * exist, then we try '$HOME/Desktop'. If that does not exist, then we leave * it alone. @@ -4402,10 +4408,18 @@ static inline BOOL _SHAppendToUnixPath(char *szBasePath, LPCWSTR pwszSubPath) { */ static void _SHCreateSymbolicLinks(void) { - UINT aidsMyStuff[] = { IDS_MYPICTURES, IDS_MYVIDEOS, IDS_MYMUSIC }, i; - const WCHAR* MyOSXStuffW[] = { PicturesW, MoviesW, MusicW }; - int acsidlMyStuff[] = { CSIDL_MYPICTURES, CSIDL_MYVIDEO, CSIDL_MYMUSIC }; - static const char * const xdg_dirs[] = { "PICTURES", "VIDEOS", "MUSIC", "DOCUMENTS", "DESKTOP" }; + static const UINT aidsMyStuff[] = { + IDS_MYPICTURES, IDS_MYVIDEOS, IDS_MYMUSIC, IDS_DOWNLOADS, IDS_TEMPLATES + }; + static const WCHAR * const MyOSXStuffW[] = { + PicturesW, MoviesW, MusicW, DownloadsW, TemplatesW + }; + static const int acsidlMyStuff[] = { + CSIDL_MYPICTURES, CSIDL_MYVIDEO, CSIDL_MYMUSIC, CSIDL_DOWNLOADS, CSIDL_TEMPLATES + }; + static const char * const xdg_dirs[] = { + "PICTURES", "VIDEOS", "MUSIC", "DOWNLOAD", "TEMPLATES", "DOCUMENTS", "DESKTOP" + }; static const unsigned int num = ARRAY_SIZE(xdg_dirs); WCHAR wszTempPath[MAX_PATH]; char szPersonalTarget[FILENAME_MAX], *pszPersonal; @@ -4416,6 +4430,7 @@ static void _SHCreateSymbolicLinks(void) HRESULT hr; char ** xdg_results; char * xdg_desktop_dir; + UINT i;
/* Create all necessary profile sub-dirs up to 'My Documents' and get the unix path. */ hr = SHGetFolderPathW(NULL, CSIDL_PERSONAL|CSIDL_FLAG_CREATE, NULL, @@ -4437,9 +4452,9 @@ static void _SHCreateSymbolicLinks(void) if (_SHAppendToUnixPath(szPersonalTarget, MAKEINTRESOURCEW(IDS_PERSONAL)) && !stat(szPersonalTarget, &statFolder) && S_ISDIR(statFolder.st_mode)) { - /* '$HOME/My Documents' exists. Create 'My Pictures', - * 'My Videos' and 'My Music' subfolders or fail silently if - * they already exist. + /* '$HOME/My Documents' exists. Create subfolders for + * 'My Pictures', 'My Videos', 'My Music' etc. or fail silently + * if they already exist. */ for (i = 0; i < ARRAY_SIZE(aidsMyStuff); i++) { @@ -4477,8 +4492,9 @@ static void _SHCreateSymbolicLinks(void) } else { - /* '$HOME' doesn't exist. Create 'My Pictures', 'My Videos' and 'My Music' subdirs - * in '%USERPROFILE%\My Documents' or fail silently if they already exist. */ + /* '$HOME' doesn't exist. Create subdirs for 'My Pictures', 'My Videos', + * 'My Music' etc. in '%USERPROFILE%\My Documents' or fail silently if + * they already exist. */ pszHome = NULL; strcpy(szPersonalTarget, pszPersonal); for (i = 0; i < ARRAY_SIZE(aidsMyStuff); i++) { @@ -4488,7 +4504,7 @@ static void _SHCreateSymbolicLinks(void) } }
- /* Create symbolic links for 'My Pictures', 'My Videos' and 'My Music'. */ + /* Create symbolic links for 'My Pictures', 'My Videos', 'My Music' etc. */ for (i=0; i < ARRAY_SIZE(aidsMyStuff); i++) { /* Create the current 'My Whatever' folder and get its unix path. */ @@ -6124,7 +6140,7 @@ HRESULT SHELL_RegisterShellFolders(void) HRESULT hr;
/* Set up '$HOME' targeted symlinks for 'My Documents', 'My Pictures', - * 'My Videos', 'My Music' and 'Desktop' in advance, so that the + * 'My Videos', 'My Music', 'Desktop' etc. in advance, so that the * _SHRegister*ShellFolders() functions will find everything nice and clean * and thus will not attempt to create them in the profile directory. */ _SHCreateSymbolicLinks();