on xenial help sign in
Make sure dnd mode is ended properly when drag gesture is cancelled Fixes: #1444949

Approved by: Albert Astals Cid

commit598c584fcb58cb2377fcba3707ff864dbdde066b authorMichael Zanetti <michael.zanetti@canonical.com> dateWed 22 Apr 2015, 14:45 (11 years ago) parent153c21041afe6b
2 files changed+37−3
qml/Launcher/LauncherPanel.qml+5−3 tests/qmltests/Launcher/tst_Launcher.qml+32
qml/Launcher/LauncherPanel.qml+5−3
@@ -338,12 +338,14 @@ Rectangle {
338338 }
339339
340340 onCanceled: {
341− selectedItem = undefined;
342− preDragging = false;
343− postDragging = false;
341+ endDrag();
344342 }
345343
346344 onReleased: {
345+ endDrag();
346+ }
347+
348+ function endDrag() {
347349 var droppedIndex = draggedIndex;
348350 if (dragging) {
349351 postDragging = true;
tests/qmltests/Launcher/tst_Launcher.qml+32
@@ -459,6 +459,38 @@ Item {
459459 waitUntilLauncherDisappears();
460460 }
461461
462+ function test_dragndrop_cancel() {
463+ dragLauncherIntoView();
464+ var draggedItem = findChild(launcher, "launcherDelegate4")
465+ var item0 = findChild(launcher, "launcherDelegate0")
466+ var fakeDragItem = findChild(launcher, "fakeDragItem")
467+
468+ // Doing longpress
469+ var currentMouseX = draggedItem.width / 2
470+ var currentMouseY = draggedItem.height / 2
471+ mousePress(draggedItem, currentMouseX, currentMouseY)
472+ // DraggedItem needs to hide and fakeDragItem become visible
473+ tryCompare(draggedItem, "itemOpacity", 0)
474+ tryCompare(fakeDragItem, "visible", true)
475+
476+ // Dragging
477+ currentMouseX -= units.gu(20)
478+ mouseMove(draggedItem, currentMouseX, currentMouseY)
479+
480+ // Make sure we're in the dragging state
481+ var dndArea = findChild(launcher, "dndArea");
482+ tryCompare(draggedItem, "dragging", true)
483+ tryCompare(dndArea, "draggedIndex", 4)
484+
485+ // Tap somewhere in the middle of the screen to close/hide the launcher
486+ tap(root)
487+
488+ // Make sure the dnd operation has been stopped
489+ tryCompare(draggedItem, "dragging", false)
490+ tryCompare(dndArea, "draggedIndex", -1)
491+ tryCompare(dndArea, "drag.target", undefined)
492+ }
493+
462494 function test_quicklist_dismiss() {
463495 dragLauncherIntoView();
464496 var draggedItem = findChild(launcher, "launcherDelegate5")