diff options
author | David Faure <faure@kde.org> | 2011-10-21 20:12:01 +0200 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2011-10-23 00:56:31 +0200 |
commit | 86558de34134f67cf3815a29612edc2d730f2ea2 (patch) | |
tree | 868417b17bac24be1f17080680af0f614a98b9b6 /src/corelib/io/qstandardpaths_mac.cpp | |
parent | 4a788eb8313d7c089e3a59594fc6a5c9a7dd6499 (diff) |
Move path information from QDesktopServices (gui) to QStandardPaths (core)
Change-Id: Ic596c21894d83b4dab0c3f5b1aed916ddd590f2f
Reviewed-by: Thiago Macieira (Intel) <thiago.macieira@intel.com>
Diffstat (limited to 'src/corelib/io/qstandardpaths_mac.cpp')
-rw-r--r-- | src/corelib/io/qstandardpaths_mac.cpp | 148 |
1 files changed, 148 insertions, 0 deletions
diff --git a/src/corelib/io/qstandardpaths_mac.cpp b/src/corelib/io/qstandardpaths_mac.cpp new file mode 100644 index 0000000000..b90cc7c6f2 --- /dev/null +++ b/src/corelib/io/qstandardpaths_mac.cpp @@ -0,0 +1,148 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtGui module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** GNU Lesser General Public License Usage +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this +** file. Please review the following information to ensure the GNU Lesser +** General Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU General +** Public License version 3.0 as published by the Free Software Foundation +** and appearing in the file LICENSE.GPL included in the packaging of this +** file. Please review the following information to ensure the GNU General +** Public License version 3.0 requirements will be met: +** http://www.gnu.org/copyleft/gpl.html. +** +** Other Usage +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QT_NO_DESKTOPSERVICES + +#include "qstandardpaths.h" +#include <qdir.h> +#include <private/qcore_mac_p.h> +#include <qcoreapplication.h> + +#include <ApplicationServices/ApplicationServices.h> + +QT_BEGIN_NAMESPACE + +/* + Translates a QStandardPaths::StandardLocation into the mac equivalent. +*/ +OSType translateLocation(QStandardPaths::StandardLocation type) +{ + switch (type) { + case QStandardPaths::DesktopLocation: + return kDesktopFolderType; + case QStandardPaths::DocumentsLocation: + return kDocumentsFolderType; + case QStandardPaths::FontsLocation: + // There are at least two different font directories on the mac: /Library/Fonts and ~/Library/Fonts. + // To select a specific one we have to specify a different first parameter when calling FSFindFolder. + return kFontsFolderType; + case QStandardPaths::ApplicationsLocation: + return kApplicationsFolderType; + case QStandardPaths::MusicLocation: + return kMusicDocumentsFolderType; + case QStandardPaths::MoviesLocation: + return kMovieDocumentsFolderType; + case QStandardPaths::PicturesLocation: + return kPictureDocumentsFolderType; + case QStandardPaths::TempLocation: + return kTemporaryFolderType; + case QStandardPaths::DataLocation: + return kApplicationSupportFolderType; + case QStandardPaths::CacheLocation: + return kCachedDataFolderType; + default: + return kDesktopFolderType; + } +} + +/* + Constructs a full unicode path from a FSRef. +*/ +static QString getFullPath(const FSRef &ref) +{ + QByteArray ba(2048, 0); + if (FSRefMakePath(&ref, reinterpret_cast<UInt8 *>(ba.data()), ba.size()) == noErr) + return QString::fromUtf8(ba).normalized(QString::NormalizationForm_C); + return QString(); +} + +QString QStandardPaths::storageLocation(StandardLocation type) +{ + if (type == HomeLocation) + return QDir::homePath(); + + if (type == TempLocation) + return QDir::tempPath(); + + short domain = kOnAppropriateDisk; + + if (type == DataLocation || type == CacheLocation) + domain = kUserDomain; + + // http://developer.apple.com/documentation/Carbon/Reference/Folder_Manager/Reference/reference.html + FSRef ref; + OSErr err = FSFindFolder(domain, translateLocation(type), false, &ref); + if (err) + return QString(); + + QString path = getFullPath(ref); + + if (type == DataLocation || type == CacheLocation) { + if (QCoreApplication::organizationName().isEmpty() == false) + path += QLatin1Char('/') + QCoreApplication::organizationName(); + if (QCoreApplication::applicationName().isEmpty() == false) + path += QLatin1Char('/') + QCoreApplication::applicationName(); + } + + return path; +} + +QString QStandardPaths::displayName(StandardLocation type) +{ + if (QStandardPaths::HomeLocation == type) + return QCoreApplication::translate("QStandardPaths", "Home"); + + FSRef ref; + OSErr err = FSFindFolder(kOnAppropriateDisk, translateLocation(type), false, &ref); + if (err) + return QString(); + + QCFString displayName; + err = LSCopyDisplayNameForRef(&ref, &displayName); + if (err) + return QString(); + + return static_cast<QString>(displayName); +} + +QT_END_NAMESPACE + +#endif // QT_NO_DESKTOPSERVICES |