Commit 60915a55 authored by Olivier F. R. Dierick's avatar Olivier F. R. Dierick Committed by Alexandre Julliard

shell32: Move 'Desktop' symbolic link creation to a separate function.

parent c6d8f1ac
...@@ -4276,36 +4276,13 @@ static void _SHCreateMyStuffSymbolicLink(int nFolder) ...@@ -4276,36 +4276,13 @@ static void _SHCreateMyStuffSymbolicLink(int nFolder)
} }
/****************************************************************************** /******************************************************************************
* _SHCreateSymbolicLinks [Internal] * _SHCreateDesktopSymbolicLink [Internal]
* *
* Sets up symbol links for various shell folders to point into the user's home * Sets up a symbolic link for the 'Desktop' shell folder to point into the
* directory. We do an educated guess about what the user would probably want: * users home directory.
* - If there is a 'My Documents' directory in $HOME, the user probably wants
* 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 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.
* ('My Music',... above in fact means LoadString(IDS_MYMUSIC))
*/ */
static void _SHCreateSymbolicLinks(void) static void _SHCreateDesktopSymbolicLink(void)
{ {
static const UINT aidsMyStuff[] = {
IDS_MYPICTURES, IDS_MYVIDEOS, IDS_MYMUSIC, IDS_DOWNLOADS, IDS_TEMPLATES
};
static const int acsidlMyStuff[] = {
CSIDL_MYPICTURES, CSIDL_MYVIDEO, CSIDL_MYMUSIC, CSIDL_DOWNLOADS, CSIDL_TEMPLATES
};
static const char * const xdg_dirs[] = { "DESKTOP" }; static const char * const xdg_dirs[] = { "DESKTOP" };
static const unsigned int num = ARRAY_SIZE(xdg_dirs); static const unsigned int num = ARRAY_SIZE(xdg_dirs);
char *pszPersonal; char *pszPersonal;
...@@ -4314,13 +4291,6 @@ static void _SHCreateSymbolicLinks(void) ...@@ -4314,13 +4291,6 @@ static void _SHCreateSymbolicLinks(void)
const char *pszHome; const char *pszHome;
char ** xdg_results; char ** xdg_results;
char * xdg_desktop_dir; char * xdg_desktop_dir;
UINT i;
_SHCreateMyDocumentsSymbolicLink(aidsMyStuff, ARRAY_SIZE(aidsMyStuff));
/* Create symbolic links for 'My Pictures', 'My Videos', 'My Music' etc. */
for (i=0; i < ARRAY_SIZE(acsidlMyStuff); i++)
_SHCreateMyStuffSymbolicLink(acsidlMyStuff[i]);
/* Create all necessary profile sub-dirs up to 'My Documents' and get the unix path. */ /* Create all necessary profile sub-dirs up to 'My Documents' and get the unix path. */
pszPersonal = _SHGetFolderUnixPath(CSIDL_PERSONAL|CSIDL_FLAG_CREATE); pszPersonal = _SHGetFolderUnixPath(CSIDL_PERSONAL|CSIDL_FLAG_CREATE);
...@@ -4330,14 +4300,13 @@ static void _SHCreateSymbolicLinks(void) ...@@ -4330,14 +4300,13 @@ static void _SHCreateSymbolicLinks(void)
pszHome = getenv("HOME"); pszHome = getenv("HOME");
/* Last but not least, the Desktop folder */
if (pszHome) if (pszHome)
strcpy(szDesktopTarget, pszHome); strcpy(szDesktopTarget, pszHome);
else else
strcpy(szDesktopTarget, pszPersonal); strcpy(szDesktopTarget, pszPersonal);
heap_free(pszPersonal); heap_free(pszPersonal);
xdg_desktop_dir = xdg_results ? xdg_results[num - 1] : NULL; xdg_desktop_dir = xdg_results ? xdg_results[0] : NULL;
if (xdg_desktop_dir || if (xdg_desktop_dir ||
(_SHAppendToUnixPath(szDesktopTarget, DesktopW) && (_SHAppendToUnixPath(szDesktopTarget, DesktopW) &&
!stat(szDesktopTarget, &statFolder) && S_ISDIR(statFolder.st_mode))) !stat(szDesktopTarget, &statFolder) && S_ISDIR(statFolder.st_mode)))
...@@ -4358,6 +4327,49 @@ static void _SHCreateSymbolicLinks(void) ...@@ -4358,6 +4327,49 @@ static void _SHCreateSymbolicLinks(void)
} }
/****************************************************************************** /******************************************************************************
* _SHCreateSymbolicLinks [Internal]
*
* 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 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 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.
* ('My Music',... above in fact means LoadString(IDS_MYMUSIC))
*/
static void _SHCreateSymbolicLinks(void)
{
static const UINT aidsMyStuff[] = {
IDS_MYPICTURES, IDS_MYVIDEOS, IDS_MYMUSIC, IDS_DOWNLOADS, IDS_TEMPLATES
};
static const int acsidlMyStuff[] = {
CSIDL_MYPICTURES, CSIDL_MYVIDEO, CSIDL_MYMUSIC, CSIDL_DOWNLOADS, CSIDL_TEMPLATES
};
UINT i;
_SHCreateMyDocumentsSymbolicLink(aidsMyStuff, ARRAY_SIZE(aidsMyStuff));
/* Create symbolic links for 'My Pictures', 'My Videos', 'My Music' etc. */
for (i=0; i < ARRAY_SIZE(acsidlMyStuff); i++)
_SHCreateMyStuffSymbolicLink(acsidlMyStuff[i]);
/* Last but not least, the Desktop folder */
_SHCreateDesktopSymbolicLink();
}
/******************************************************************************
* SHGetFolderPathW [SHELL32.@] * SHGetFolderPathW [SHELL32.@]
* *
* Convert nFolder to path. * Convert nFolder to path.
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment