summaryrefslogtreecommitdiffstats
path: root/src/corelib
diff options
context:
space:
mode:
authorSamuel Gaist <samuel.gaist@edeltech.ch>2014-11-23 01:00:05 +0100
committerSamuel Gaist <samuel.gaist@edeltech.ch>2014-11-24 00:33:20 +0100
commit5f6284a98baded49d31b9723117a98d3bd010cfe (patch)
tree5f3466148c26e28f86d08e3992e48f6c3cd4de38 /src/corelib
parent13b939c7f41bceb2061e549923eab242326e9bb5 (diff)
Implement Download folder path retrieval on OS X
The current implementation returns the DocumentLocation folder. Since now only cocoa is supported, we can use NSFileManager to get the correct path. [ChangeLog][QtCore][OS X] Now QStandardPaths returns the correct path for the DownloadLocation. Change-Id: Ic0ea3ebf8585a1e34a7b43c734df78fd3949d4d4 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Diffstat (limited to 'src/corelib')
-rw-r--r--src/corelib/io/io.pri5
-rw-r--r--src/corelib/io/qstandardpaths.cpp2
-rw-r--r--src/corelib/io/qstandardpaths_mac.mm (renamed from src/corelib/io/qstandardpaths_mac.cpp)12
3 files changed, 13 insertions, 6 deletions
diff --git a/src/corelib/io/io.pri b/src/corelib/io/io.pri
index bdc362ef22..77788e3cca 100644
--- a/src/corelib/io/io.pri
+++ b/src/corelib/io/io.pri
@@ -148,9 +148,8 @@ win32 {
HEADERS += io/qfilesystemwatcher_fsevents_p.h
}
macx {
- SOURCES += \
- io/qstorageinfo_mac.cpp \
- io/qstandardpaths_mac.cpp
+ SOURCES += io/qstorageinfo_mac.cpp
+ OBJECTIVE_SOURCES += io/qstandardpaths_mac.mm
LIBS += -framework DiskArbitration -framework IOKit
} else:ios {
OBJECTIVE_SOURCES += io/qstandardpaths_ios.mm
diff --git a/src/corelib/io/qstandardpaths.cpp b/src/corelib/io/qstandardpaths.cpp
index c206e432f6..6950d58fda 100644
--- a/src/corelib/io/qstandardpaths.cpp
+++ b/src/corelib/io/qstandardpaths.cpp
@@ -195,7 +195,7 @@ QT_BEGIN_NAMESPACE
\li "~/Library/Preferences"
\li "C:/Users/<USER>/AppData/Local", "C:/ProgramData"
\row \li DownloadLocation
- \li "~/Documents"
+ \li "~/Downloads"
\li "C:/Users/<USER>/Documents"
\row \li GenericCacheLocation
\li "~/Library/Caches", "/Library/Caches"
diff --git a/src/corelib/io/qstandardpaths_mac.cpp b/src/corelib/io/qstandardpaths_mac.mm
index 673b734d40..01d1c01f78 100644
--- a/src/corelib/io/qstandardpaths_mac.cpp
+++ b/src/corelib/io/qstandardpaths_mac.mm
@@ -33,6 +33,7 @@
#include "qstandardpaths.h"
#include <qdir.h>
+#include <qurl.h>
#include <private/qcore_mac_p.h>
#ifndef QT_BOOTSTRAPPED
@@ -55,8 +56,6 @@ OSType translateLocation(QStandardPaths::StandardLocation type)
return kPreferencesFolderType;
case QStandardPaths::DesktopLocation:
return kDesktopFolderType;
- case QStandardPaths::DownloadLocation: // needs NSSearchPathForDirectoriesInDomains with NSDownloadsDirectory
- // which needs an objective-C *.mm file...
case QStandardPaths::DocumentsLocation:
return kDocumentsFolderType;
case QStandardPaths::FontsLocation:
@@ -113,6 +112,15 @@ static void appendOrganizationAndApp(QString &path)
static QString macLocation(QStandardPaths::StandardLocation type, short domain)
{
+ // https://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSFileManager_Class/index.html
+ if (type == QStandardPaths::DownloadLocation) {
+ NSFileManager *fileManager = [NSFileManager defaultManager];
+ NSURL *url = [fileManager URLForDirectory:NSDownloadsDirectory inDomain:NSUserDomainMask appropriateForURL:nil create:NO error:nil];
+ if (!url)
+ return QString();
+ return QString::fromNSString([url path]);
+ }
+
// http://developer.apple.com/documentation/Carbon/Reference/Folder_Manager/Reference/reference.html
FSRef ref;
OSErr err = FSFindFolder(domain, translateLocation(type), false, &ref);