summaryrefslogtreecommitdiffstats
path: root/kde/patch/plasma-workspace/plasma-workspace.systray_cpubug.patch
blob: 4ad3c070f4380c3e69a63f0d84648c846cd319ff (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
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);