diff options
author | Friedemann Kleint <Friedemann.Kleint@qt.io> | 2016-07-25 11:25:46 +0200 |
---|---|---|
committer | Friedemann Kleint <Friedemann.Kleint@qt.io> | 2016-08-04 14:31:20 +0000 |
commit | 46ea82188e3678c5b7a2338d536da6c621822f2f (patch) | |
tree | dea9b304e916e852a8b1a2e5a986bf5e2d5ba932 /src | |
parent | 40bb2d29b92c28c662a94b77a8170567aba087ab (diff) |
Add XDG file icon support for UNIX themes
Add helper class XdgFileIconHelper using the icon theme engine
to implement QPlatformTheme::fileIconPixmap().
[ChangeLog][QtPlatformSupport] KDE/Gnome themes now implement
QPlatformTheme::fileIconPixmap(), showing file icons.
Change-Id: I32a948ece08305053ebadb3ace6cbc6fbd339946
Reviewed-by: David Faure <david.faure@kdab.com>
Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/platformsupport/themes/genericunix/qgenericunixthemes.cpp | 37 | ||||
-rw-r--r-- | src/platformsupport/themes/genericunix/qgenericunixthemes_p.h | 5 |
2 files changed, 42 insertions, 0 deletions
diff --git a/src/platformsupport/themes/genericunix/qgenericunixthemes.cpp b/src/platformsupport/themes/genericunix/qgenericunixthemes.cpp index 118b4988a5..a5001f6e80 100644 --- a/src/platformsupport/themes/genericunix/qgenericunixthemes.cpp +++ b/src/platformsupport/themes/genericunix/qgenericunixthemes.cpp @@ -50,6 +50,7 @@ #include <QtCore/QFile> #include <QtCore/QDebug> #include <QtCore/QHash> +#include <QtCore/QMimeDatabase> #include <QtCore/QLoggingCategory> #include <QtCore/QSettings> #include <QtCore/QVariant> @@ -231,6 +232,28 @@ QVariant QGenericUnixTheme::themeHint(ThemeHint hint) const return QPlatformTheme::themeHint(hint); } +// Helper functions for implementing QPlatformTheme::fileIcon() for XDG icon themes. +static QList<QSize> availableXdgFileIconSizes() +{ + return QIcon::fromTheme(QStringLiteral("inode-directory")).availableSizes(); +} + +static QIcon xdgFileIcon(const QFileInfo &fileInfo) +{ + QMimeDatabase mimeDatabase; + QMimeType mimeType = mimeDatabase.mimeTypeForFile(fileInfo); + if (!mimeType.isValid()) + return QIcon(); + const QString &iconName = mimeType.iconName(); + if (!iconName.isEmpty()) { + const QIcon icon = QIcon::fromTheme(iconName); + if (!icon.isNull()) + return icon; + } + const QString &genericIconName = mimeType.genericIconName(); + return genericIconName.isEmpty() ? QIcon() : QIcon::fromTheme(genericIconName); +} + #ifndef QT_NO_SETTINGS class QKdeThemePrivate : public QPlatformThemePrivate { @@ -506,6 +529,8 @@ QVariant QKdeTheme::themeHint(QPlatformTheme::ThemeHint hint) const return QVariant(d->iconFallbackThemeName); case QPlatformTheme::IconThemeSearchPaths: return QVariant(d->kdeIconThemeSearchPaths(d->kdeDirs)); + case QPlatformTheme::IconPixmapSizes: + return QVariant::fromValue(availableXdgFileIconSizes()); case QPlatformTheme::StyleNames: return QVariant(d->styleNames); case QPlatformTheme::KeyboardScheme: @@ -520,6 +545,11 @@ QVariant QKdeTheme::themeHint(QPlatformTheme::ThemeHint hint) const return QPlatformTheme::themeHint(hint); } +QIcon QKdeTheme::fileIcon(const QFileInfo &fileInfo, QPlatformTheme::IconOptions) const +{ + return xdgFileIcon(fileInfo); +} + const QPalette *QKdeTheme::palette(Palette type) const { Q_D(const QKdeTheme); @@ -657,6 +687,8 @@ QVariant QGnomeTheme::themeHint(QPlatformTheme::ThemeHint hint) const return QVariant(QStringLiteral("gnome")); case QPlatformTheme::IconThemeSearchPaths: return QVariant(QGenericUnixTheme::xdgIconThemePaths()); + case QPlatformTheme::IconPixmapSizes: + return QVariant::fromValue(availableXdgFileIconSizes()); case QPlatformTheme::StyleNames: { QStringList styleNames; styleNames << QStringLiteral("fusion") << QStringLiteral("windows"); @@ -674,6 +706,11 @@ QVariant QGnomeTheme::themeHint(QPlatformTheme::ThemeHint hint) const return QPlatformTheme::themeHint(hint); } +QIcon QGnomeTheme::fileIcon(const QFileInfo &fileInfo, QPlatformTheme::IconOptions) const +{ + return xdgFileIcon(fileInfo); +} + const QFont *QGnomeTheme::font(Font type) const { Q_D(const QGnomeTheme); diff --git a/src/platformsupport/themes/genericunix/qgenericunixthemes_p.h b/src/platformsupport/themes/genericunix/qgenericunixthemes_p.h index 952658e130..da13390662 100644 --- a/src/platformsupport/themes/genericunix/qgenericunixthemes_p.h +++ b/src/platformsupport/themes/genericunix/qgenericunixthemes_p.h @@ -107,6 +107,9 @@ public: static QPlatformTheme *createKdeTheme(); QVariant themeHint(ThemeHint hint) const Q_DECL_OVERRIDE; + QIcon fileIcon(const QFileInfo &fileInfo, + QPlatformTheme::IconOptions iconOptions = 0) const override; + const QPalette *palette(Palette type = SystemPalette) const Q_DECL_OVERRIDE; const QFont *font(Font type) const Q_DECL_OVERRIDE; @@ -129,6 +132,8 @@ class QGnomeTheme : public QPlatformTheme public: QGnomeTheme(); QVariant themeHint(ThemeHint hint) const Q_DECL_OVERRIDE; + QIcon fileIcon(const QFileInfo &fileInfo, + QPlatformTheme::IconOptions = 0) const override; const QFont *font(Font type) const Q_DECL_OVERRIDE; QString standardButtonText(int button) const Q_DECL_OVERRIDE; |