summaryrefslogblamecommitdiffstats
path: root/kde/patch/plasma-workspace/plasma-workspace.systray_cpubug.patch
blob: 4ad3c070f4380c3e69a63f0d84648c846cd319ff (plain) (tree)























































































































































                                                                                                                                                      
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 <Plasma/PluginLoader>
 #include <Plasma/ServiceJob>
 
-#include <KIconLoader>
-#include <KIconEngine>
 #include <KActionCollection>
 #include <KLocalizedString>
 
 #include <plasma_version.h>
 
-/*
- * 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<QString>()) {
-        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);