@@ -478,27 +478,55 @@ Rectangle {
478478 anchors.fill: appContainer
479479 propagateComposedEvents: true
480480 hoverEnabled: true
481+
482+ property int scrollAreaWidth: root.width / 3
483+ property bool progressiveScrollingEnabled: false
484+
481485 onMouseXChanged: {
482486 mouse.accepted = false
487+
488+ // Find the howered item and mark it active
483489 var mapped = mapToItem(appContainer, hoverMouseArea.mouseX, hoverMouseArea.mouseY)
484490 var itemUnder = appContainer.childAt(mapped.x, mapped.y)
485491 if (itemUnder) {
486492 mapped = mapToItem(itemUnder, hoverMouseArea.mouseX, hoverMouseArea.mouseY)
487493 var delegateChild = itemUnder.childAt(mapped.x, mapped.y)
488− if (delegateChild.objectName === "decoratedWindow") {
494+ print("delegateChild", delegateChild)
495+ if (delegateChild.objectName === "decoratedWindow" || delegateChild.objectName === "tileInfo") {
489496 appRepeater.highlightedIndex = appRepeater.indexOf(itemUnder)
490497 }
491498 }
499+
500+ var margins = spreadFlickable.width * 0.05;
501+
502+ if (!progressiveScrollingEnabled && mouseX < spreadFlickable.width - scrollAreaWidth) {
503+ progressiveScrollingEnabled = true
504+ }
505+
506+ // do we need to scroll?
507+ if (mouseX < scrollAreaWidth) {
508+ var progress = Math.min(1, (scrollAreaWidth + margins - mouseX) / (scrollAreaWidth - margins));
509+ var contentX = (1 - progress) * (spreadFlickable.contentWidth - spreadFlickable.width)
510+ spreadFlickable.contentX = Math.max(0, Math.min(spreadFlickable.contentX, contentX))
511+ }
512+ if (mouseX > spreadFlickable.width - scrollAreaWidth && progressiveScrollingEnabled) {
513+ var progress = Math.min(1, (mouseX - (spreadFlickable.width - scrollAreaWidth)) / (scrollAreaWidth - margins))
514+ var contentX = progress * (spreadFlickable.contentWidth - spreadFlickable.width)
515+ spreadFlickable.contentX = Math.min(spreadFlickable.contentWidth - spreadFlickable.width, Math.max(spreadFlickable.contentX, contentX))
516+ }
492517 }
493518 onPressed: mouse.accepted = false
494519 }
495520
496521 FloatingFlickable {
497522 id: spreadFlickable
523+ objectName: "spreadFlickable"
498524 anchors.fill: parent
499525 contentWidth: Math.max(6, ApplicationManager.count) * Math.min(height / 4, width / 5)
500526 enabled: false
501527
528+ onContentXChanged: print("cx", contentX)
529+
502530 function snapTo(contentX) {
503531 snapAnimation.stop();
504532 snapAnimation.to = contentX
@@ -623,6 +651,7 @@ Rectangle {
623651 from: "*"
624652 to: "altTab"
625653 SequentialAnimation {
654+ PropertyAction { target: hoverMouseArea; property: "progressiveScrollingEnabled"; value: false }
626655 PropertyAction { target: appRepeater; property: "highlightedIndex"; value: Math.min(ApplicationManager.count - 1, 1) }
627656 PauseAnimation { duration: 50 }
628657 PropertyAction { target: workspaceSelector; property: "visible" }