diff --git a/src/gui/image/qabstractfileiconprovider.cpp b/src/gui/image/qabstractfileiconprovider.cpp index 71b6a0b03d2..78777ec115a 100644 --- a/src/gui/image/qabstractfileiconprovider.cpp +++ b/src/gui/image/qabstractfileiconprovider.cpp @@ -39,6 +39,12 @@ QIcon QAbstractFileIconProviderPrivate::getPlatformThemeIcon(QAbstractFileIconPr if (theme == nullptr) return {}; + if (theme->themeHint(QPlatformTheme::PreferFileIconFromTheme).toBool()) { + const QIcon result = getIconThemeIcon(type); + if (!result.isNull()) + return result; + } + auto &cache = *iconTypeCache(); auto it = cache.find(type); if (it == cache.end()) { @@ -108,8 +114,14 @@ static inline QPlatformTheme::IconOptions toThemeIconOptions(QAbstractFileIconPr QIcon QAbstractFileIconProviderPrivate::getPlatformThemeIcon(const QFileInfo &info) const { - if (auto theme = QGuiApplicationPrivate::platformTheme()) + if (auto theme = QGuiApplicationPrivate::platformTheme()) { + if (theme->themeHint(QPlatformTheme::PreferFileIconFromTheme).toBool()) { + const QIcon result = getIconThemeIcon(info); + if (!result.isNull()) + return result; + } return theme->fileIcon(info, toThemeIconOptions(options)); + } return {}; } @@ -211,8 +223,7 @@ QAbstractFileIconProvider::Options QAbstractFileIconProvider::options() const QIcon QAbstractFileIconProvider::icon(IconType type) const { Q_D(const QAbstractFileIconProvider); - const QIcon result = d->getIconThemeIcon(type); - return result.isNull() ? d->getPlatformThemeIcon(type) : result; + return d->getPlatformThemeIcon(type); } /*! @@ -225,8 +236,7 @@ QIcon QAbstractFileIconProvider::icon(IconType type) const QIcon QAbstractFileIconProvider::icon(const QFileInfo &info) const { Q_D(const QAbstractFileIconProvider); - const QIcon result = d->getIconThemeIcon(info); - return result.isNull() ? d->getPlatformThemeIcon(info) : result; + return d->getPlatformThemeIcon(info); } diff --git a/src/gui/kernel/qplatformtheme.cpp b/src/gui/kernel/qplatformtheme.cpp index f298cadae6b..2f0a16fc29a 100644 --- a/src/gui/kernel/qplatformtheme.cpp +++ b/src/gui/kernel/qplatformtheme.cpp @@ -654,6 +654,8 @@ QVariant QPlatformTheme::defaultThemeHint(ThemeHint hint) return true; case ShowIconsInMenus: return true; + case PreferFileIconFromTheme: + return false; } return QVariant(); diff --git a/src/gui/kernel/qplatformtheme.h b/src/gui/kernel/qplatformtheme.h index 3ce094d85b3..6c671aff2fb 100644 --- a/src/gui/kernel/qplatformtheme.h +++ b/src/gui/kernel/qplatformtheme.h @@ -98,6 +98,7 @@ public: MouseCursorSize, UnderlineShortcut, ShowIconsInMenus, + PreferFileIconFromTheme, }; Q_ENUM(ThemeHint) diff --git a/src/gui/platform/unix/qgenericunixthemes.cpp b/src/gui/platform/unix/qgenericunixthemes.cpp index 8a7f7cd6f7a..90971ba94cd 100644 --- a/src/gui/platform/unix/qgenericunixthemes.cpp +++ b/src/gui/platform/unix/qgenericunixthemes.cpp @@ -503,6 +503,8 @@ QVariant QGenericUnixTheme::themeHint(ThemeHint hint) const return QVariant(mouseCursorTheme()); case QPlatformTheme::MouseCursorSize: return QVariant(mouseCursorSize()); + case QPlatformTheme::PreferFileIconFromTheme: + return true; default: break; } @@ -1108,6 +1110,8 @@ QVariant QKdeTheme::themeHint(QPlatformTheme::ThemeHint hint) const return QVariant(mouseCursorTheme()); case QPlatformTheme::MouseCursorSize: return QVariant(mouseCursorSize()); + case QPlatformTheme::PreferFileIconFromTheme: + return true; default: break; } @@ -1385,6 +1389,8 @@ QVariant QGnomeTheme::themeHint(QPlatformTheme::ThemeHint hint) const return QVariant(mouseCursorTheme()); case QPlatformTheme::MouseCursorSize: return QVariant(mouseCursorSize()); + case QPlatformTheme::PreferFileIconFromTheme: + return true; default: break; }