From 3789f3c1782214457a823efa7d951eca3b84387e Mon Sep 17 00:00:00 2001 From: Michail Vourlakos Date: Thu, 16 May 2019 23:20:51 +0300 Subject: [PATCH] improve adding applets through dragging responsive --fix all events identifications from DragMove and DragExit etc. in containment::qml part and all drags flags are calculated only at DragEnter! This fixes the DragMove signaling and all DragMove signals are sent correctly. It needs to be fixed also for Tasks plasmoid because every time the mouse hovers the Tasks Plasmoid then the DragMove signals are NOT SENT as they should. --- app/view/view.cpp | 4 +- containment/package/contents/ui/main.qml | 70 +++++++++++++++--------- 2 files changed, 46 insertions(+), 28 deletions(-) diff --git a/app/view/view.cpp b/app/view/view.cpp index a172d48ca..e7d82d92e 100644 --- a/app/view/view.cpp +++ b/app/view/view.cpp @@ -1084,7 +1084,9 @@ bool View::event(QEvent *e) emit mouseReleased(mouseEvent->pos(), mouseEvent->button()); } break; - + /* case QEvent::DragMove: + qDebug() << "DRAG MOVING>>>>>>"; + break;*/ case QEvent::PlatformSurface: if (auto pe = dynamic_cast(e)) { switch (pe->surfaceEventType()) { diff --git a/containment/package/contents/ui/main.qml b/containment/package/contents/ui/main.qml index b8488a103..ede25078b 100644 --- a/containment/package/contents/ui/main.qml +++ b/containment/package/contents/ui/main.qml @@ -100,6 +100,11 @@ DragDrop.DropArea { property bool blurEnabled: plasmoid.configuration.blurEnabled && (!forceTransparentPanel || forcePanelForBusyBackground) property bool confirmedDragEntered: false + property bool dragIsTask: false + property bool dragIsSeparator: false + property bool dragIsLatteTasks: false + property bool dragOnlyLaunchers: false + property bool containsOnlyPlasmaTasks: false //this is flag to indicate when from tasks only a plasma based one is found property bool dockContainsMouse: latteView && latteView.visibility ? latteView.visibility.containsMouse : false @@ -661,26 +666,39 @@ DragDrop.DropArea { } onDragEnter: { - if (plasmoid.immutable || dockIsHidden || visibilityManager.inSlidingIn || visibilityManager.inSlidingOut) { - event.ignore(); - return; - } + var isTask = event !== undefined + && event.mimeData !== undefined + && event.mimeData.formats !== undefined + && event.mimeData.formats.indexOf("application/x-orgkdeplasmataskmanager_taskbuttonitem") >= 0; + + var isSeparator = event !== undefined + && event.mimeData !== undefined + && ( latteView.mimeContainsPlasmoid(event.mimeData, "audoban.applet.separator") + || latteView.mimeContainsPlasmoid(event.mimeData, "org.kde.latte.separator") ); + + var isLatteTasks = event !== undefined + && event.mimeData !== undefined + && latteView.mimeContainsPlasmoid(event.mimeData, "org.kde.latte.plasmoid"); - if (event.mimeData.formats.indexOf("application/x-orgkdeplasmataskmanager_taskbuttonitem") >= 0) { + dragIsTask = isTask; + dragIsSeparator = isSeparator; + dragIsLatteTasks = isLatteTasks; + + if (dragIsTask || plasmoid.immutable || dockIsHidden || visibilityManager.inSlidingIn || visibilityManager.inSlidingOut) { + event.ignore(); return; } if (latteApplet) { - if (latteApplet.launchersDrop(event)) { + dragOnlyLaunchers = latteApplet.launchersDrop(event); + + if (dragOnlyLaunchers) { root.addLaunchersMessage = true; if (root.addLaunchersInTaskManager) { return; } } else { - var isSeparator = ( latteView.mimeContainsPlasmoid(event.mimeData, "audoban.applet.separator") - || latteView.mimeContainsPlasmoid(event.mimeData, "org.kde.latte.separator") ); - - if (isSeparator && root.latteAppletContainer.containsPos(event)) { + if (dragIsSeparator && root.latteAppletContainer.containsPos(event)) { confirmedDragEntered = true dndSpacer.opacity = 0; dndSpacer.parent = root; @@ -694,29 +712,25 @@ DragDrop.DropArea { slotAnimationsNeedLength(1); } - if (!latteApplet || (latteApplet && !latteView.mimeContainsPlasmoid(event.mimeData, "org.kde.latte.plasmoid"))) { + if (!latteApplet || (latteApplet && !dragIsLatteTasks)) { LayoutManager.insertAtCoordinates2(dndSpacer, event.x, event.y) dndSpacer.opacity = 1; } } onDragMove: { - if (event.mimeData.formats.indexOf("application/x-orgkdeplasmataskmanager_taskbuttonitem") >= 0 - || dockIsHidden || visibilityManager.inSlidingIn || visibilityManager.inSlidingOut) { + if (dragIsTask) { return; } if (latteApplet) { - if (latteApplet.launchersDrop(event)) { + if (dragOnlyLaunchers) { root.addLaunchersMessage = true; if (root.addLaunchersInTaskManager) { return; } } else { - var isSeparator = ( latteView.mimeContainsPlasmoid(event.mimeData, "audoban.applet.separator") - || latteView.mimeContainsPlasmoid(event.mimeData, "org.kde.latte.separator") ); - - if (isSeparator && root.latteAppletContainer.containsPos(event)) { + if (dragIsSeparator && root.latteAppletContainer.containsPos(event)) { confirmedDragEntered = true dndSpacer.opacity = 0; dndSpacer.parent = root; @@ -725,13 +739,17 @@ DragDrop.DropArea { } } - if (!latteApplet || (latteApplet && !latteView.mimeContainsPlasmoid(event.mimeData, "org.kde.latte.plasmoid"))) { + if (!latteApplet || (latteApplet && !dragIsLatteTasks)) { LayoutManager.insertAtCoordinates2(dndSpacer, event.x, event.y) dndSpacer.opacity = 1; } } onDragLeave: { + dragIsTask = false; + dragIsSeparator = false; + dragIsLatteTasks = false; + dragOnlyLaunchers = false; if (confirmedDragEntered) { slotAnimationsNeedLength(-1); @@ -744,17 +762,15 @@ DragDrop.DropArea { } onDrop: { - if (dockIsHidden || visibilityManager.inSlidingIn || visibilityManager.inSlidingOut) { + if (dragIsTask || dockIsHidden || visibilityManager.inSlidingIn || visibilityManager.inSlidingOut) { return; } - if (event.mimeData.formats.indexOf("application/x-orgkdeplasmataskmanager_taskbuttonitem") < 0) { - if (latteApplet && latteApplet.launchersDrop(event) && root.addLaunchersInTaskManager) { - latteApplet.launchersDropped(event.mimeData.urls); - } else if (!latteApplet || (latteApplet && !latteView.mimeContainsPlasmoid(event.mimeData, "org.kde.latte.plasmoid"))) { - plasmoid.processMimeData(event.mimeData, event.x, event.y); - event.accept(event.proposedAction); - } + if (latteApplet && dragOnlyLaunchers && root.addLaunchersInTaskManager) { + latteApplet.launchersDropped(event.mimeData.urls); + } else if (!latteApplet || (latteApplet && !dragIsLatteTasks)) { + plasmoid.processMimeData(event.mimeData, event.x, event.y); + event.accept(event.proposedAction); } if (confirmedDragEntered) {