~aacid/unity8/drag_with_quicklist

« back to all changes in this revision

Viewing changes to qml/Launcher/LauncherPanel.qml

  • Committer: Albert Astals Cid
  • Date: 2015-12-03 10:18:14 UTC
  • Revision ID: albert.astals@canonical.com-20151203101814-btefs3m5ere821nw
Allow dragging launcher items with the quicklist open

Show diffs side-by-side

added added

removed removed

Lines of Context:
384
384
                        property int startY
385
385
 
386
386
                        onPressed: {
387
 
                            selectedItem = launcherListView.itemAt(mouseX, mouseY + launcherListView.realContentY)
 
387
                            processPress(mouse);
 
388
                        }
 
389
 
 
390
                        function processPress(mouse) {
 
391
                            selectedItem = launcherListView.itemAt(mouse.x, mouse.y + launcherListView.realContentY)
388
392
                        }
389
393
 
390
394
                        onClicked: {
429
433
                        }
430
434
 
431
435
                        onCanceled: {
432
 
                            endDrag();
 
436
                            endDrag(drag);
433
437
                        }
434
438
 
435
439
                        onReleased: {
436
 
                            endDrag();
 
440
                            endDrag(drag);
437
441
                        }
438
442
 
439
 
                        function endDrag() {
 
443
                        function endDrag(dragItem) {
440
444
                            var droppedIndex = draggedIndex;
441
445
                            if (dragging) {
442
446
                                postDragging = true;
452
456
                            selectedItem = undefined;
453
457
                            preDragging = false;
454
458
 
455
 
                            drag.target = undefined
 
459
                            dragItem.target = undefined
456
460
 
457
461
                            progressiveScrollingTimer.stop();
458
462
                            launcherListView.interactive = true;
464
468
                        }
465
469
 
466
470
                        onPressAndHold: {
 
471
                            processPressAndHold(mouse, drag);
 
472
                        }
 
473
 
 
474
                        function processPressAndHold(mouse, dragItem) {
467
475
                            if (Math.abs(selectedItem.angle) > 30) {
468
476
                                return;
469
477
                            }
470
478
 
471
479
                            Haptics.play();
472
480
 
473
 
                            draggedIndex = Math.floor((mouseY + launcherListView.realContentY) / launcherListView.realItemHeight);
 
481
                            draggedIndex = Math.floor((mouse.y + launcherListView.realContentY) / launcherListView.realItemHeight);
474
482
 
475
483
                            // Opening QuickList
476
484
                            quickList.item = selectedItem;
480
488
 
481
489
                            launcherListView.interactive = false
482
490
 
483
 
                            var yOffset = draggedIndex > 0 ? (mouseY + launcherListView.realContentY) % (draggedIndex * launcherListView.realItemHeight) : mouseY + launcherListView.realContentY
 
491
                            var yOffset = draggedIndex > 0 ? (mouse.y + launcherListView.realContentY) % (draggedIndex * launcherListView.realItemHeight) : mouse.y + launcherListView.realContentY
484
492
 
485
493
                            fakeDragItem.iconName = launcherListView.model.get(draggedIndex).icon
486
494
                            fakeDragItem.x = units.gu(0.5)
487
 
                            fakeDragItem.y = mouseY - yOffset + launcherListView.anchors.topMargin + launcherListView.topMargin
 
495
                            fakeDragItem.y = mouse.y - yOffset + launcherListView.anchors.topMargin + launcherListView.topMargin
488
496
                            fakeDragItem.angle = selectedItem.angle * (root.inverted ? -1 : 1)
489
497
                            fakeDragItem.offset = selectedItem.offset * (root.inverted ? -1 : 1)
490
498
                            fakeDragItem.count = LauncherModel.get(draggedIndex).count
491
499
                            fakeDragItem.progress = LauncherModel.get(draggedIndex).progress
492
500
                            fakeDragItem.flatten()
493
 
                            drag.target = fakeDragItem
 
501
                            dragItem.target = fakeDragItem
494
502
 
495
 
                            startX = mouseX
496
 
                            startY = mouseY
 
503
                            startX = mouse.x
 
504
                            startY = mouse.y
497
505
                        }
498
506
 
499
507
                        onPositionChanged: {
 
508
                            processPositionChanged(mouse)
 
509
                        }
 
510
 
 
511
                        function processPositionChanged(mouse) {
500
512
                            if (draggedIndex >= 0) {
501
513
                                if (!selectedItem.dragging) {
502
 
                                    var distance = Math.max(Math.abs(mouseX - startX), Math.abs(mouseY - startY))
 
514
                                    var distance = Math.max(Math.abs(mouse.x - startX), Math.abs(mouse.y - startY))
503
515
                                    if (!preDragging && distance > units.gu(1.5)) {
504
516
                                        preDragging = true;
505
517
                                        quickList.state = "";
623
635
            source: "graphics/quicklist_tooltip.png"
624
636
            rotation: 90
625
637
        }
626
 
 
627
 
        InverseMouseArea {
628
 
            anchors.fill: parent
629
 
            enabled: quickList.state == "open"
630
 
            onClicked: {
631
 
                quickList.state = ""
632
 
            }
633
 
        }
634
 
 
 
638
    }
 
639
    InverseMouseArea {
 
640
        anchors.fill: quickListShape
 
641
        enabled: quickList.state == "open" || pressed
 
642
 
 
643
        onClicked: {
 
644
            quickList.state = ""
 
645
        }
 
646
 
 
647
        // Forward for dragging to work when quickList is open
 
648
 
 
649
        onPressed: {
 
650
            var m = mapToItem(dndArea, mouseX, mouseY)
 
651
            dndArea.processPress(m)
 
652
        }
 
653
 
 
654
        onPressAndHold: {
 
655
            var m = mapToItem(dndArea, mouseX, mouseY)
 
656
            dndArea.processPressAndHold(m, drag)
 
657
        }
 
658
 
 
659
        onPositionChanged: {
 
660
            var m = mapToItem(dndArea, mouseX, mouseY)
 
661
            dndArea.processPositionChanged(m)
 
662
        }
 
663
 
 
664
        onCanceled: {
 
665
            dndArea.endDrag(drag);
 
666
        }
 
667
 
 
668
        onReleased: {
 
669
            dndArea.endDrag(drag);
 
670
        }
635
671
    }
636
672
 
637
673
    Rectangle {