diff -r 9d0abe25b162 toolkit/components/downloads/src/nsDownloadManager.cpp --- a/toolkit/components/downloads/src/nsDownloadManager.cpp Mon Feb 16 16:02:21 2009 -0800 +++ b/toolkit/components/downloads/src/nsDownloadManager.cpp Thu Feb 19 00:38:35 2009 -0400 @@ -1331,6 +1331,16 @@ } } #elif defined(XP_UNIX) +#if defined(NS_OSSO) + // As maemo does not follow the XDG "standard" (as usually desktop + // Linux distros do) neither has a working $HOME/Desktop folder + // for us to fallback into, "$HOME/MyDocs/.documents/" is the folder + // we found most apropriate to be the default target folder for downloads + // on the platform. + rv = dirService->Get(NS_UNIX_XDG_DOCUMENTS_DIR, + NS_GET_IID(nsILocalFile), + getter_AddRefs(downloadDir)); +#else rv = dirService->Get(NS_UNIX_DEFAULT_DOWNLOAD_DIR, NS_GET_IID(nsILocalFile), getter_AddRefs(downloadDir)); @@ -1343,6 +1353,7 @@ rv = downloadDir->Append(folderName); NS_ENSURE_SUCCESS(rv, rv); } +#endif #else rv = dirService->Get(NS_OS_HOME_DIR, NS_GET_IID(nsILocalFile), diff -r 9d0abe25b162 xpcom/io/SpecialSystemDirectory.cpp --- a/xpcom/io/SpecialSystemDirectory.cpp Mon Feb 16 16:02:21 2009 -0800 +++ b/xpcom/io/SpecialSystemDirectory.cpp Thu Feb 19 00:38:35 2009 -0400 @@ -434,10 +434,28 @@ return rv; rv = file->AppendNative(NS_LITERAL_CSTRING("Desktop")); - } else { + } +#if defined(NS_OSSO) + // "MYDOCSDIR" is exported to point to "/home/user/MyDocs" in maemo. + else if (Unix_XDG_Documents == aSystemDirectory) { + + char *myDocs = PR_GetEnv("MYDOCSDIR"); + if (!myDocs || !*myDocs) + return NS_ERROR_FAILURE; + + rv = NS_NewNativeLocalFile(nsDependentCString(myDocs), PR_TRUE, + getter_AddRefs(file)); + if (NS_FAILED(rv)) + return rv; + + rv = file->AppendNative(NS_LITERAL_CSTRING(".documents")); + } +#else + else { // no fallback for the other XDG dirs rv = NS_ERROR_FAILURE; } +#endif if (NS_FAILED(rv)) return rv;