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 }