summaryrefslogtreecommitdiffstats
path: root/src/widgets/itemviews
diff options
context:
space:
mode:
Diffstat (limited to 'src/widgets/itemviews')
-rw-r--r--src/widgets/itemviews/qfileiconprovider.cpp23
1 files changed, 14 insertions, 9 deletions
diff --git a/src/widgets/itemviews/qfileiconprovider.cpp b/src/widgets/itemviews/qfileiconprovider.cpp
index 78ff5f79ab..5638e438d5 100644
--- a/src/widgets/itemviews/qfileiconprovider.cpp
+++ b/src/widgets/itemviews/qfileiconprovider.cpp
@@ -62,6 +62,14 @@ QT_BEGIN_NAMESPACE
static bool isCacheable(const QFileInfo &fi);
+static QPlatformTheme::IconOptions toThemeIconOptions(QFileIconProvider::Options options)
+{
+ QPlatformTheme::IconOptions result;
+ if (options & QFileIconProvider::DontUseCustomDirectoryIcons)
+ result |= QPlatformTheme::DontUseCustomDirectoryIcons;
+ return result;
+}
+
class QFileIconEngine : public QPixmapIconEngine
{
public:
@@ -91,11 +99,7 @@ public:
return pixmap;
}
- QPlatformTheme::IconOptions iconOptions;
- if (m_fipOpts & QFileIconProvider::DontUseCustomDirectoryIcons)
- iconOptions |= QPlatformTheme::DontUseCustomDirectoryIcons;
-
- pixmap = theme->fileIconPixmap(m_fileInfo, size, iconOptions);
+ pixmap = theme->fileIconPixmap(m_fileInfo, size, toThemeIconOptions(m_fipOpts));
if (!pixmap.isNull()) {
if (cacheable)
QPixmapCache::insert(keyBase + QString::number(size.width()), pixmap);
@@ -345,11 +349,12 @@ QIcon QFileIconProviderPrivate::getIcon(const QFileInfo &fi) const
if (!theme)
return QIcon();
- QList<int> sizes = theme->themeHint(QPlatformTheme::IconPixmapSizes).value<QList<int> >();
- if (sizes.isEmpty())
- return QIcon();
+ QIcon themeFileIcon = theme->fileIcon(fi, toThemeIconOptions(options));
+ if (!themeFileIcon.isNull())
+ return themeFileIcon;
- return QIcon(new QFileIconEngine(fi, options));
+ QList<int> sizes = theme->themeHint(QPlatformTheme::IconPixmapSizes).value<QList<int> >();
+ return sizes.isEmpty() ? QIcon() : QIcon(new QFileIconEngine(fi, options));
}
/*!