diff -r 08e69e956a8c -r 71dd06cfe933 uifw/EikStd/coctlsrc/EIKLBV.CPP --- a/uifw/EikStd/coctlsrc/EIKLBV.CPP Wed Mar 31 21:59:52 2010 +0300 +++ b/uifw/EikStd/coctlsrc/EIKLBV.CPP Wed Apr 14 16:14:00 2010 +0300 @@ -815,6 +815,11 @@ } else // items will get redrawn anyway { + // As the iVerticalOffset is changed in CalcNewTopItemIndexSoItemIsVisible(), + // and ScrollToMakeItemVisible() will call the CalcNewTopItemIndexSoItemIsVisible() again, + // which will use iVerticalOffset to do some judgementes, + // we must set iVerticalOffset back to original value. + iVerticalOffset = oldVerticalOffset; ScrollToMakeItemVisible(iCurrentItemIndex); } UpdateSelectionL(aSelectionMode); @@ -1187,6 +1192,12 @@ newTopItemIndex = aItemIndex; else if (aItemIndex > iBottomItemIndex) newTopItemIndex = aItemIndex - numItemsThatFitInRect + 1; + else if ( ( iVerticalOffset < 0 ) + && ( aItemIndex == iBottomItemIndex ) + && ( 0 == iViewRect.Height() % iItemHeight ) ) + { + newTopItemIndex += 1; + } if (!ITEM_EXISTS_ONCE(newTopItemIndex) && newTopItemIndex != 0 ) { // if application fails to call HandleItemAdditionL(), we might go here.