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>
This commit is contained in:
parent
13b939c7f4
commit
5f6284a98b
@ -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
|
||||
|
@ -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"
|
||||
|
@ -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);
|
@ -132,12 +132,13 @@ win32:SOURCES += ../../corelib/io/qfilesystemengine_win.cpp \
|
||||
mac {
|
||||
SOURCES += ../../corelib/kernel/qcoreapplication_mac.cpp \
|
||||
../../corelib/kernel/qcore_mac.cpp
|
||||
LIBS += -framework CoreServices
|
||||
LIBS += -framework CoreServices -framework Foundation
|
||||
}
|
||||
|
||||
macx {
|
||||
SOURCES += \
|
||||
../../corelib/io/qstandardpaths_mac.cpp
|
||||
OBJECTIVE_SOURCES += \
|
||||
../../corelib/tools/qstring_mac.mm \
|
||||
../../corelib/io/qstandardpaths_mac.mm
|
||||
} else:unix {
|
||||
SOURCES += \
|
||||
../../corelib/io/qstandardpaths_unix.cpp
|
||||
|
Loading…
Reference in New Issue
Block a user