forked from qt-creator/qt-creator
FileIconProvider: Do some more caching ourselves
QFileIconProvider already does some pixmap caching, but only in some cases (non-executable, non-link). Since QFileIconProvider is expensive, we want as much caching as possible. It still should be investigated why it seems to be even more expensive on OS X 10.9 in some cases though. Task-number: QTCREATORBUG-10491 Change-Id: I5a0f995eafdced47dc6da869c72a1ca016b25f63 Reviewed-by: Daniel Teske <daniel.teske@digia.com>
This commit is contained in:
@@ -75,7 +75,7 @@ public:
|
|||||||
: m_unknownFileIcon(qApp->style()->standardIcon(QStyle::SP_FileIcon))
|
: m_unknownFileIcon(qApp->style()->standardIcon(QStyle::SP_FileIcon))
|
||||||
{}
|
{}
|
||||||
|
|
||||||
QIcon icon(const QFileInfo &info) const;
|
QIcon icon(const QFileInfo &info);
|
||||||
using QFileIconProvider::icon;
|
using QFileIconProvider::icon;
|
||||||
|
|
||||||
void registerIconOverlayForSuffix(const QIcon &icon, const QString &suffix)
|
void registerIconOverlayForSuffix(const QIcon &icon, const QString &suffix)
|
||||||
@@ -113,23 +113,26 @@ QFileIconProvider *iconProvider()
|
|||||||
return instance();
|
return instance();
|
||||||
}
|
}
|
||||||
|
|
||||||
QIcon FileIconProviderImplementation::icon(const QFileInfo &fileInfo) const
|
QIcon FileIconProviderImplementation::icon(const QFileInfo &fileInfo)
|
||||||
{
|
{
|
||||||
if (debug)
|
if (debug)
|
||||||
qDebug() << "FileIconProvider::icon" << fileInfo.absoluteFilePath();
|
qDebug() << "FileIconProvider::icon" << fileInfo.absoluteFilePath();
|
||||||
// Check for cached overlay icons by file suffix.
|
// Check for cached overlay icons by file suffix.
|
||||||
if (!m_cache.isEmpty() && !fileInfo.isDir()) {
|
bool isDir = fileInfo.isDir();
|
||||||
const QString suffix = fileInfo.suffix();
|
QString suffix = !isDir ? fileInfo.suffix() : QString();
|
||||||
if (!suffix.isEmpty() && m_cache.contains(suffix)) {
|
if (!m_cache.isEmpty() && !isDir && !suffix.isEmpty()) {
|
||||||
|
if (m_cache.contains(suffix))
|
||||||
return m_cache.value(suffix);
|
return m_cache.value(suffix);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
// Get icon from OS.
|
// Get icon from OS.
|
||||||
|
QIcon icon;
|
||||||
if (HostOsInfo::isWindowsHost() || HostOsInfo::isMacHost())
|
if (HostOsInfo::isWindowsHost() || HostOsInfo::isMacHost())
|
||||||
return QFileIconProvider::icon(fileInfo);
|
icon = QFileIconProvider::icon(fileInfo);
|
||||||
|
else // File icons are unknown on linux systems.
|
||||||
// File icons are unknown on linux systems.
|
icon = isDir ? QFileIconProvider::icon(fileInfo) : m_unknownFileIcon;
|
||||||
return fileInfo.isDir() ? QFileIconProvider::icon(fileInfo) : m_unknownFileIcon;
|
if (!isDir && !suffix.isEmpty())
|
||||||
|
m_cache.insert(suffix, icon);
|
||||||
|
return icon;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
|
|||||||
Reference in New Issue
Block a user