const QPoint scrollPos(horizontalScrollBar()->value(), verticalScrollBar()->value());
m_band.origin = event->pos() + pos + scrollPos;
m_band.destination = m_band.origin;
+ m_band.originalSelection = selectionModel()->selection();
}
}
}
selRect = nameColumnRect.intersect(selRect).normalized();
if (selRect.isNull()) {
- clearSelection();
+ selectionModel()->select(m_band.originalSelection, QItemSelectionModel::ClearAndSelect);
m_band.ignoreOldInfo = true;
return;
}
startIndex = model()->index(startIndex.row(), KDirModel::Name);
}
if (!startIndex.isValid()) {
- clearSelection();
+ selectionModel()->select(m_band.originalSelection, QItemSelectionModel::ClearAndSelect);
m_band.ignoreOldInfo = true;
return;
}
}
bool currentlySelected = selectionModel()->isSelected(currIndex);
+ bool originallySelected = m_band.originalSelection.contains(currIndex);
bool intersectsSelectedRect = currIndexRect.intersects(selRect);
- bool needToToggleItem = (currentlySelected && !intersectsSelectedRect) || (!currentlySelected && intersectsSelectedRect);
+ bool shouldBeSelected = (intersectsSelectedRect && !originallySelected) || (!intersectsSelectedRect && originallySelected);
+ bool needToToggleItem = (currentlySelected && !shouldBeSelected) || (!currentlySelected && shouldBeSelected);
if (needToToggleItem && !formingToggleIndexRange) {
toggleIndexRangeBegin = currIndex;
formingToggleIndexRange = true;
int outsideNearestRightEdge;
int insideNearestLeftEdge;
int insideNearestRightEdge;
+ // The set of items that were selected at the time this band was shown.
+ // NOTE: Unless CTRL was pressed when the band was created, this is always empty.
+ QItemSelection originalSelection;
} m_band;
};