@@ -1,5 +1,6 @@
11/*
22 * Copyright (C) 2014 Canonical, Ltd.
3+ * Copyright (C) 2020 UBports Foundation
34 *
45 * This program is free software; you can redistribute it and/or modify
56 * it under the terms of the GNU General Public License as published by
@@ -29,6 +30,7 @@ Item {
2930 readonly property alias currentItemIndex: row.currentItemIndex
3031 property real lateralPosition: -1
3132 property int alignment: Qt.AlignRight
33+ readonly property int rowContentX: row.contentX
3234
3335 property alias hideRow: row.hideRow
3436 property alias rowItemDelegate: row.delegate
@@ -133,12 +135,12 @@ Item {
133135
134136 if (root.alignment == Qt.AlignLeft) {
135137 // current item overlap on left
136− if (row.currentItem && flickable.contentX > row.currentItem.x) {
137− d.alignmentAdjustment -= (flickable.contentX - row.currentItem.x);
138+ if (row.currentItem && flickable.contentX > (row.currentItem.x - row.contentX)) {
139+ d.alignmentAdjustment -= (flickable.contentX - (row.currentItem.x - row.contentX));
138140
139141 // current item overlap on right
140− } else if (row.currentItem && flickable.contentX + flickable.width < row.currentItem.x + row.currentItem.width) {
141− d.alignmentAdjustment += (row.currentItem.x + row.currentItem.width) - (flickable.contentX + flickable.width);
142+ } else if (row.currentItem && flickable.contentX + flickable.width < (row.currentItem.x - row.contentX) + row.currentItem.width) {
143+ d.alignmentAdjustment += ((row.currentItem.x - row.contentX) + row.currentItem.width) - (flickable.contentX + flickable.width);
142144 }
143145 } else {
144146 // gap between left and row?
@@ -155,12 +157,12 @@ Item {
155157 d.alignmentAdjustment -= flickable.contentX;
156158
157159 // current item overlap on left
158− } else if (row.currentItem && (flickable.contentX + flickable.width) < (row.width - row.currentItem.x)) {
159− d.alignmentAdjustment += ((row.width - row.currentItem.x) - (flickable.contentX + flickable.width));
160+ } else if (row.currentItem && (flickable.contentX + flickable.width) < (row.width - (row.currentItem.x - row.contentX))) {
161+ d.alignmentAdjustment += ((row.width - (row.currentItem.x - row.contentX)) - (flickable.contentX + flickable.width));
160162
161163 // current item overlap on right
162− } else if (row.currentItem && flickable.contentX > (row.width - row.currentItem.x - row.currentItem.width)) {
163− d.alignmentAdjustment -= flickable.contentX - (row.width - row.currentItem.x - row.currentItem.width);
164+ } else if (row.currentItem && flickable.contentX > (row.width - (row.currentItem.x - row.contentX) - row.currentItem.width)) {
165+ d.alignmentAdjustment -= flickable.contentX - (row.width - (row.currentItem.x - row.contentX) - row.currentItem.width);
164166 }
165167 }
166168 }