File indexing completed on 2024-05-12 05:33:45
0001 /* 0002 SPDX-FileCopyrightText: 2017-2018 Michail Vourlakos <mvourlakos@gmail.com> 0003 SPDX-License-Identifier: GPL-2.0-or-later 0004 */ 0005 0006 //! applets that haven't identified properly their Latte behavior and 0007 //! create broken results when used in Latte 0008 var blacklistedApplets = ["org.kde.redshiftControl", 0009 "org.kde.plasma.notifications", 0010 "menuZ"]; 0011 0012 function typeOf(obj, className){ 0013 var name = obj.toString(); 0014 //if (applet.pluginName === "org.kde.plasma.kicker") //"set a plugin name to debug" 0015 // console.log(name); 0016 return ((name.indexOf(className + "(") === 0) || (name.indexOf(className + "_QML") === 0)); 0017 } 0018 0019 function reconsiderAppletIconItem(){ 0020 if (communicator.appletIconItem || !applet || communicator.indexerIsSupported) 0021 return; 0022 0023 //! searching to find for that applet the first IconItem 0024 //! which is going to be used in order to deactivate its active 0025 //! from our MouseArea 0026 0027 if (applet.pluginName === "org.kde.plasma.kickoff" 0028 || applet.pluginName === "org.kde.plasma.kickofflegacy") { 0029 identifyKickOff(); 0030 } else if (applet.pluginName === "org.kde.plasma.kicker") { 0031 identifyKicker(); 0032 } else if (applet.pluginName === "org.kde.plasma.notes") { 0033 identifyNotes(); 0034 } else if (applet.pluginName === "org.kde.plasma.simplemenu") { 0035 identifySimpleMenu(); 0036 } else if (applet.pluginName === "org.kde.plasma.userswitcher") { 0037 identifyUserSwitcher(); 0038 } else if (applet.pluginName === "org.kde.comexpertise.plasma.kdeconnect.sms") { 0039 identifyKdeConnectSms(); 0040 } else if (applet.pluginName === "org.kde.redshiftControl") { 0041 //blacklist 0042 } else { 0043 identifyGeneric(); 0044 } 0045 } 0046 0047 function checkAndUpdateAppletRootItem() { 0048 if (appletDiscoveredRootItem || communicator.indexerIsSupported) { 0049 return; 0050 } 0051 0052 var level0 = applet.children; 0053 0054 for(var i=0; i<level0.length; ++i){ 0055 var level1 = level0[i].children; 0056 if (!appletDiscoveredRootItem && level0[i].hasOwnProperty("latteBridge")) { 0057 appletDiscoveredRootItem = level0[i]; 0058 } 0059 if (appletDiscoveredRootItem) { 0060 break; 0061 } 0062 0063 for(var j=0; j<level1.length; ++j){ 0064 if (!appletDiscoveredRootItem && level1[j].hasOwnProperty("latteBridge")) { 0065 appletDiscoveredRootItem = level1[j]; 0066 } 0067 if (appletDiscoveredRootItem) { 0068 break; 0069 } 0070 } 0071 } 0072 } 0073 0074 function identifyGeneric() { 0075 if (blacklistedApplets.indexOf(applet.pluginName) >= 0) { 0076 return; 0077 } 0078 0079 var level0 = applet.children; 0080 0081 for(var i=0; i<level0.length; ++i){ 0082 var level1 = level0[i].children; 0083 for(var j=0; j<level1.length; ++j){ 0084 if (typeOf(level1[j], "CompactRepresentation")) { 0085 var level2 = level1[j].children; 0086 for(var k=0; k<level2.length; ++k){ 0087 if (typeOf(level2[k], "IconItem")) { 0088 communicator.appletIconItem = level2[k]; 0089 return; 0090 } 0091 } 0092 } else if (typeOf(level1[j], "IconItem")) { 0093 communicator.appletIconItem = level1[j]; 0094 return; 0095 } 0096 } 0097 } 0098 } 0099 0100 function identifyKdeConnectSms() 0101 { 0102 if (applet.pluginName !== "org.kde.comexpertise.plasma.kdeconnect.sms") 0103 return; 0104 0105 var level0 = applet.children; 0106 0107 for(var i=0; i<level0.length; ++i){ 0108 var level1 = level0[i].children; 0109 for(var j=0; j<level1.length; ++j){ 0110 var level2 = level1[j].children; 0111 for(var k=0; k<level2.length; ++k){ 0112 if (typeOf(level2[k], "IconItem")) { 0113 communicator.appletIconItem = level2[k]; 0114 return; 0115 } 0116 } 0117 } 0118 0119 } 0120 } 0121 0122 function identifyKickOff() { 0123 if (applet.pluginName !== "org.kde.plasma.kickoff" 0124 && applet.pluginName !== "org.kde.plasma.kickofflegacy") { 0125 return; 0126 } 0127 0128 var level0 = applet.children; 0129 0130 for(var i=0; i<level0.length; ++i){ 0131 var level1 = level0[i].children; 0132 for(var j=0; j<level1.length; ++j){ 0133 if (typeOf(level1[j], "QQuickMouseArea")) { 0134 var level2 = level1[j].children; 0135 for(var k=0; k<level2.length; ++k){ 0136 if (typeOf(level2[k], "IconItem")) { 0137 communicator.appletIconItem = level2[k]; 0138 return; 0139 } 0140 } 0141 } 0142 } 0143 } 0144 } 0145 0146 function findIconItem(currentChildren, steps) { 0147 var nextitems = currentChildren; 0148 var stepsFollowed = 0; 0149 0150 for (var i=0; i<steps.length; ++i) { 0151 for (var j=0; j<nextitems.length; ++j) { 0152 var item = nextitems[j]; 0153 if (typeOf(item, steps[i])) { 0154 stepsFollowed++; 0155 nextitems = item.children; 0156 } 0157 } 0158 0159 if (stepsFollowed === steps.length) { 0160 break; 0161 } 0162 } 0163 0164 if (stepsFollowed === steps.length) { 0165 for (var k=0; k<nextitems.length; ++k) { 0166 var lastItem = nextitems[k]; 0167 if (typeOf(lastItem, "IconItem")) { 0168 return lastItem; 0169 } 0170 } 0171 } 0172 0173 return null; 0174 } 0175 0176 function identifyNotes() { 0177 var level0 = applet.parent.children; 0178 var stepsInCompactRepresentation = ["QQuickMouseArea"]; 0179 0180 for(var i=0; i<level0.length; ++i){ 0181 var level1 = level0[i].children; 0182 for(var j=0; j<level1.length; ++j){ 0183 if (typeOf(level1[j], "CompactApplet")) { 0184 0185 var icon = findIconItem(level1[j].compactRepresentation.children, stepsInCompactRepresentation) 0186 if (icon) { 0187 communicator.appletIconItem = icon; 0188 return; 0189 } 0190 } 0191 } 0192 } 0193 } 0194 0195 function identifyUserSwitcher() { 0196 if (applet.pluginName !== "org.kde.plasma.userswitcher") 0197 return; 0198 0199 var level0 = applet.children; 0200 0201 for(var i=0; i<level0.length; ++i){ 0202 var level1 = level0[i].children; 0203 for(var j=0; j<level1.length; ++j){ 0204 if (applet.pluginName === "org.kde.plasma.userswitcher" && !root.behaveAsPlasmaPanel && !container.originalAppletBehavior) { 0205 if (typeOf(level1[j], "QQuickMouseArea")) { 0206 var level2 = level1[j].children; 0207 for(var k=0; k<level2.length; ++k){ 0208 if (typeOf(level2[k], "QQuickRow")) { 0209 var iconIt; 0210 var labelIt; 0211 var level3 = level2[k].children; 0212 0213 for(var r=0; r<level3.length; ++r){ 0214 if (typeOf(level3[r], "IconItem")) { 0215 iconIt = level3[r]; 0216 } else if (typeOf(level3[r], "QQuickText")) { 0217 labelIt = level3[r]; 0218 } 0219 } 0220 if (iconIt && labelIt && !labelIt.visible){ 0221 communicator.appletIconItem = iconIt; 0222 return; 0223 } 0224 } 0225 } 0226 } 0227 } 0228 } 0229 } 0230 } 0231 0232 function identifyKicker() { 0233 if (applet.pluginName !== "org.kde.plasma.kicker") 0234 return; 0235 0236 var level0 = applet.children; 0237 0238 for(var i=0; i<level0.length; ++i){ 0239 var level1 = level0[i].children; 0240 for(var j=0; j<level1.length; ++j){ 0241 if (typeOf(level1[j], "CompactRepresentation")) { 0242 var level2 = level1[j].children; 0243 var iconIt; 0244 var imageIt; 0245 0246 for(var k=0; k<level2.length; ++k){ 0247 if (typeOf(level2[k], "IconItem")) { 0248 iconIt = level2[k]; 0249 } else if (typeOf(level2[k], "QQuickImage")) { 0250 imageIt = level2[k]; 0251 } 0252 } 0253 0254 if (iconIt) { 0255 communicator.appletIconItem = iconIt; 0256 } 0257 0258 if (imageIt){ 0259 communicator.appletImageItem = imageIt; 0260 } 0261 0262 return; 0263 } 0264 } 0265 } 0266 } 0267 0268 function identifySimpleMenu() { 0269 if (applet.pluginName !== "org.kde.plasma.simplemenu") 0270 return; 0271 0272 var level0 = applet.children; 0273 0274 for(var i=0; i<level0.length; ++i){ 0275 var level1 = level0[i].children; 0276 var iconIt; 0277 var imageIt; 0278 0279 for(var j=0; j<level1.length; ++j){ 0280 if (typeOf(level1[j], "IconItem")) { 0281 iconIt = level1[j]; 0282 } else if (typeOf(level1[j], "QQuickImage")) { 0283 imageIt = level1[j]; 0284 } 0285 } 0286 0287 if (iconIt) { 0288 communicator.appletIconItem = iconIt; 0289 } 0290 0291 if (imageIt){ 0292 communicator.appletImageItem = imageIt; 0293 } 0294 0295 return; 0296 } 0297 }