You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
kf5-kiconthemes/kicontheme-allow-to-also-fa...

61 lines
2.1 KiB

From c2efa3e48e8de13e4fd5d35bd1a3ae961b8ec9c7 Mon Sep 17 00:00:00 2001
From: Jan Grulich <jgrulich@redhat.com>
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 <QResource>
#include <QSet>
+#include <private/qguiapplication_p.h>
+#include <qpa/qplatformtheme.h>
+
#include <qplatformdefs.h>
#include <array>
@@ -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