@@ -430,9 +430,10 @@ Rectangle {
430430 spreadView.phase = 0;
431431 spreadView.contentX = -spreadView.shift;
432432 }
433− if (dragging && attachedToView) {
433+ if (dragging && status == DirectionalDragArea.Recognized && attachedToView) {
434434 // Gesture recognized. Let's move the spreadView with the finger
435− spreadView.contentX = -touchX + spreadDragArea.width - spreadView.shift;
435+ var finalX = Math.min(touchX + width, width);
436+ spreadView.contentX = -finalX + spreadDragArea.width - spreadView.shift;
436437 }
437438 if (attachedToView && spreadView.shiftedContentX >= spreadView.width * spreadView.positionMarker3) {
438439 // We passed positionMarker3. Detach from spreadView and snap it.
@@ -442,7 +443,13 @@ Rectangle {
442443 gesturePoints.push(touchX);
443444 }
444445
446+ property int previousStatus: -1
447+ property int currentStatus: DirectionalDragArea.WaitingForTouch
448+
445449 onStatusChanged: {
450+ previousStatus = currentStatus;
451+ currentStatus = status;
452+
446453 if (status == DirectionalDragArea.Recognized) {
447454 attachedToView = true;
448455 }
@@ -450,7 +457,7 @@ Rectangle {
450457
451458 onDraggingChanged: {
452459 if (dragging) {
453− // Gesture recognized. Start recording this gesture
460+ // A potential edge-drag gesture has started. Start recording it
454461 gesturePoints = [];
455462 return;
456463 }
@@ -467,7 +474,8 @@ Rectangle {
467474 }
468475 gesturePoints = [];
469476
470− if (oneWayFlick && spreadView.shiftedContentX > units.gu(2) &&
477+ if (previousStatus == DirectionalDragArea.Recognized &&
478+ oneWayFlick && spreadView.shiftedContentX > units.gu(2) &&
471479 spreadView.shiftedContentX < spreadView.positionMarker1 * spreadView.width) {
472480 // If it was a short one-way movement, do the Alt+Tab switch
473481 // no matter if we didn't cross positionMarker1 yet.