diff options
Diffstat (limited to 'src/gui/image/qicon.cpp')
-rw-r--r-- | src/gui/image/qicon.cpp | 18 |
1 files changed, 11 insertions, 7 deletions
diff --git a/src/gui/image/qicon.cpp b/src/gui/image/qicon.cpp index 38e66b1dc0..3fc1bd3b13 100644 --- a/src/gui/image/qicon.cpp +++ b/src/gui/image/qicon.cpp @@ -192,7 +192,7 @@ static QPixmapIconEngineEntry *bestSizeScaleMatch(const QSize &size, qreal scale QPixmapIconEngineEntry *QPixmapIconEngine::tryMatch(const QSize &size, qreal scale, QIcon::Mode mode, QIcon::State state) { QPixmapIconEngineEntry *pe = nullptr; - for (int i = 0; i < pixmaps.count(); ++i) + for (int i = 0; i < pixmaps.size(); ++i) if (pixmaps.at(i).mode == mode && pixmaps.at(i).state == state) { if (pe) pe = bestSizeScaleMatch(size, scale, &pixmaps[i], pe); @@ -269,7 +269,7 @@ QPixmap QPixmapIconEngine::scaledPixmap(const QSize &size, QIcon::Mode mode, QIc pm = pe->pixmap; if (pm.isNull()) { - int idx = pixmaps.count(); + int idx = pixmaps.size(); while (--idx >= 0) { if (pe == &pixmaps.at(idx)) { pixmaps.remove(idx); @@ -451,7 +451,7 @@ void QPixmapIconEngine::addFile(const QString &fileName, const QSize &size, QIco } } } - for (const QImage &i : qAsConst(icoImages)) + for (const QImage &i : std::as_const(icoImages)) pixmaps += QPixmapIconEngineEntry(abs, i, mode, state); if (icoImages.isEmpty() && !ignoreSize) // Add placeholder with the filename and empty pixmap for the size. pixmaps += QPixmapIconEngineEntry(abs, size, mode, state); @@ -1276,11 +1276,15 @@ void QIcon::setFallbackThemeName(const QString &name) */ QIcon QIcon::fromTheme(const QString &name) { - QIcon icon; - if (qtIconCache()->contains(name)) { - icon = *qtIconCache()->object(name); - } else if (QDir::isAbsolutePath(name)) { + if (QIcon *cachedIcon = qtIconCache()->object(name)) { + if (!cachedIcon->isNull()) + return *cachedIcon; + qtIconCache()->remove(name); + } + + QIcon icon; + if (QDir::isAbsolutePath(name)) { return QIcon(name); } else { QPlatformTheme * const platformTheme = QGuiApplicationPrivate::platformTheme(); |