@@ -467,9 +467,12 @@ Item {
467467
468468 function test_dragndrop_data() {
469469 return [
470− {tag: "startDrag", fullDrag: false },
471− {tag: "fullDrag horizontal", fullDrag: true, orientation: ListView.Horizontal },
472− {tag: "fullDrag vertical", fullDrag: true, orientation: ListView.Vertical },
470+ {tag: "startDrag", fullDrag: false, releaseBeforeDrag: false },
471+ {tag: "fullDrag horizontal", fullDrag: true, releaseBeforeDrag: false, orientation: ListView.Horizontal },
472+ {tag: "fullDrag vertical", fullDrag: true, releaseBeforeDrag: false, orientation: ListView.Vertical },
473+ {tag: "startDrag with quicklist open", fullDrag: false, releaseBeforeDrag: true },
474+ {tag: "fullDrag horizontal with quicklist open", fullDrag: true, releaseBeforeDrag: true, orientation: ListView.Horizontal },
475+ {tag: "fullDrag vertical with quicklist open", fullDrag: true, releaseBeforeDrag: true, orientation: ListView.Vertical },
473476 ];
474477 }
475478
@@ -502,6 +505,15 @@ Item {
502505 tryCompare(draggedItem, "itemOpacity", 0)
503506 tryCompare(fakeDragItem, "visible", true)
504507
508+ if (data.releaseBeforeDrag) {
509+ mouseRelease(launcher);
510+ tryCompare(fakeDragItem, "visible", false)
511+
512+ mousePress(launcher, currentMouseX, currentMouseY);
513+ // DraggedItem needs to hide and fakeDragItem become visible
514+ tryCompare(fakeDragItem, "visible", true);
515+ }
516+
505517 // Dragging a bit (> 1.5 gu)
506518 newMouseX -= units.gu(2)
507519 mouseFlick(launcher, currentMouseX, currentMouseY, newMouseX, newMouseY, false, false, 100)
@@ -552,8 +564,10 @@ Item {
552564
553565 function test_dragndrop_cancel_data() {
554566 return [
555− {tag: "by mouse", mouse: true},
556− {tag: "by touch", mouse: false}
567+ {tag: "by mouse", mouse: true, releaseBeforeDrag: false},
568+ {tag: "by touch", mouse: false, releaseBeforeDrag: false},
569+ {tag: "by mouse with quicklist open", mouse: true, releaseBeforeDrag: true},
570+ {tag: "by touch with quicklist open", mouse: false, releaseBeforeDrag: true}
557571 ]
558572 }
559573
@@ -577,6 +591,22 @@ Item {
577591 tryCompare(draggedItem, "itemOpacity", 0)
578592 tryCompare(fakeDragItem, "visible", true)
579593
594+ if (data.releaseBeforeDrag) {
595+ if(data.mouse) {
596+ mouseRelease(draggedItem)
597+ } else {
598+ touchRelease(draggedItem)
599+ }
600+ tryCompare(fakeDragItem, "visible", false)
601+
602+ if(data.mouse) {
603+ mousePress(draggedItem, currentMouseX, currentMouseY)
604+ } else {
605+ touchPress(draggedItem, currentMouseX, currentMouseY)
606+ }
607+ tryCompare(fakeDragItem, "visible", true);
608+ }
609+
580610 // Dragging
581611 currentMouseX -= units.gu(20)
582612
@@ -604,6 +634,87 @@ Item {
604634 tryCompare(dndArea, "drag.target", undefined)
605635 }
606636
637+ function test_dragndrop_with_other_quicklist_open() {
638+ dragLauncherIntoView();
639+ var draggedItem = findChild(launcher, "launcherDelegate4")
640+ var item0 = findChild(launcher, "launcherDelegate0")
641+ var fakeDragItem = findChild(launcher, "fakeDragItem")
642+ var initialItemHeight = draggedItem.height
643+ var item4 = LauncherModel.get(4).appId
644+ var item3 = LauncherModel.get(3).appId
645+
646+ var listView = findChild(launcher, "launcherListView");
647+ listView.flick(0, units.gu(200));
648+ tryCompare(listView, "flicking", false);
649+
650+ // Initial state
651+ compare(draggedItem.itemOpacity, 1, "Item's opacity is not 1 at beginning")
652+ compare(fakeDragItem.visible, false, "FakeDragItem isn't invisible at the beginning")
653+ tryCompare(findChild(draggedItem, "dropIndicator"), "opacity", 0)
654+
655+ // Doing longpress
656+ var mouseOnLauncher = launcher.mapFromItem(draggedItem, draggedItem.width / 2, draggedItem.height / 2)
657+ var currentMouseX = mouseOnLauncher.x
658+ var currentMouseY = mouseOnLauncher.y
659+ var newMouseX = currentMouseX
660+ var newMouseY = currentMouseY
661+ mousePress(launcher, currentMouseX, currentMouseY)
662+ // DraggedItem needs to hide and fakeDragItem become visible
663+ tryCompare(draggedItem, "itemOpacity", 0)
664+ tryCompare(fakeDragItem, "visible", true)
665+
666+ mouseRelease(launcher);
667+ tryCompare(fakeDragItem, "visible", false)
668+
669+ // Now let's longpress and drag a different item
670+
671+ var draggedItem = findChild(launcher, "launcherDelegate3")
672+ compare(draggedItem.itemOpacity, 1, "Item's opacity is not 1 at beginning")
673+ tryCompare(findChild(draggedItem, "dropIndicator"), "opacity", 0)
674+
675+ // Doing longpress
676+ var mouseOnLauncher = launcher.mapFromItem(draggedItem, draggedItem.width / 2, draggedItem.height / 2)
677+ var currentMouseX = mouseOnLauncher.x
678+ var currentMouseY = mouseOnLauncher.y
679+ var newMouseX = currentMouseX
680+ var newMouseY = currentMouseY
681+ mousePress(launcher, currentMouseX, currentMouseY)
682+ // DraggedItem needs to hide and fakeDragItem become visible
683+ tryCompare(draggedItem, "itemOpacity", 0)
684+ tryCompare(fakeDragItem, "visible", true)
685+
686+ // Dragging a bit (> 1.5 gu)
687+ newMouseX -= units.gu(2)
688+ mouseFlick(launcher, currentMouseX, currentMouseY, newMouseX, newMouseY, false, false, 100)
689+ currentMouseX = newMouseX
690+
691+ // Other items need to expand and become 0.6 opaque
692+ tryCompare(item0, "angle", 0)
693+ tryCompare(item0, "itemOpacity", 0.6)
694+
695+ // Dragging a bit more
696+ newMouseY += initialItemHeight * 1.5
697+ mouseFlick(launcher, currentMouseX, currentMouseY, newMouseX, newMouseY, false, false, 100)
698+ currentMouseY = newMouseY
699+
700+ tryCompare(findChild(draggedItem, "dropIndicator"), "opacity", 1)
701+ tryCompare(draggedItem, "height", units.gu(1))
702+
703+ waitForRendering(draggedItem)
704+ compare(LauncherModel.get(4).appId, item3)
705+ compare(LauncherModel.get(3).appId, item4)
706+
707+ // Releasing and checking if initial values are restored
708+ mouseRelease(launcher)
709+ tryCompare(findChild(draggedItem, "dropIndicator"), "opacity", 0)
710+ tryCompare(draggedItem, "itemOpacity", 1)
711+ tryCompare(fakeDragItem, "visible", false)
712+
713+ // Click somewhere in the empty space to make it hide in case it isn't
714+ mouseClick(launcher, launcher.width - units.gu(1), units.gu(1));
715+ waitUntilLauncherDisappears();
716+ }
717+
607718 function test_quicklist_dismiss() {
608719 dragLauncherIntoView();
609720 var draggedItem = findChild(launcher, "launcherDelegate5")