From c2efa3e48e8de13e4fd5d35bd1a3ae961b8ec9c7 Mon Sep 17 00:00:00 2001 From: Jan Grulich Date: Mon, 15 May 2023 13:11:58 +0200 Subject: [PATCH] KIconTheme: allow to also fallback to Breeze-dark when set through QPA KIconTheme always fallbacks to Breeze icon theme in order to make sure KDE apps are not missing icons on other desktops, like GNOME. Problem is that we always fallback to the light variant of Breeze, which will have icons that are barely visible when applications are using dark theme. This change checks fallback icon theme set through QPlatformTheme, like QGnomePlatform which can fallback to correct Breeze variant depending on the used system theme. --- src/kicontheme.cpp | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/src/kicontheme.cpp b/src/kicontheme.cpp index bf3e2b64..c05094b8 100644 --- a/src/kicontheme.cpp +++ b/src/kicontheme.cpp @@ -26,6 +26,9 @@ #include #include +#include +#include + #include #include @@ -60,13 +63,25 @@ void initRCCIconTheme() } Q_COREAPP_STARTUP_FUNCTION(initRCCIconTheme) -// Set the icon theme fallback to breeze +// Set the icon theme fallback to breeze and/or to breeze-dark +// in case it has been set as system fallback icon theme. // Most of our apps use "lots" of icons that most of the times // are only available with breeze, we still honour the user icon // theme but if the icon is not found there, we go to breeze // since it's almost sure it'll be there static void setBreezeFallback() { + if (const QPlatformTheme *theme = QGuiApplicationPrivate::platformTheme()) { + const QVariant themeHint = theme->themeHint(QPlatformTheme::SystemIconFallbackThemeName); + if (themeHint.isValid()) { + const QString theme = themeHint.toString(); + if (theme.toLower().contains("breeze")) { + QIcon::setFallbackThemeName(theme); + return; + } + } + } + QIcon::setFallbackThemeName(QStringLiteral("breeze")); } -- GitLab