Index: toolkit/components/downloads/src/nsDownloadManager.cpp =================================================================== RCS file: /cvsroot/mozilla/toolkit/components/downloads/src/nsDownloadManager.cpp,v retrieving revision 1.136 diff -p -u -B -U 10 -r1.136 nsDownloadManager.cpp --- toolkit/components/downloads/src/nsDownloadManager.cpp 7 Oct 2007 17:21:57 -0000 1.136 +++ toolkit/components/downloads/src/nsDownloadManager.cpp 10 Oct 2007 20:23:23 -0000 @@ -881,21 +881,21 @@ nsDownloadManager::GetDefaultDownloadsDi do_GetService(NS_DIRECTORY_SERVICE_CONTRACTID, &rv); NS_ENSURE_SUCCESS(rv, rv); // OSX: // Safari download folder or Desktop/Downloads // Vista: // Downloads // XP/2K: // Desktop/Downloads // Linux: - // Home/Downloads + // XDG user dir spec, with a fallback to Home/Downloads nsXPIDLString folderName; mBundle->GetStringFromName(NS_LITERAL_STRING("downloadsFolder").get(), getter_Copies(folderName)); #if defined (XP_MACOSX) nsCOMPtr desktopDir; rv = dirService->Get(NS_OSX_DEFAULT_DOWNLOAD_DIR, NS_GET_IID(nsILocalFile), getter_AddRefs(downloadDir)); @@ -926,26 +926,36 @@ nsDownloadManager::GetDefaultDownloadsDi NS_ENSURE_SUCCESS(rv, rv); PRInt32 version; NS_NAMED_LITERAL_STRING(osVersion, "version"); rv = infoService->GetPropertyAsInt32(osVersion, &version); if (version < 6) { // XP/2K rv = downloadDir->Append(folderName); NS_ENSURE_SUCCESS(rv, rv); } #else +#if defined(XP_UNIX) + rv = dirService->Get(NS_UNIX_XDG_DOWNLOAD_DIR, + NS_GET_IID(nsILocalFile), + getter_AddRefs(downloadDir)); + // fallback to Home/Downloads + if (NS_FAILED(rv)) { +#endif rv = dirService->Get(NS_OS_HOME_DIR, NS_GET_IID(nsILocalFile), getter_AddRefs(downloadDir)); NS_ENSURE_SUCCESS(rv, rv); rv = downloadDir->Append(folderName); NS_ENSURE_SUCCESS(rv, rv); +#if defined(XP_UNIX) + } +#endif #endif NS_ADDREF(*aResult = downloadDir); return NS_OK; } #define NS_BRANCH_DOWNLOAD "browser.download." #define NS_PREF_FOLDERLIST "folderList" #define NS_PREF_DIR "dir"