Warning, /plasma/latte-dock/containment/package/contents/ui/DragDropArea.qml is written in an unsupported language. File is not indexed.
0001 /* 0002 SPDX-FileCopyrightText: 2019 Michail Vourlakos <mvourlakos@gmail.com> 0003 SPDX-License-Identifier: GPL-2.0-or-later 0004 */ 0005 0006 import QtQuick 2.7 0007 0008 import org.kde.plasma.core 2.0 as PlasmaCore 0009 import org.kde.draganddrop 2.0 as DragDrop 0010 0011 import org.kde.latte.core 0.2 as LatteCore 0012 0013 DragDrop.DropArea { 0014 id: dragArea 0015 0016 property bool containsDrag: false 0017 0018 readonly property Item dragInfo: Item { 0019 readonly property bool entered: latteView && latteView.containsDrag 0020 property bool isTask: false 0021 property bool isPlasmoid: false 0022 property bool isSeparator: false 0023 property bool isLatteTasks: false 0024 property bool onlyLaunchers: false 0025 0026 property bool computationsAreValid: false 0027 } 0028 0029 Connections{ 0030 target: root.dragInfo 0031 0032 onEnteredChanged: { 0033 if(!root.dragInfo.entered) { 0034 dragArea.clearInfo(); 0035 } 0036 } 0037 } 0038 0039 Connections{ 0040 target: latteView 0041 0042 onContainsDragChanged: { 0043 if(!latteView.containsDrag) { 0044 dragArea.clearInfo(); 0045 } 0046 } 0047 } 0048 0049 function clearInfo() { 0050 clearInfoTimer.restart(); 0051 } 0052 0053 function isDroppingOnlyLaunchers(event) { 0054 if (!latteView) { 0055 return 0056 } 0057 0058 if (event.mimeData.hasUrls || (event.mimeData.formats.indexOf("text/x-plasmoidservicename") !== 0)) { 0059 var onlyLaunchers = event.mimeData.urls.every(function (item) { 0060 return latteView.extendedInterface.isApplication(item); 0061 }); 0062 0063 return onlyLaunchers; 0064 } 0065 0066 return false; 0067 } 0068 0069 //! Give the time when an applet is dropped to be positioned properly 0070 Timer { 0071 id: clearInfoTimer 0072 interval: 100 0073 0074 onTriggered: { 0075 dragArea.dragInfo.computationsAreValid = false; 0076 0077 dragArea.dragInfo.isTask = false; 0078 dragArea.dragInfo.isPlasmoid = false; 0079 dragArea.dragInfo.isSeparator = false; 0080 dragArea.dragInfo.isLatteTasks = false; 0081 dragArea.dragInfo.onlyLaunchers = false; 0082 0083 dndSpacer.parent = root; 0084 dndSpacer.opacity = 0; 0085 } 0086 } 0087 0088 onDragEnter: { 0089 containsDrag = true; 0090 clearInfoTimer.stop(); 0091 var isTask = event !== undefined 0092 && event.mimeData !== undefined 0093 && event.mimeData.formats !== undefined 0094 && event.mimeData.formats.indexOf("application/x-orgkdeplasmataskmanager_taskbuttonitem") >= 0; 0095 0096 var isSeparator = event !== undefined 0097 && event.mimeData !== undefined 0098 && ( latteView.mimeContainsPlasmoid(event.mimeData, "audoban.applet.separator") 0099 || latteView.mimeContainsPlasmoid(event.mimeData, "org.kde.latte.separator") ); 0100 0101 var isLatteTasks = event !== undefined 0102 && event.mimeData !== undefined 0103 && latteView.mimeContainsPlasmoid(event.mimeData, "org.kde.latte.plasmoid"); 0104 0105 var isPlasmoid = event !== undefined 0106 && event.mimeData !== undefined 0107 && event.mimeData.formats !== undefined 0108 && !event.mimeData.hasUrls 0109 && event.mimeData.formats.indexOf("text/x-plasmoidservicename") === 0; 0110 0111 dragInfo.isTask = isTask; 0112 dragInfo.isPlasmoid = isPlasmoid; 0113 dragInfo.isSeparator = isSeparator; 0114 dragInfo.isLatteTasks = isLatteTasks; 0115 dragInfo.onlyLaunchers = isDroppingOnlyLaunchers(event); 0116 dragInfo.computationsAreValid = true; 0117 0118 if (dragInfo.isTask || plasmoid.immutable || !root.myView.isShownFully) { 0119 event.ignore(); 0120 clearInfo(); 0121 return; 0122 } 0123 0124 //! Send signal AFTER the dragging is confirmed otherwise the restore mask signal from animations 0125 //! may not be triggered #408926 0126 animations.needLength.addEvent(dragArea); 0127 0128 if (root.launchers.hasStealingApplet && dragInfo.onlyLaunchers) { 0129 root.launchers.showAddLaunchersMessageInStealingApplet(); 0130 dndSpacer.opacity = 0; 0131 dndSpacer.parent = root; 0132 return; 0133 } 0134 0135 fastLayoutManager.insertAtCoordinates(dndSpacer, event.x, event.y); 0136 dndSpacer.opacity = 1; 0137 } 0138 0139 onDragMove: { 0140 containsDrag = true; 0141 clearInfoTimer.stop(); 0142 if (dragInfo.isTask) { 0143 return; 0144 } 0145 0146 if (root.launchers.hasStealingApplet && dragInfo.onlyLaunchers) { 0147 root.launchers.showAddLaunchersMessageInStealingApplet(); 0148 dndSpacer.opacity = 0; 0149 dndSpacer.parent = root; 0150 return; 0151 } 0152 0153 fastLayoutManager.insertAtCoordinates(dndSpacer, event.x, event.y); 0154 dndSpacer.opacity = 1; 0155 } 0156 0157 onDragLeave: { 0158 containsDrag = false; 0159 animations.needLength.removeEvent(dragArea); 0160 0161 if (root.launchers.hasStealingApplet) { 0162 root.launchers.hideAddLaunchersMessageInStealingApplet(); 0163 } 0164 0165 dndSpacer.opacity = 0; 0166 dndSpacer.parent = root; 0167 } 0168 0169 onDrop: { 0170 containsDrag = false; 0171 animations.needLength.removeEvent(dragArea); 0172 0173 if (root.launchers.hasStealingApplet) { 0174 root.launchers.hideAddLaunchersMessageInStealingApplet(); 0175 } 0176 0177 if (dragInfo.isTask || !root.myView.isShownFully) { 0178 return; 0179 } 0180 0181 if (root.launchers.hasStealingApplet && dragInfo.onlyLaunchers) { 0182 root.launchers.addDroppedLaunchersInStealingApplet(event.mimeData.urls); 0183 } else { 0184 var dndindex = fastLayoutManager.dndSpacerIndex(); 0185 var eventx = event.x; 0186 var eventy = event.y; 0187 0188 if (dndindex >= 0) { 0189 var masquearadedIndexFromPoint = fastLayoutManager.indexToMasquearadedPoint(fastLayoutManager.dndSpacerIndex()); 0190 eventx = masquearadedIndexFromPoint.x; 0191 eventy = masquearadedIndexFromPoint.y; 0192 } 0193 0194 plasmoid.processMimeData(event.mimeData, eventx, eventy); 0195 //! inform others what plasmoid was drag n' dropped to be added 0196 latteView.extendedInterface.appletDropped(event.mimeData, eventx, eventy); 0197 event.accept(event.proposedAction); 0198 } 0199 0200 dndSpacer.opacity = 0; 0201 } 0202 }