Move path information from QDesktopServices (gui) to QStandardPaths (core)
Change-Id: Ic596c21894d83b4dab0c3f5b1aed916ddd590f2f Reviewed-by: Thiago Macieira (Intel) <thiago.macieira@intel.com>
This commit is contained in:
parent
4a788eb831
commit
86558de341
@ -23,6 +23,7 @@ HEADERS += \
|
|||||||
io/qtemporaryfile.h \
|
io/qtemporaryfile.h \
|
||||||
io/qresource_p.h \
|
io/qresource_p.h \
|
||||||
io/qresource_iterator_p.h \
|
io/qresource_iterator_p.h \
|
||||||
|
io/qstandardpaths.h \
|
||||||
io/qurl.h \
|
io/qurl.h \
|
||||||
io/qurltlds_p.h \
|
io/qurltlds_p.h \
|
||||||
io/qtldurl_p.h \
|
io/qtldurl_p.h \
|
||||||
@ -56,6 +57,7 @@ SOURCES += \
|
|||||||
io/qtemporaryfile.cpp \
|
io/qtemporaryfile.cpp \
|
||||||
io/qresource.cpp \
|
io/qresource.cpp \
|
||||||
io/qresource_iterator.cpp \
|
io/qresource_iterator.cpp \
|
||||||
|
io/qstandardpaths.cpp \
|
||||||
io/qurl.cpp \
|
io/qurl.cpp \
|
||||||
io/qsettings.cpp \
|
io/qsettings.cpp \
|
||||||
io/qfsfileengine.cpp \
|
io/qfsfileengine.cpp \
|
||||||
@ -75,6 +77,7 @@ win32 {
|
|||||||
SOURCES += io/qwindowspipewriter.cpp
|
SOURCES += io/qwindowspipewriter.cpp
|
||||||
SOURCES += io/qfilesystemengine_win.cpp
|
SOURCES += io/qfilesystemengine_win.cpp
|
||||||
SOURCES += io/qfilesystemiterator_win.cpp
|
SOURCES += io/qfilesystemiterator_win.cpp
|
||||||
|
SOURCES += io/qstandardpaths_win.cpp
|
||||||
} else:unix {
|
} else:unix {
|
||||||
SOURCES += io/qfsfileengine_unix.cpp
|
SOURCES += io/qfsfileengine_unix.cpp
|
||||||
symbian {
|
symbian {
|
||||||
@ -91,6 +94,11 @@ win32 {
|
|||||||
SOURCES += io/qfilesystemengine_mac.cpp
|
SOURCES += io/qfilesystemengine_mac.cpp
|
||||||
SOURCES += io/qsettings_mac.cpp io/qfilesystemwatcher_fsevents.cpp
|
SOURCES += io/qsettings_mac.cpp io/qfilesystemwatcher_fsevents.cpp
|
||||||
}
|
}
|
||||||
|
macx-*: {
|
||||||
|
SOURCES += io/qstandardpaths_mac.cpp
|
||||||
|
} else {
|
||||||
|
SOURCES += io/qstandardpaths_unix.cpp
|
||||||
|
}
|
||||||
|
|
||||||
linux-*:!symbian {
|
linux-*:!symbian {
|
||||||
SOURCES += \
|
SOURCES += \
|
||||||
|
114
src/corelib/io/qstandardpaths.cpp
Normal file
114
src/corelib/io/qstandardpaths.cpp
Normal file
@ -0,0 +1,114 @@
|
|||||||
|
/****************************************************************************
|
||||||
|
**
|
||||||
|
** 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$
|
||||||
|
**
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
#include "qstandardpaths.h"
|
||||||
|
|
||||||
|
#include <qdir.h>
|
||||||
|
#include <qfileinfo.h>
|
||||||
|
#include <qhash.h>
|
||||||
|
#include <qobject.h>
|
||||||
|
#include <qcoreapplication.h>
|
||||||
|
|
||||||
|
#ifndef QT_NO_STANDARDPATHS
|
||||||
|
|
||||||
|
QT_BEGIN_NAMESPACE
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\class QStandardPaths
|
||||||
|
\brief The QStandardPaths class provides methods for accessing standard paths.
|
||||||
|
\since 5.0
|
||||||
|
|
||||||
|
This class contains functions to query standard locations on the local
|
||||||
|
filesystem, for common tasks such as user-specific directories or system-wide
|
||||||
|
configuration directories.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\enum QStandardPaths::StandardLocation
|
||||||
|
|
||||||
|
This enum describes the different locations that can be queried using
|
||||||
|
methods such as QStandardPaths::storageLocation and QStandardPaths::displayName.
|
||||||
|
|
||||||
|
\value DesktopLocation Returns the user's desktop directory.
|
||||||
|
\value DocumentsLocation Returns the user's document.
|
||||||
|
\value FontsLocation Returns the user's fonts.
|
||||||
|
\value ApplicationsLocation Returns the user's applications.
|
||||||
|
\value MusicLocation Returns the users music.
|
||||||
|
\value MoviesLocation Returns the user's movies.
|
||||||
|
\value PicturesLocation Returns the user's pictures.
|
||||||
|
\value TempLocation Returns the system's temporary directory.
|
||||||
|
\value HomeLocation Returns the user's home directory.
|
||||||
|
\value DataLocation Returns a directory location where persistent
|
||||||
|
application data can be stored. QCoreApplication::applicationName
|
||||||
|
and QCoreApplication::organizationName should work on all
|
||||||
|
platforms.
|
||||||
|
\value CacheLocation Returns a directory location where user-specific
|
||||||
|
non-essential (cached) data should be written.
|
||||||
|
|
||||||
|
\sa storageLocation() displayName()
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\fn QString QStandardPaths::storageLocation(StandardLocation type)
|
||||||
|
|
||||||
|
Returns the default system directory where files of \a type belong, or an empty string
|
||||||
|
if the location cannot be determined.
|
||||||
|
|
||||||
|
\note The storage location returned can be a directory that does not exist; i.e., it
|
||||||
|
may need to be created by the system or the user.
|
||||||
|
|
||||||
|
\note On Symbian OS, ApplicationsLocation always point /sys/bin folder on the same drive
|
||||||
|
with executable. FontsLocation always points to folder on ROM drive. Symbian OS does not
|
||||||
|
have desktop concept, DesktopLocation returns same path as DocumentsLocation.
|
||||||
|
Rest of the standard locations point to folder on same drive with executable, except
|
||||||
|
that if executable is in ROM the folder from C drive is returned.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\fn QString QStandardPaths::displayName(StandardLocation type)
|
||||||
|
|
||||||
|
Returns a localized display name for the given location \a type or
|
||||||
|
an empty QString if no relevant location can be found.
|
||||||
|
*/
|
||||||
|
|
||||||
|
QT_END_NAMESPACE
|
||||||
|
|
||||||
|
#endif // QT_NO_STANDARDPATHS
|
85
src/corelib/io/qstandardpaths.h
Normal file
85
src/corelib/io/qstandardpaths.h
Normal file
@ -0,0 +1,85 @@
|
|||||||
|
/****************************************************************************
|
||||||
|
**
|
||||||
|
** 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 QSTANDARDPATHS_H
|
||||||
|
#define QSTANDARDPATHS_H
|
||||||
|
|
||||||
|
#include <QtCore/qstring.h>
|
||||||
|
|
||||||
|
QT_BEGIN_HEADER
|
||||||
|
|
||||||
|
QT_BEGIN_NAMESPACE
|
||||||
|
|
||||||
|
QT_MODULE(Core)
|
||||||
|
|
||||||
|
#ifndef QT_NO_STANDARDPATHS
|
||||||
|
|
||||||
|
class QStringList;
|
||||||
|
|
||||||
|
class Q_CORE_EXPORT QStandardPaths
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
// Do not re-order, must match QDesktopServices
|
||||||
|
enum StandardLocation {
|
||||||
|
DesktopLocation,
|
||||||
|
DocumentsLocation,
|
||||||
|
FontsLocation,
|
||||||
|
ApplicationsLocation,
|
||||||
|
MusicLocation,
|
||||||
|
MoviesLocation,
|
||||||
|
PicturesLocation,
|
||||||
|
TempLocation,
|
||||||
|
HomeLocation,
|
||||||
|
DataLocation,
|
||||||
|
CacheLocation
|
||||||
|
};
|
||||||
|
|
||||||
|
static QString storageLocation(StandardLocation type);
|
||||||
|
static QString displayName(StandardLocation type);
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // QT_NO_STANDARDPATHS
|
||||||
|
|
||||||
|
QT_END_NAMESPACE
|
||||||
|
|
||||||
|
QT_END_HEADER
|
||||||
|
|
||||||
|
#endif // QSTANDARDPATHS_H
|
148
src/corelib/io/qstandardpaths_mac.cpp
Normal file
148
src/corelib/io/qstandardpaths_mac.cpp
Normal file
@ -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
|
166
src/corelib/io/qstandardpaths_unix.cpp
Normal file
166
src/corelib/io/qstandardpaths_unix.cpp
Normal file
@ -0,0 +1,166 @@
|
|||||||
|
/****************************************************************************
|
||||||
|
**
|
||||||
|
** 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$
|
||||||
|
**
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
#include "qstandardpaths.h"
|
||||||
|
#include <qprocess.h>
|
||||||
|
#include <qurl.h>
|
||||||
|
#include <qdir.h>
|
||||||
|
#include <qfile.h>
|
||||||
|
#include <qtextstream.h>
|
||||||
|
#include <qcoreapplication.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
#ifndef QT_NO_STANDARDPATHS
|
||||||
|
|
||||||
|
QT_BEGIN_NAMESPACE
|
||||||
|
|
||||||
|
QString QStandardPaths::storageLocation(StandardLocation type)
|
||||||
|
{
|
||||||
|
if (type == QStandardPaths::HomeLocation)
|
||||||
|
return QDir::homePath();
|
||||||
|
if (type == QStandardPaths::TempLocation)
|
||||||
|
return QDir::tempPath();
|
||||||
|
|
||||||
|
// http://standards.freedesktop.org/basedir-spec/basedir-spec-0.6.html
|
||||||
|
if (type == QStandardPaths::CacheLocation) {
|
||||||
|
QString xdgCacheHome = QLatin1String(qgetenv("XDG_CACHE_HOME"));
|
||||||
|
if (xdgCacheHome.isEmpty())
|
||||||
|
xdgCacheHome = QDir::homePath() + QLatin1String("/.cache");
|
||||||
|
xdgCacheHome += QLatin1Char('/') + QCoreApplication::organizationName()
|
||||||
|
+ QLatin1Char('/') + QCoreApplication::applicationName();
|
||||||
|
return xdgCacheHome;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (type == QStandardPaths::DataLocation) {
|
||||||
|
QString xdgDataHome = QLatin1String(qgetenv("XDG_DATA_HOME"));
|
||||||
|
if (xdgDataHome.isEmpty())
|
||||||
|
xdgDataHome = QDir::homePath() + QLatin1String("/.local/share");
|
||||||
|
xdgDataHome += QLatin1String("/data/")
|
||||||
|
+ QCoreApplication::organizationName() + QLatin1Char('/')
|
||||||
|
+ QCoreApplication::applicationName();
|
||||||
|
return xdgDataHome;
|
||||||
|
}
|
||||||
|
|
||||||
|
// http://www.freedesktop.org/wiki/Software/xdg-user-dirs
|
||||||
|
QString xdgConfigHome = QLatin1String(qgetenv("XDG_CONFIG_HOME"));
|
||||||
|
if (xdgConfigHome.isEmpty())
|
||||||
|
xdgConfigHome = QDir::homePath() + QLatin1String("/.config");
|
||||||
|
QFile file(xdgConfigHome + QLatin1String("/user-dirs.dirs"));
|
||||||
|
if (file.exists() && file.open(QIODevice::ReadOnly)) {
|
||||||
|
QHash<QString, QString> lines;
|
||||||
|
QTextStream stream(&file);
|
||||||
|
// Only look for lines like: XDG_DESKTOP_DIR="$HOME/Desktop"
|
||||||
|
QRegExp exp(QLatin1String("^XDG_(.*)_DIR=(.*)$"));
|
||||||
|
while (!stream.atEnd()) {
|
||||||
|
QString line = stream.readLine();
|
||||||
|
if (exp.indexIn(line) != -1) {
|
||||||
|
const QStringList lst = exp.capturedTexts();
|
||||||
|
const QString key = lst.at(1);
|
||||||
|
QString value = lst.at(2);
|
||||||
|
if (value.length() > 2
|
||||||
|
&& value.startsWith(QLatin1Char('\"'))
|
||||||
|
&& value.endsWith(QLatin1Char('\"')))
|
||||||
|
value = value.mid(1, value.length() - 2);
|
||||||
|
// Store the key and value: "DESKTOP", "$HOME/Desktop"
|
||||||
|
lines[key] = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
QString key;
|
||||||
|
switch (type) {
|
||||||
|
case DesktopLocation: key = QLatin1String("DESKTOP"); break;
|
||||||
|
case DocumentsLocation: key = QLatin1String("DOCUMENTS"); break;
|
||||||
|
case PicturesLocation: key = QLatin1String("PICTURES"); break;
|
||||||
|
case MusicLocation: key = QLatin1String("MUSIC"); break;
|
||||||
|
case MoviesLocation: key = QLatin1String("VIDEOS"); break;
|
||||||
|
default: break;
|
||||||
|
}
|
||||||
|
if (!key.isEmpty() && lines.contains(key)) {
|
||||||
|
QString value = lines[key];
|
||||||
|
// value can start with $HOME
|
||||||
|
if (value.startsWith(QLatin1String("$HOME")))
|
||||||
|
value = QDir::homePath() + value.mid(5);
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
QDir emptyDir;
|
||||||
|
QString path;
|
||||||
|
switch (type) {
|
||||||
|
case DesktopLocation:
|
||||||
|
path = QDir::homePath() + QLatin1String("/Desktop");
|
||||||
|
break;
|
||||||
|
case DocumentsLocation:
|
||||||
|
path = QDir::homePath() + QLatin1String("/Documents");
|
||||||
|
break;
|
||||||
|
case PicturesLocation:
|
||||||
|
path = QDir::homePath() + QLatin1String("/Pictures");
|
||||||
|
break;
|
||||||
|
|
||||||
|
case FontsLocation:
|
||||||
|
path = QDir::homePath() + QLatin1String("/.fonts");
|
||||||
|
break;
|
||||||
|
|
||||||
|
case MusicLocation:
|
||||||
|
path = QDir::homePath() + QLatin1String("/Music");
|
||||||
|
break;
|
||||||
|
|
||||||
|
case MoviesLocation:
|
||||||
|
path = QDir::homePath() + QLatin1String("/Videos");
|
||||||
|
break;
|
||||||
|
|
||||||
|
case ApplicationsLocation:
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return path;
|
||||||
|
}
|
||||||
|
|
||||||
|
QString QStandardPaths::displayName(StandardLocation type)
|
||||||
|
{
|
||||||
|
Q_UNUSED(type);
|
||||||
|
return QString();
|
||||||
|
}
|
||||||
|
|
||||||
|
QT_END_NAMESPACE
|
||||||
|
|
||||||
|
#endif // QT_NO_STANDARDPATHS
|
167
src/corelib/io/qstandardpaths_win.cpp
Normal file
167
src/corelib/io/qstandardpaths_win.cpp
Normal file
@ -0,0 +1,167 @@
|
|||||||
|
/****************************************************************************
|
||||||
|
**
|
||||||
|
** 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$
|
||||||
|
**
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
#include "qstandardpaths.h"
|
||||||
|
|
||||||
|
#include <qsettings.h>
|
||||||
|
#include <qdir.h>
|
||||||
|
#include <private/qsystemlibrary_p.h>
|
||||||
|
#include <qurl.h>
|
||||||
|
#include <qstringlist.h>
|
||||||
|
#include <qprocess.h>
|
||||||
|
#include <qtemporaryfile.h>
|
||||||
|
#include <qcoreapplication.h>
|
||||||
|
|
||||||
|
#include <qt_windows.h>
|
||||||
|
#include <shlobj.h>
|
||||||
|
#if !defined(Q_OS_WINCE)
|
||||||
|
# include <intshcut.h>
|
||||||
|
#else
|
||||||
|
# include <qguifunctions_wince.h>
|
||||||
|
# if !defined(STANDARDSHELL_UI_MODEL)
|
||||||
|
# include <winx.h>
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef CSIDL_MYMUSIC
|
||||||
|
#define CSIDL_MYMUSIC 13
|
||||||
|
#define CSIDL_MYVIDEO 14
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef QT_NO_STANDARDPATHS
|
||||||
|
|
||||||
|
QT_BEGIN_NAMESPACE
|
||||||
|
|
||||||
|
QString QStandardPaths::storageLocation(StandardLocation type)
|
||||||
|
{
|
||||||
|
QString result;
|
||||||
|
|
||||||
|
#ifndef Q_OS_WINCE
|
||||||
|
QSystemLibrary library(QLatin1String("shell32"));
|
||||||
|
#else
|
||||||
|
QSystemLibrary library(QLatin1String("coredll"));
|
||||||
|
#endif // Q_OS_WINCE
|
||||||
|
typedef BOOL (WINAPI*GetSpecialFolderPath)(HWND, LPWSTR, int, BOOL);
|
||||||
|
static GetSpecialFolderPath SHGetSpecialFolderPath =
|
||||||
|
(GetSpecialFolderPath)library.resolve("SHGetSpecialFolderPathW");
|
||||||
|
if (!SHGetSpecialFolderPath)
|
||||||
|
return QString();
|
||||||
|
|
||||||
|
wchar_t path[MAX_PATH];
|
||||||
|
|
||||||
|
switch (type) {
|
||||||
|
case DataLocation:
|
||||||
|
#if defined Q_OS_WINCE
|
||||||
|
if (SHGetSpecialFolderPath(0, path, CSIDL_APPDATA, FALSE))
|
||||||
|
#else
|
||||||
|
if (SHGetSpecialFolderPath(0, path, CSIDL_LOCAL_APPDATA, FALSE))
|
||||||
|
#endif
|
||||||
|
result = QString::fromWCharArray(path);
|
||||||
|
if (!QCoreApplication::organizationName().isEmpty())
|
||||||
|
result = result + QLatin1String("\\") + QCoreApplication::organizationName();
|
||||||
|
if (!QCoreApplication::applicationName().isEmpty())
|
||||||
|
result = result + QLatin1String("\\") + QCoreApplication::applicationName();
|
||||||
|
break;
|
||||||
|
|
||||||
|
case DesktopLocation:
|
||||||
|
if (SHGetSpecialFolderPath(0, path, CSIDL_DESKTOPDIRECTORY, FALSE))
|
||||||
|
result = QString::fromWCharArray(path);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case DocumentsLocation:
|
||||||
|
if (SHGetSpecialFolderPath(0, path, CSIDL_PERSONAL, FALSE))
|
||||||
|
result = QString::fromWCharArray(path);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case FontsLocation:
|
||||||
|
if (SHGetSpecialFolderPath(0, path, CSIDL_FONTS, FALSE))
|
||||||
|
result = QString::fromWCharArray(path);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case ApplicationsLocation:
|
||||||
|
if (SHGetSpecialFolderPath(0, path, CSIDL_PROGRAMS, FALSE))
|
||||||
|
result = QString::fromWCharArray(path);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case MusicLocation:
|
||||||
|
if (SHGetSpecialFolderPath(0, path, CSIDL_MYMUSIC, FALSE))
|
||||||
|
result = QString::fromWCharArray(path);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case MoviesLocation:
|
||||||
|
if (SHGetSpecialFolderPath(0, path, CSIDL_MYVIDEO, FALSE))
|
||||||
|
result = QString::fromWCharArray(path);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case PicturesLocation:
|
||||||
|
if (SHGetSpecialFolderPath(0, path, CSIDL_MYPICTURES, FALSE))
|
||||||
|
result = QString::fromWCharArray(path);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case CacheLocation:
|
||||||
|
// Although Microsoft has a Cache key it is a pointer to IE's cache, not a cache
|
||||||
|
// location for everyone. Most applications seem to be using a
|
||||||
|
// cache directory located in their AppData directory
|
||||||
|
return storageLocation(DataLocation) + QLatin1String("\\cache");
|
||||||
|
|
||||||
|
case QStandardPaths::HomeLocation:
|
||||||
|
result = QDir::homePath();
|
||||||
|
break;
|
||||||
|
|
||||||
|
case QStandardPaths::TempLocation:
|
||||||
|
result = QDir::tempPath();
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
QString QStandardPaths::displayName(StandardLocation type)
|
||||||
|
{
|
||||||
|
Q_UNUSED(type);
|
||||||
|
return QString();
|
||||||
|
}
|
||||||
|
|
||||||
|
QT_END_NAMESPACE
|
||||||
|
|
||||||
|
#endif // QT_NO_STANDARDPATHS
|
@ -47,6 +47,7 @@
|
|||||||
|
|
||||||
#include "qdesktopservices_qpa.cpp"
|
#include "qdesktopservices_qpa.cpp"
|
||||||
|
|
||||||
|
#include <qstandardpaths.h>
|
||||||
#include <qhash.h>
|
#include <qhash.h>
|
||||||
#include <qobject.h>
|
#include <qobject.h>
|
||||||
#include <qcoreapplication.h>
|
#include <qcoreapplication.h>
|
||||||
@ -269,28 +270,21 @@ void QDesktopServices::unsetUrlHandler(const QString &scheme)
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
\fn QString QDesktopServices::storageLocation(StandardLocation type)
|
\deprecated Use QStandardPaths::storageLocation()
|
||||||
\since 4.4
|
|
||||||
|
|
||||||
Returns the default system directory where files of \a type belong, or an empty string
|
|
||||||
if the location cannot be determined.
|
|
||||||
|
|
||||||
\note The storage location returned can be a directory that does not exist; i.e., it
|
|
||||||
may need to be created by the system or the user.
|
|
||||||
|
|
||||||
\note On Symbian OS, ApplicationsLocation always point /sys/bin folder on the same drive
|
|
||||||
with executable. FontsLocation always points to folder on ROM drive. Symbian OS does not
|
|
||||||
have desktop concept, DesktopLocation returns same path as DocumentsLocation.
|
|
||||||
Rest of the standard locations point to folder on same drive with executable, except
|
|
||||||
that if executable is in ROM the folder from C drive is returned.
|
|
||||||
*/
|
*/
|
||||||
|
QString QDesktopServices::storageLocation(StandardLocation type)
|
||||||
|
{
|
||||||
|
return QStandardPaths::storageLocation(static_cast<QStandardPaths::StandardLocation>(type));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
\fn QString QDesktopServices::displayName(StandardLocation type)
|
\deprecated Use QStandardPaths::displayName()
|
||||||
|
|
||||||
Returns a localized display name for the given location \a type or
|
|
||||||
an empty QString if no relevant location can be found.
|
|
||||||
*/
|
*/
|
||||||
|
QString QDesktopServices::displayName(StandardLocation type)
|
||||||
|
{
|
||||||
|
return QStandardPaths::displayName(static_cast<QStandardPaths::StandardLocation>(type));
|
||||||
|
}
|
||||||
|
|
||||||
QT_END_NAMESPACE
|
QT_END_NAMESPACE
|
||||||
|
|
||||||
|
@ -45,7 +45,6 @@
|
|||||||
#include <qstringlist.h>
|
#include <qstringlist.h>
|
||||||
#include <qdir.h>
|
#include <qdir.h>
|
||||||
#include <qurl.h>
|
#include <qurl.h>
|
||||||
#include <qstringlist.h>
|
|
||||||
#include <private/qcore_mac_p.h>
|
#include <private/qcore_mac_p.h>
|
||||||
#include <qcoreapplication.h>
|
#include <qcoreapplication.h>
|
||||||
|
|
||||||
@ -123,66 +122,6 @@ static bool openDocument(const QUrl &file)
|
|||||||
return QProcess::startDetached(QLatin1String("open"), QStringList() << file.toLocalFile());
|
return QProcess::startDetached(QLatin1String("open"), QStringList() << file.toLocalFile());
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
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 QDesktopServices::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 QDesktopServices::displayName(StandardLocation type)
|
|
||||||
{
|
|
||||||
if (QDesktopServices::HomeLocation == type)
|
|
||||||
return QObject::tr("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
|
QT_END_NAMESPACE
|
||||||
|
|
||||||
#endif // QT_NO_DESKTOPSERVICES
|
#endif // QT_NO_DESKTOPSERVICES
|
||||||
|
@ -39,8 +39,7 @@
|
|||||||
**
|
**
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
#include <qcoreapplication.h>
|
#include <qdebug.h>
|
||||||
#include <qdir.h>
|
|
||||||
#include <qurl.h>
|
#include <qurl.h>
|
||||||
|
|
||||||
QT_BEGIN_NAMESPACE
|
QT_BEGIN_NAMESPACE
|
||||||
@ -59,36 +58,4 @@ static bool openDocument(const QUrl &file)
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
QString QDesktopServices::storageLocation(StandardLocation type)
|
|
||||||
{
|
|
||||||
if (type == DataLocation) {
|
|
||||||
QString qwsDataHome = QLatin1String(qgetenv("QWS_DATA_HOME"));
|
|
||||||
if (qwsDataHome.isEmpty())
|
|
||||||
qwsDataHome = QDir::homePath() + QLatin1String("/.qws/share");
|
|
||||||
qwsDataHome += QLatin1String("/data/")
|
|
||||||
+ QCoreApplication::organizationName() + QLatin1Char('/')
|
|
||||||
+ QCoreApplication::applicationName();
|
|
||||||
return qwsDataHome;
|
|
||||||
}
|
|
||||||
if (type == QDesktopServices::CacheLocation) {
|
|
||||||
QString qwsCacheHome = QLatin1String(qgetenv("QWS_CACHE_HOME"));
|
|
||||||
if (qwsCacheHome.isEmpty())
|
|
||||||
qwsCacheHome = QDir::homePath() + QLatin1String("/.qws/cache/");
|
|
||||||
qwsCacheHome += QCoreApplication::organizationName() + QLatin1Char('/')
|
|
||||||
+ QCoreApplication::applicationName();
|
|
||||||
return qwsCacheHome;
|
|
||||||
}
|
|
||||||
|
|
||||||
qWarning("QDesktopServices::storageLocation %d not implemented", type);
|
|
||||||
return QString();
|
|
||||||
}
|
|
||||||
|
|
||||||
QString QDesktopServices::displayName(StandardLocation type)
|
|
||||||
{
|
|
||||||
Q_UNUSED(type);
|
|
||||||
qWarning("QDesktopServices::displayName not implemented");
|
|
||||||
return QString();
|
|
||||||
}
|
|
||||||
|
|
||||||
QT_END_NAMESPACE
|
QT_END_NAMESPACE
|
||||||
|
@ -327,130 +327,5 @@ static bool openDocument(const QUrl &file)
|
|||||||
|
|
||||||
#endif //USE_SCHEMEHANDLER
|
#endif //USE_SCHEMEHANDLER
|
||||||
|
|
||||||
// Common functions to all implementations
|
|
||||||
|
|
||||||
static TDriveUnit exeDrive()
|
|
||||||
{
|
|
||||||
RProcess me;
|
|
||||||
TFileName processFileName = me.FileName();
|
|
||||||
TDriveUnit drive(processFileName);
|
|
||||||
return drive;
|
|
||||||
}
|
|
||||||
|
|
||||||
static TDriveUnit writableExeDrive()
|
|
||||||
{
|
|
||||||
TDriveUnit drive = exeDrive();
|
|
||||||
if (drive.operator TInt() == EDriveZ)
|
|
||||||
return TDriveUnit(EDriveC);
|
|
||||||
return drive;
|
|
||||||
}
|
|
||||||
|
|
||||||
static TPtrC writableDataRoot()
|
|
||||||
{
|
|
||||||
TDriveUnit drive = exeDrive();
|
|
||||||
switch (drive.operator TInt()){
|
|
||||||
case EDriveC:
|
|
||||||
return PathInfo::PhoneMemoryRootPath();
|
|
||||||
break;
|
|
||||||
case EDriveE:
|
|
||||||
return PathInfo::MemoryCardRootPath();
|
|
||||||
break;
|
|
||||||
case EDriveZ:
|
|
||||||
// It is not possible to write on ROM drive ->
|
|
||||||
// return phone mem root path instead
|
|
||||||
return PathInfo::PhoneMemoryRootPath();
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
return PathInfo::PhoneMemoryRootPath();
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
QString QDesktopServices::storageLocation(StandardLocation type)
|
|
||||||
{
|
|
||||||
TFileName path;
|
|
||||||
|
|
||||||
switch (type) {
|
|
||||||
case DesktopLocation:
|
|
||||||
qWarning("No desktop concept in Symbian OS");
|
|
||||||
// But lets still use some feasible default
|
|
||||||
path.Append(writableDataRoot());
|
|
||||||
break;
|
|
||||||
case DocumentsLocation:
|
|
||||||
path.Append(writableDataRoot());
|
|
||||||
break;
|
|
||||||
case FontsLocation:
|
|
||||||
path.Append(KFontsDir);
|
|
||||||
break;
|
|
||||||
case ApplicationsLocation:
|
|
||||||
path.Append(exeDrive().Name());
|
|
||||||
path.Append(KSysBin);
|
|
||||||
break;
|
|
||||||
case MusicLocation:
|
|
||||||
path.Append(writableDataRoot());
|
|
||||||
path.Append(PathInfo::SoundsPath());
|
|
||||||
break;
|
|
||||||
case MoviesLocation:
|
|
||||||
path.Append(writableDataRoot());
|
|
||||||
path.Append(PathInfo::VideosPath());
|
|
||||||
break;
|
|
||||||
case PicturesLocation:
|
|
||||||
path.Append(writableDataRoot());
|
|
||||||
path.Append(PathInfo::ImagesPath());
|
|
||||||
break;
|
|
||||||
case TempLocation:
|
|
||||||
return QDir::tempPath();
|
|
||||||
break;
|
|
||||||
case HomeLocation:
|
|
||||||
path.Append(writableDataRoot());
|
|
||||||
//return QDir::homePath(); break;
|
|
||||||
break;
|
|
||||||
case DataLocation:
|
|
||||||
qt_s60GetRFs().PrivatePath(path);
|
|
||||||
path.Insert(0, writableExeDrive().Name());
|
|
||||||
break;
|
|
||||||
case CacheLocation:
|
|
||||||
qt_s60GetRFs().PrivatePath(path);
|
|
||||||
path.Insert(0, writableExeDrive().Name());
|
|
||||||
path.Append(KCacheSubDir);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
// Lets use feasible default
|
|
||||||
path.Append(writableDataRoot());
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Convert to cross-platform format and clean the path
|
|
||||||
QString nativePath = QString::fromUtf16(path.Ptr(), path.Length());
|
|
||||||
QString qtPath = QDir::fromNativeSeparators(nativePath);
|
|
||||||
qtPath = QDir::cleanPath(qtPath);
|
|
||||||
|
|
||||||
// Note: The storage location returned can be a directory that does not exist;
|
|
||||||
// i.e., it may need to be created by the system or the user.
|
|
||||||
return qtPath;
|
|
||||||
}
|
|
||||||
|
|
||||||
typedef QString (*LocalizerFunc)(QString&);
|
|
||||||
|
|
||||||
static QString defaultLocalizedDirectoryName(QString&)
|
|
||||||
{
|
|
||||||
return QString();
|
|
||||||
}
|
|
||||||
|
|
||||||
QString QDesktopServices::displayName(StandardLocation type)
|
|
||||||
{
|
|
||||||
static LocalizerFunc ptrLocalizerFunc = NULL;
|
|
||||||
|
|
||||||
if (!ptrLocalizerFunc) {
|
|
||||||
ptrLocalizerFunc = reinterpret_cast<LocalizerFunc>
|
|
||||||
(qt_resolveS60PluginFunc(S60Plugin_LocalizedDirectoryName));
|
|
||||||
if (!ptrLocalizerFunc)
|
|
||||||
ptrLocalizerFunc = &defaultLocalizedDirectoryName;
|
|
||||||
}
|
|
||||||
|
|
||||||
QString rawPath = storageLocation(type);
|
|
||||||
return ptrLocalizerFunc(rawPath);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
QT_END_NAMESPACE
|
QT_END_NAMESPACE
|
||||||
|
@ -172,92 +172,6 @@ static bool launchWebBrowser(const QUrl &url)
|
|||||||
return (returnValue > 32);
|
return (returnValue > 32);
|
||||||
}
|
}
|
||||||
|
|
||||||
QString QDesktopServices::storageLocation(StandardLocation type)
|
|
||||||
{
|
|
||||||
QString result;
|
|
||||||
|
|
||||||
#ifndef Q_OS_WINCE
|
|
||||||
QSystemLibrary library(QLatin1String("shell32"));
|
|
||||||
#else
|
|
||||||
QSystemLibrary library(QLatin1String("coredll"));
|
|
||||||
#endif // Q_OS_WINCE
|
|
||||||
typedef BOOL (WINAPI*GetSpecialFolderPath)(HWND, LPWSTR, int, BOOL);
|
|
||||||
static GetSpecialFolderPath SHGetSpecialFolderPath =
|
|
||||||
(GetSpecialFolderPath)library.resolve("SHGetSpecialFolderPathW");
|
|
||||||
if (!SHGetSpecialFolderPath)
|
|
||||||
return QString();
|
|
||||||
|
|
||||||
wchar_t path[MAX_PATH];
|
|
||||||
|
|
||||||
switch (type) {
|
|
||||||
case DataLocation:
|
|
||||||
if (SHGetSpecialFolderPath(0, path, CSIDL_LOCAL_APPDATA, FALSE))
|
|
||||||
result = QString::fromWCharArray(path);
|
|
||||||
if (!QCoreApplication::organizationName().isEmpty())
|
|
||||||
result = result + QLatin1String("\\") + QCoreApplication::organizationName();
|
|
||||||
if (!QCoreApplication::applicationName().isEmpty())
|
|
||||||
result = result + QLatin1String("\\") + QCoreApplication::applicationName();
|
|
||||||
break;
|
|
||||||
|
|
||||||
case DesktopLocation:
|
|
||||||
if (SHGetSpecialFolderPath(0, path, CSIDL_DESKTOPDIRECTORY, FALSE))
|
|
||||||
result = QString::fromWCharArray(path);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case DocumentsLocation:
|
|
||||||
if (SHGetSpecialFolderPath(0, path, CSIDL_PERSONAL, FALSE))
|
|
||||||
result = QString::fromWCharArray(path);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case FontsLocation:
|
|
||||||
if (SHGetSpecialFolderPath(0, path, CSIDL_FONTS, FALSE))
|
|
||||||
result = QString::fromWCharArray(path);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case ApplicationsLocation:
|
|
||||||
if (SHGetSpecialFolderPath(0, path, CSIDL_PROGRAMS, FALSE))
|
|
||||||
result = QString::fromWCharArray(path);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case MusicLocation:
|
|
||||||
if (SHGetSpecialFolderPath(0, path, CSIDL_MYMUSIC, FALSE))
|
|
||||||
result = QString::fromWCharArray(path);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case MoviesLocation:
|
|
||||||
if (SHGetSpecialFolderPath(0, path, CSIDL_MYVIDEO, FALSE))
|
|
||||||
result = QString::fromWCharArray(path);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case PicturesLocation:
|
|
||||||
if (SHGetSpecialFolderPath(0, path, CSIDL_MYPICTURES, FALSE))
|
|
||||||
result = QString::fromWCharArray(path);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case CacheLocation:
|
|
||||||
// Although Microsoft has a Cache key it is a pointer to IE's cache, not a cache
|
|
||||||
// location for everyone. Most applications seem to be using a
|
|
||||||
// cache directory located in their AppData directory
|
|
||||||
return storageLocation(DataLocation) + QLatin1String("\\cache");
|
|
||||||
|
|
||||||
case QDesktopServices::HomeLocation:
|
|
||||||
return QDir::homePath(); break;
|
|
||||||
|
|
||||||
case QDesktopServices::TempLocation:
|
|
||||||
return QDir::tempPath(); break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
QString QDesktopServices::displayName(StandardLocation type)
|
|
||||||
{
|
|
||||||
Q_UNUSED(type);
|
|
||||||
return QString();
|
|
||||||
}
|
|
||||||
|
|
||||||
QT_END_NAMESPACE
|
QT_END_NAMESPACE
|
||||||
|
|
||||||
#endif // QT_NO_DESKTOPSERVICES
|
#endif // QT_NO_DESKTOPSERVICES
|
||||||
|
@ -126,117 +126,6 @@ static bool launchWebBrowser(const QUrl &url)
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
QString QDesktopServices::storageLocation(StandardLocation type)
|
|
||||||
{
|
|
||||||
if (type == QDesktopServices::HomeLocation)
|
|
||||||
return QDir::homePath();
|
|
||||||
if (type == QDesktopServices::TempLocation)
|
|
||||||
return QDir::tempPath();
|
|
||||||
|
|
||||||
// http://standards.freedesktop.org/basedir-spec/basedir-spec-0.6.html
|
|
||||||
if (type == QDesktopServices::CacheLocation) {
|
|
||||||
QString xdgCacheHome = QLatin1String(qgetenv("XDG_CACHE_HOME"));
|
|
||||||
if (xdgCacheHome.isEmpty())
|
|
||||||
xdgCacheHome = QDir::homePath() + QLatin1String("/.cache");
|
|
||||||
xdgCacheHome += QLatin1Char('/') + QCoreApplication::organizationName()
|
|
||||||
+ QLatin1Char('/') + QCoreApplication::applicationName();
|
|
||||||
return xdgCacheHome;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (type == QDesktopServices::DataLocation) {
|
|
||||||
QString xdgDataHome = QLatin1String(qgetenv("XDG_DATA_HOME"));
|
|
||||||
if (xdgDataHome.isEmpty())
|
|
||||||
xdgDataHome = QDir::homePath() + QLatin1String("/.local/share");
|
|
||||||
xdgDataHome += QLatin1String("/data/")
|
|
||||||
+ QCoreApplication::organizationName() + QLatin1Char('/')
|
|
||||||
+ QCoreApplication::applicationName();
|
|
||||||
return xdgDataHome;
|
|
||||||
}
|
|
||||||
|
|
||||||
// http://www.freedesktop.org/wiki/Software/xdg-user-dirs
|
|
||||||
QString xdgConfigHome = QLatin1String(qgetenv("XDG_CONFIG_HOME"));
|
|
||||||
if (xdgConfigHome.isEmpty())
|
|
||||||
xdgConfigHome = QDir::homePath() + QLatin1String("/.config");
|
|
||||||
QFile file(xdgConfigHome + QLatin1String("/user-dirs.dirs"));
|
|
||||||
if (file.exists() && file.open(QIODevice::ReadOnly)) {
|
|
||||||
QHash<QString, QString> lines;
|
|
||||||
QTextStream stream(&file);
|
|
||||||
// Only look for lines like: XDG_DESKTOP_DIR="$HOME/Desktop"
|
|
||||||
QRegExp exp(QLatin1String("^XDG_(.*)_DIR=(.*)$"));
|
|
||||||
while (!stream.atEnd()) {
|
|
||||||
QString line = stream.readLine();
|
|
||||||
if (exp.indexIn(line) != -1) {
|
|
||||||
QStringList lst = exp.capturedTexts();
|
|
||||||
QString key = lst.at(1);
|
|
||||||
QString value = lst.at(2);
|
|
||||||
if (value.length() > 2
|
|
||||||
&& value.startsWith(QLatin1Char('\"'))
|
|
||||||
&& value.endsWith(QLatin1Char('\"')))
|
|
||||||
value = value.mid(1, value.length() - 2);
|
|
||||||
// Store the key and value: "DESKTOP", "$HOME/Desktop"
|
|
||||||
lines[key] = value;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
QString key;
|
|
||||||
switch (type) {
|
|
||||||
case DesktopLocation: key = QLatin1String("DESKTOP"); break;
|
|
||||||
case DocumentsLocation: key = QLatin1String("DOCUMENTS"); break;
|
|
||||||
case PicturesLocation: key = QLatin1String("PICTURES"); break;
|
|
||||||
case MusicLocation: key = QLatin1String("MUSIC"); break;
|
|
||||||
case MoviesLocation: key = QLatin1String("VIDEOS"); break;
|
|
||||||
default: break;
|
|
||||||
}
|
|
||||||
if (!key.isEmpty() && lines.contains(key)) {
|
|
||||||
QString value = lines[key];
|
|
||||||
// value can start with $HOME
|
|
||||||
if (value.startsWith(QLatin1String("$HOME")))
|
|
||||||
value = QDir::homePath() + value.mid(5);
|
|
||||||
return value;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
QDir emptyDir;
|
|
||||||
QString path;
|
|
||||||
switch (type) {
|
|
||||||
case DesktopLocation:
|
|
||||||
path = QDir::homePath() + QLatin1String("/Desktop");
|
|
||||||
break;
|
|
||||||
case DocumentsLocation:
|
|
||||||
path = QDir::homePath() + QLatin1String("/Documents");
|
|
||||||
break;
|
|
||||||
case PicturesLocation:
|
|
||||||
path = QDir::homePath() + QLatin1String("/Pictures");
|
|
||||||
break;
|
|
||||||
|
|
||||||
case FontsLocation:
|
|
||||||
path = QDir::homePath() + QLatin1String("/.fonts");
|
|
||||||
break;
|
|
||||||
|
|
||||||
case MusicLocation:
|
|
||||||
path = QDir::homePath() + QLatin1String("/Music");
|
|
||||||
break;
|
|
||||||
|
|
||||||
case MoviesLocation:
|
|
||||||
path = QDir::homePath() + QLatin1String("/Videos");
|
|
||||||
break;
|
|
||||||
|
|
||||||
case ApplicationsLocation:
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
return path;
|
|
||||||
}
|
|
||||||
|
|
||||||
QString QDesktopServices::displayName(StandardLocation type)
|
|
||||||
{
|
|
||||||
Q_UNUSED(type);
|
|
||||||
return QString();
|
|
||||||
}
|
|
||||||
|
|
||||||
QT_END_NAMESPACE
|
QT_END_NAMESPACE
|
||||||
|
|
||||||
#endif // QT_NO_DESKTOPSERVICES
|
#endif // QT_NO_DESKTOPSERVICES
|
||||||
|
Loading…
x
Reference in New Issue
Block a user