https://phabricator.kde.org/D2986 Systray: Move all icon resolution to dataengine diff --git a/applets/systemtray/package/contents/ui/ConfigEntries.qml b/applets/systemtray/package/contents/ui/ConfigEntries.qml --- a/applets/systemtray/package/contents/ui/ConfigEntries.qml +++ b/applets/systemtray/package/contents/ui/ConfigEntries.qml @@ -75,7 +75,7 @@ "index": i, "taskId": item.Id, "name": item.Title, - "iconName": plasmoid.nativeInterface.resolveIcon(item.IconName, item.IconThemePath), + "iconName": item.IconName, "icon": item.Icon }); } diff --git a/applets/systemtray/package/contents/ui/items/StatusNotifierItem.qml b/applets/systemtray/package/contents/ui/items/StatusNotifierItem.qml --- a/applets/systemtray/package/contents/ui/items/StatusNotifierItem.qml +++ b/applets/systemtray/package/contents/ui/items/StatusNotifierItem.qml @@ -28,7 +28,7 @@ text: Title mainText: ToolTipTitle != "" ? ToolTipTitle : Title subText: ToolTipSubTitle - icon: ToolTipIcon != "" ? ToolTipIcon : plasmoid.nativeInterface.resolveIcon(IconName != "" ? IconName : Icon, IconThemePath) + icon: ToolTipIcon != "" ? ToolTipIcon : Icon ? Icon : IconName textFormat: Text.AutoText category: Category @@ -48,7 +48,7 @@ PlasmaCore.IconItem { id: iconItem - source: plasmoid.nativeInterface.resolveIcon(IconName != "" ? IconName : Icon, IconThemePath) + source: Icon ? Icon : IconName width: Math.min(parent.width, parent.height) height: width active: taskIcon.containsMouse diff --git a/applets/systemtray/systemtray.h b/applets/systemtray/systemtray.h --- a/applets/systemtray/systemtray.h +++ b/applets/systemtray/systemtray.h @@ -60,12 +60,6 @@ //Invokable utilities /** - * returns either a simple icon name or a custom path if the app is - * using a custom theme - */ - Q_INVOKABLE QVariant resolveIcon(const QVariant &variant, const QString &iconThemePath); - - /** * Given an AppletInterface pointer, shows a proper context menu for it */ Q_INVOKABLE void showPlasmoidMenu(QQuickItem *appletInterface, int x, int y); diff --git a/applets/systemtray/systemtray.cpp b/applets/systemtray/systemtray.cpp --- a/applets/systemtray/systemtray.cpp +++ b/applets/systemtray/systemtray.cpp @@ -37,37 +37,11 @@ #include #include -#include -#include #include #include #include -/* - * An app may also load icons from their own directories, so we need a new iconloader that takes this into account - * This is wrapped into a subclass of iconengine so the iconloader lifespan matches the icon object - */ -class AppIconEngine : public KIconEngine -{ -public: - AppIconEngine(const QString &variant, const QString &path, const QString &appName); - ~AppIconEngine(); -private: - KIconLoader* m_loader; -}; - -AppIconEngine::AppIconEngine(const QString &variant, const QString &path, const QString &appName) : - KIconEngine(variant, m_loader = new KIconLoader(appName, QStringList())) -{ - m_loader->addAppDir(appName, path); -} - -AppIconEngine::~AppIconEngine() -{ - delete m_loader; -} - class PlasmoidModel: public QStandardItemModel { public: @@ -169,32 +143,6 @@ } } -QVariant SystemTray::resolveIcon(const QVariant &variant, const QString &iconThemePath) -{ - if (variant.canConvert()) { - if (!iconThemePath.isEmpty()) { - const QString path = iconThemePath; - if (!path.isEmpty()) { - // FIXME: If last part of path is not "icons", this won't work! - auto tokens = path.splitRef('/', QString::SkipEmptyParts); - if (tokens.length() >= 3 && tokens.takeLast() == QLatin1String("icons")) { - const QString appName = tokens.takeLast().toString(); - - return QVariant(QIcon(new AppIconEngine(variant.toString(), path, appName))); - } else { - qCWarning(SYSTEM_TRAY) << "Wrong IconThemePath" << path << ": too short or does not end with 'icons'"; - } - } - - //return just the string hoping that IconItem will know how to interpret it anyways as either a normal icon or a SVG from the theme - return variant; - } - } - - // Most importantly QIcons. Nothing to do for those. - return variant; -} - void SystemTray::showPlasmoidMenu(QQuickItem *appletInterface, int x, int y) { if (!appletInterface) { diff --git a/dataengines/statusnotifieritem/statusnotifieritemsource.cpp b/dataengines/statusnotifieritem/statusnotifieritemsource.cpp --- a/dataengines/statusnotifieritem/statusnotifieritemsource.cpp +++ b/dataengines/statusnotifieritem/statusnotifieritemsource.cpp @@ -240,14 +240,19 @@ if (!m_customIconLoader) { m_customIconLoader = new KIconLoader(QString(), QStringList(), this); } + // FIXME: If last part of path is not "icons", this won't work! + QString appName; + auto tokens = path.splitRef('/', QString::SkipEmptyParts); + if (tokens.length() >= 3 && tokens.takeLast() == QLatin1String("icons")) + appName = tokens.takeLast().toString(); //icons may be either in the root directory of the passed path or in a appdir format //i.e hicolor/32x32/iconname.png - m_customIconLoader->reconfigure(QString(), QStringList(path)); + m_customIconLoader->reconfigure(appName, QStringList(path)); //add app dir requires an app name, though this is completely unused in this context - m_customIconLoader->addAppDir(QStringLiteral("unused"), path); + m_customIconLoader->addAppDir(appName.size() ? appName : QStringLiteral("unused"), path); } setData(QStringLiteral("IconThemePath"), path);