{
if ((!currentItem && highlight) || (currentItem && !highlight))
createHighlight();
- if (currentItem && autoHighlight && highlight && !movingHorizontally && !movingVertically) {
+ bool strictHighlight = haveHighlightRange && highlightRange == QSGGridView::StrictlyEnforceRange;
+ if (currentItem && autoHighlight && highlight && (!strictHighlight || !pressed)) {
// auto-update highlight
highlightXAnimator->to = currentItem->item->x();
highlightYAnimator->to = currentItem->item->y();
if (pos < viewPos + highlightStart)
pos = viewPos + highlightStart;
- static_cast<FxGridItemSG*>(d->highlight)->setPosition(static_cast<FxGridItemSG*>(d->highlight)->colPos(), qRound(pos));
+ if (pos != d->highlight->position()) {
+ d->highlightXAnimator->stop();
+ d->highlightYAnimator->stop();
+ static_cast<FxGridItemSG*>(d->highlight)->setPosition(static_cast<FxGridItemSG*>(d->highlight)->colPos(), pos);
+ } else {
+ d->updateHighlight();
+ }
// update current index
int idx = d->snapIndex();
{
if ((!currentItem && highlight) || (currentItem && !highlight))
createHighlight();
- if (currentItem && autoHighlight && highlight && !movingHorizontally && !movingVertically) {
+ bool strictHighlight = haveHighlightRange && highlightRange == QSGListView::StrictlyEnforceRange;
+ if (currentItem && autoHighlight && highlight && (!strictHighlight || !pressed)) {
// auto-update highlight
FxListItemSG *listItem = static_cast<FxListItemSG*>(currentItem);
highlightPosAnimator->to = isRightToLeft()
pos = viewPos + highlightEnd - d->highlight->size();
if (pos < viewPos + highlightStart)
pos = viewPos + highlightStart;
- d->highlightPosAnimator->stop();
- static_cast<FxListItemSG*>(d->highlight)->setPosition(qRound(pos));
+ if (pos != d->highlight->position()) {
+ d->highlightPosAnimator->stop();
+ static_cast<FxListItemSG*>(d->highlight)->setPosition(pos);
+ } else {
+ d->updateHighlight();
+ }
// update current index
if (FxViewItem *snapItem = d->snapItemAt(d->highlight->position())) {