OSDN Git Service

reimplement QDesktopService via QStandardPaths
authorIvailo Monev <xakepa10@laimg.moc>
Sun, 21 Jun 2020 18:35:05 +0000 (18:35 +0000)
committerIvailo Monev <xakepa10@laimg.moc>
Sun, 21 Jun 2020 18:35:05 +0000 (18:35 +0000)
Signed-off-by: Ivailo Monev <xakepa10@laimg.moc>
src/gui/CMakeLists.txt
src/gui/util/qdesktopservices.cpp
src/gui/util/qdesktopservices_x11.cpp [deleted file]

index 65562ca..449f28d 100644 (file)
@@ -870,7 +870,6 @@ set(GUI_SOURCES
     ${CMAKE_CURRENT_SOURCE_DIR}/util/qundostack.cpp
     ${CMAKE_CURRENT_SOURCE_DIR}/util/qundoview.cpp
     ${CMAKE_CURRENT_SOURCE_DIR}/util/qsystemtrayicon_x11.cpp
-    ${CMAKE_CURRENT_SOURCE_DIR}/util/qdesktopservices_x11.cpp
     ${CMAKE_CURRENT_SOURCE_DIR}/widgets/qabstractbutton.cpp
     ${CMAKE_CURRENT_SOURCE_DIR}/widgets/qabstractslider.cpp
     ${CMAKE_CURRENT_SOURCE_DIR}/widgets/qabstractspinbox.cpp
index 9551d6f..ef4dc3f 100644 (file)
@@ -42,6 +42,7 @@
 #include "qurl.h"
 #include "qmutex.h"
 #include "qprocess.h"
+#include "qstandardpaths.h"
 
 QT_BEGIN_NAMESPACE
 
@@ -289,7 +290,6 @@ void QDesktopServices::unsetUrlHandler(const QString &scheme)
 */
 
 /*!
-    \fn QString QDesktopServices::storageLocation(StandardLocation type)
     \since 4.4
 
     Returns the default system directory where files of \a type belong, or an empty string
@@ -304,13 +304,19 @@ void QDesktopServices::unsetUrlHandler(const QString &scheme)
     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::writableLocation(static_cast<QStandardPaths::StandardLocation>(type));
+}
 
 /*!
-    \fn QString QDesktopServices::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.
 */
+QString QDesktopServices::displayName(StandardLocation type)
+{
+    return QStandardPaths::displayName(static_cast<QStandardPaths::StandardLocation>(type));
+}
 
 QT_END_NAMESPACE
 
diff --git a/src/gui/util/qdesktopservices_x11.cpp b/src/gui/util/qdesktopservices_x11.cpp
deleted file mode 100644 (file)
index 1b7c516..0000000
+++ /dev/null
@@ -1,158 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2015 The Qt Company Ltd.
-** Copyright (C) 2016-2020 Ivailo Monev
-**
-** This file is part of the QtGui module of the Katie 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.
-**
-** As a special exception, The Qt Company gives you certain additional
-** rights. These rights are described in The Qt Company 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.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "qdesktopservices.h"
-
-#ifndef QT_NO_DESKTOPSERVICES
-
-#include "qdir.h"
-#include "qfile.h"
-#include "qtextstream.h"
-#include "qcoreapplication.h"
-
-#include <stdlib.h>
-
-QT_BEGIN_NAMESPACE
-
-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
-
-#endif // QT_NO_DESKTOPSERVICES