X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/123e5008ae1feba49a4a2d2ca5cf3bf97fda30ac..6b42e7ba3b87af93d17f714d05ff2ddb09d13519:/src/klistview.cpp diff --git a/src/klistview.cpp b/src/klistview.cpp index fa78de638..347055df7 100644 --- a/src/klistview.cpp +++ b/src/klistview.cpp @@ -395,18 +395,40 @@ void KListView::Private::drawDraggedItems(QPainter *painter) { QStyleOptionViewItemV3 option = listView->viewOptions(); option.state &= ~QStyle::State_MouseOver; + foreach (const QModelIndex &index, listView->selectionModel()->selectedIndexes()) + { + const int dx = mousePosition.x() - initialPressPosition.x() + listView->horizontalOffset(); + const int dy = mousePosition.y() - initialPressPosition.y() + listView->verticalOffset(); + + option.rect = visualRect(index); + option.rect.adjust(dx, dy, dx, dy); + + listView->itemDelegate(index)->paint(painter, option, index); + } +} + +void KListView::Private::drawDraggedItems() +{ int dx; int dy; + QRect rectToUpdate; + QRect currentRect; foreach (const QModelIndex &index, listView->selectionModel()->selectedIndexes()) { dx = mousePosition.x() - initialPressPosition.x() + listView->horizontalOffset(); dy = mousePosition.y() - initialPressPosition.y() + listView->verticalOffset(); - option.rect = visualRect(index); - option.rect.adjust(dx, dy, dx, dy); + currentRect = visualRect(index); + currentRect.adjust(dx, dy, dx, dy); - listView->itemDelegate(index)->paint(painter, option, index); + rectToUpdate = rectToUpdate.united(currentRect); } + + listView->viewport()->update(lastDraggedItemsRect); + + lastDraggedItemsRect = rectToUpdate; + + listView->viewport()->update(rectToUpdate); } @@ -613,19 +635,6 @@ void KListView::paintEvent(QPaintEvent *event) itemDelegate(index)->paint(&painter, option, index); } - // Redraw categories - QStyleOptionViewItem otherOption; - foreach (const QString &category, d->categories) - { - otherOption = option; - otherOption.rect = d->categoryVisualRect(category); - - if (otherOption.rect.intersects(area)) - { - d->drawNewCategory(category, otherOption, &painter); - } - } - if (d->mouseButtonPressed && !d->isDragging) { QPoint start, end, initialPressPosition; @@ -657,6 +666,19 @@ void KListView::paintEvent(QPaintEvent *event) painter.restore(); } + // Redraw categories + QStyleOptionViewItem otherOption; + foreach (const QString &category, d->categories) + { + otherOption = option; + otherOption.rect = d->categoryVisualRect(category); + + if (otherOption.rect.intersects(area)) + { + d->drawNewCategory(category, otherOption, &painter); + } + } + if (d->isDragging && !d->dragLeftViewport) { painter.setOpacity(0.5); @@ -777,6 +799,37 @@ void KListView::mouseMoveEvent(QMouseEvent *event) viewport()->update(d->categoryVisualRect(category)); } + + QRect rect; + if (d->mouseButtonPressed && !d->isDragging) + { + QPoint start, end, initialPressPosition; + + initialPressPosition = d->initialPressPosition; + + initialPressPosition.setY(initialPressPosition.y() - verticalOffset()); + initialPressPosition.setX(initialPressPosition.x() - horizontalOffset()); + + if (d->initialPressPosition.x() > d->mousePosition.x() || + d->initialPressPosition.y() > d->mousePosition.y()) + { + start = d->mousePosition; + end = initialPressPosition; + } + else + { + start = initialPressPosition; + end = d->mousePosition; + } + + viewport()->update(d->lastSelectionRect); + + rect = QRect(start, end).intersected(viewport()->rect().adjusted(-16, -16, 16, 16)); + + viewport()->update(rect); + + d->lastSelectionRect = rect; + } } void KListView::mousePressEvent(QMouseEvent *event) @@ -890,6 +943,8 @@ void KListView::dragMoveEvent(QDragMoveEvent *event) } d->dragLeftViewport = false; + + d->drawDraggedItems(); } void KListView::dragLeaveEvent(QDragLeaveEvent *event) @@ -936,6 +991,8 @@ void KListView::rowsInsertedArtifficial(const QModelIndex &parent, int start, int end) { + Q_UNUSED(parent); + d->lastSelection = QItemSelection(); d->elementsInfo.clear(); d->elementsPosition.clear();