KIconTheme: allow to also fallback to breeze-dark when set through QPA

epel9
Jan Grulich 2 years ago
parent 91c8ecf8bd
commit 80f840985c

@ -2,7 +2,7 @@
Name: kf5-%{framework}
Version: 5.105.0
Release: 1%{?dist}
Release: 2%{?dist}
Summary: KDE Frameworks 5 Tier 3 integration module with icon themes
License: LGPLv2+ and GPLv2+
@ -13,6 +13,7 @@ URL: https://api.kde.org/frameworks/kiconthemes/
Source0: http://download.kde.org/%{stable}/frameworks/%{majmin}/%{framework}-%{version}.tar.xz
## upstream patches
Patch0: kicontheme-allow-to-also-fallback-to-breeze-dark-when-set-through-qpa.patch
## upstreamable patches
@ -81,6 +82,9 @@ developing applications that use %{name}.
%changelog
* Mon May 15 2023 Jan Grulich <jgrulich@redhat.com> - 5.105.0-2
- KIconTheme: allow to also fallback to breeze-dark when set through QPA
* Sun Apr 02 2023 Marc Deop i Argemí <marcdeop@fedoraproject.org> - 5.105.0-1
- 5.105.0

@ -0,0 +1,60 @@
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
Loading…
Cancel
Save