Try to apply the colorscheme of the current theme to QIcons
Summary: Before icons loaded internally with QIcon::fromTheme were being colored with the colors from the current global color scheme instead of the ones from the current Plasma Theme. Leading to visual bugs when the two differ. This happened because KIconLoader uses the global color scheme by default. A prominent case is the notification send by the network plasmoid when one successfully connected to a wireless network. It sets the icon "network-wireless-on" which is not included in Breeze icons (but is included in Breeze Plasma Theme). If the current icon theme is indeed Breeze, IconItem resorts to using QIcon::fromTheme and we end up with a wrong colored "network-wireless" icon. BUG: 417780 Test Plan: {F8125752} {F8125753} Reviewers: #plasma, cblack, ngraham, mart Reviewed By: #plasma, cblack, ngraham, mart Subscribers: mart, wbauer, cblack, kde-frameworks-devel Tags: #frameworks Differential Revision: https://phabricator.kde.org/D27589
This commit is contained in:
parent
a08449a9a2
commit
b7fa6e0e91
@ -22,6 +22,7 @@
|
|||||||
#include <QDebug>
|
#include <QDebug>
|
||||||
#include <QPaintEngine>
|
#include <QPaintEngine>
|
||||||
#include <QPainter>
|
#include <QPainter>
|
||||||
|
#include <QPalette>
|
||||||
#include <QPropertyAnimation>
|
#include <QPropertyAnimation>
|
||||||
#include <QPixmap>
|
#include <QPixmap>
|
||||||
#include <QSGSimpleTextureNode>
|
#include <QSGSimpleTextureNode>
|
||||||
@ -33,6 +34,7 @@
|
|||||||
|
|
||||||
#include "fadingnode_p.h"
|
#include "fadingnode_p.h"
|
||||||
#include <QuickAddons/ManagedTextureNode>
|
#include <QuickAddons/ManagedTextureNode>
|
||||||
|
#include "theme.h"
|
||||||
#include "units.h"
|
#include "units.h"
|
||||||
|
|
||||||
IconItem::IconItem(QQuickItem *parent)
|
IconItem::IconItem(QQuickItem *parent)
|
||||||
@ -595,7 +597,9 @@ void IconItem::loadPixmap()
|
|||||||
result = m_svgIcon->pixmap();
|
result = m_svgIcon->pixmap();
|
||||||
}
|
}
|
||||||
} else if (!m_icon.isNull()) {
|
} else if (!m_icon.isNull()) {
|
||||||
|
KIconLoader::global()->setCustomPalette(Plasma::Theme().palette());
|
||||||
result = m_icon.pixmap(QSize(size, size) * (window() ? window()->devicePixelRatio() : qApp->devicePixelRatio()));
|
result = m_icon.pixmap(QSize(size, size) * (window() ? window()->devicePixelRatio() : qApp->devicePixelRatio()));
|
||||||
|
KIconLoader::global()->resetPalette();
|
||||||
} else if (!m_imageIcon.isNull()) {
|
} else if (!m_imageIcon.isNull()) {
|
||||||
result = QPixmap::fromImage(m_imageIcon);
|
result = QPixmap::fromImage(m_imageIcon);
|
||||||
} else {
|
} else {
|
||||||
|
@ -400,6 +400,7 @@ void ThemePrivate::colorsChanged()
|
|||||||
buttonColorScheme = KColorScheme(QPalette::Active, KColorScheme::Button, colors);
|
buttonColorScheme = KColorScheme(QPalette::Active, KColorScheme::Button, colors);
|
||||||
viewColorScheme = KColorScheme(QPalette::Active, KColorScheme::View, colors);
|
viewColorScheme = KColorScheme(QPalette::Active, KColorScheme::View, colors);
|
||||||
selectionColorScheme = KColorScheme(QPalette::Active, KColorScheme::Selection, colors);
|
selectionColorScheme = KColorScheme(QPalette::Active, KColorScheme::Selection, colors);
|
||||||
|
palette = KColorScheme::createApplicationPalette(colors);
|
||||||
scheduleThemeChangeNotification(PixmapCache | SvgElementsCache);
|
scheduleThemeChangeNotification(PixmapCache | SvgElementsCache);
|
||||||
emit applicationPaletteChange();
|
emit applicationPaletteChange();
|
||||||
}
|
}
|
||||||
@ -802,6 +803,7 @@ void ThemePrivate::setThemeName(const QString &tempThemeName, bool writeSettings
|
|||||||
buttonColorScheme = KColorScheme(QPalette::Active, KColorScheme::Button, colors);
|
buttonColorScheme = KColorScheme(QPalette::Active, KColorScheme::Button, colors);
|
||||||
viewColorScheme = KColorScheme(QPalette::Active, KColorScheme::View, colors);
|
viewColorScheme = KColorScheme(QPalette::Active, KColorScheme::View, colors);
|
||||||
complementaryColorScheme = KColorScheme(QPalette::Active, KColorScheme::Complementary, colors);
|
complementaryColorScheme = KColorScheme(QPalette::Active, KColorScheme::Complementary, colors);
|
||||||
|
palette = KColorScheme::createApplicationPalette(colors);
|
||||||
const QString wallpaperPath = QLatin1String(PLASMA_RELATIVE_DATA_INSTALL_DIR "/desktoptheme/") % theme % QLatin1String("/wallpapers/");
|
const QString wallpaperPath = QLatin1String(PLASMA_RELATIVE_DATA_INSTALL_DIR "/desktoptheme/") % theme % QLatin1String("/wallpapers/");
|
||||||
hasWallpapers = !QStandardPaths::locate(QStandardPaths::GenericDataLocation, wallpaperPath, QStandardPaths::LocateDirectory).isEmpty();
|
hasWallpapers = !QStandardPaths::locate(QStandardPaths::GenericDataLocation, wallpaperPath, QStandardPaths::LocateDirectory).isEmpty();
|
||||||
|
|
||||||
|
@ -119,6 +119,7 @@ public:
|
|||||||
KColorScheme buttonColorScheme;
|
KColorScheme buttonColorScheme;
|
||||||
KColorScheme viewColorScheme;
|
KColorScheme viewColorScheme;
|
||||||
KColorScheme complementaryColorScheme;
|
KColorScheme complementaryColorScheme;
|
||||||
|
QPalette palette;
|
||||||
bool eventFilter(QObject *watched, QEvent *event) override;
|
bool eventFilter(QObject *watched, QEvent *event) override;
|
||||||
KConfigGroup cfg;
|
KConfigGroup cfg;
|
||||||
QString defaultWallpaperTheme;
|
QString defaultWallpaperTheme;
|
||||||
|
@ -194,6 +194,12 @@ QString Theme::styleSheet(const QString &css) const
|
|||||||
return d->processStyleSheet(css, Svg::Status::Normal);
|
return d->processStyleSheet(css, Svg::Status::Normal);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
QPalette Theme::palette() const
|
||||||
|
{
|
||||||
|
return d->palette;
|
||||||
|
}
|
||||||
|
|
||||||
QString Theme::wallpaperPath(const QSize &size) const
|
QString Theme::wallpaperPath(const QSize &size) const
|
||||||
{
|
{
|
||||||
QString fullPath;
|
QString fullPath;
|
||||||
|
@ -67,6 +67,8 @@ class PLASMA_EXPORT Theme : public QObject
|
|||||||
// stylesheet
|
// stylesheet
|
||||||
Q_PROPERTY(QString styleSheet READ styleSheet NOTIFY themeChanged)
|
Q_PROPERTY(QString styleSheet READ styleSheet NOTIFY themeChanged)
|
||||||
|
|
||||||
|
Q_PROPERTY(QPalette palette READ palette NOTIFY themeChanged)
|
||||||
|
|
||||||
public:
|
public:
|
||||||
enum ColorRole {
|
enum ColorRole {
|
||||||
TextColor = 0, /**< the text color to be used by items resting on the background */
|
TextColor = 0, /**< the text color to be used by items resting on the background */
|
||||||
@ -215,6 +217,12 @@ public:
|
|||||||
*/
|
*/
|
||||||
QString styleSheet(const QString &css = QString()) const;
|
QString styleSheet(const QString &css = QString()) const;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns a QPalette with the colors set as defined by the theme.
|
||||||
|
* @since 5.68
|
||||||
|
*/
|
||||||
|
QPalette palette() const;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This is an overloaded member provided to check with file timestamp
|
* This is an overloaded member provided to check with file timestamp
|
||||||
* where cache is still valid.
|
* where cache is still valid.
|
||||||
|
Loading…
Reference in New Issue
Block a user