@@ -119,12 +119,6 @@ Rectangle {
119119 // need to be smaller than this size to avoid breakage.
120120 property int extensionSize: 0
121121
122− // These properties are needed to facilitate implicitly unfolding the
123− // launcher to the peeking icon, if it is not already fully flat
124− // and in view for the user
125− property real moveToIndexYFrom
126− property real moveToIndexYTo
127−
128122 // Setting extensionSize after the list has been populated because it has
129123 // the potential to mess up with the intial positioning in combination
130124 // with snapping to the center of the list. This catches all the cases
@@ -138,14 +132,6 @@ Rectangle {
138132 flick(0, clickFlickSpeed)
139133 }
140134
141− UbuntuNumberAnimation {
142− id: moveToIndexAnimation
143− target: launcherListView
144− property: "contentY"
145− from: launcherListView.moveToIndexYFrom
146− to: launcherListView.moveToIndexYTo
147− }
148−
149135 // The height of the area where icons start getting folded
150136 property int foldingStartHeight: units.gu(6.5)
151137 // The height of the area where the items reach the final folding angle
@@ -177,6 +163,17 @@ Rectangle {
177163 to: launcherListView.contentHeight - launcherListView.height + launcherListView.originY - launcherListView.topMargin
178164 }
179165
166+ UbuntuNumberAnimation {
167+ id: moveAnimation
168+ target: launcherListView
169+ property: "contentY"
170+ function moveTo(contentY) {
171+ from = launcherListView.contentY;
172+ to = contentY;
173+ start();
174+ }
175+ }
176+
180177 displaced: Transition {
181178 NumberAnimation { properties: "x,y"; duration: UbuntuAnimation.FastDuration; easing: UbuntuAnimation.StandardEasing }
182179 }
@@ -236,10 +233,14 @@ Rectangle {
236233 onAlertingChanged: {
237234 if(alerting) {
238235 if (!dragging && (launcherListView.peekingIndex === -1 || launcher.visibleWidth > 0)) {
239− launcherListView.moveToIndexYFrom = launcherListView.contentY
240− launcherListView.positionViewAtIndex(index, ListView.Center)
241− launcherListView.moveToIndexYTo = launcherListView.contentY
242− moveToIndexAnimation.start()
236+ var itemPosition = index * launcherListView.itemHeight;
237+ var height = launcherListView.height - launcherListView.topMargin - launcherListView.bottomMargin
238+ var distanceToEnd = index == 0 || index == launcherListView.count - 1 ? 0 : launcherListView.itemHeight
239+ if (itemPosition + launcherListView.itemHeight + distanceToEnd > launcherListView.contentY + launcherListView.topMargin + height) {
240+ moveAnimation.moveTo(itemPosition + launcherListView.itemHeight - launcherListView.topMargin - height + distanceToEnd);
241+ } else if (itemPosition - distanceToEnd < launcherListView.contentY + launcherListView.topMargin) {
242+ moveAnimation.moveTo(itemPosition - distanceToEnd - launcherListView.topMargin);
243+ }
243244 if (!dragging && launcher.state !== "visible") {
244245 peekingAnimation.start()
245246 }