X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/487215f0c459ca38c68619325edac4a2fe42ca4b..d35964345eeeeaf261ecbd9679b752db6eb49e8f:/src/dolphindetailsview.cpp diff --git a/src/dolphindetailsview.cpp b/src/dolphindetailsview.cpp index bc1598541..476ed9a3b 100644 --- a/src/dolphindetailsview.cpp +++ b/src/dolphindetailsview.cpp @@ -171,6 +171,21 @@ QSet DolphinDetailsView::expandedUrls() const return m_expandedUrls; } +QRegion DolphinDetailsView::visualRegionForSelection(const QItemSelection &selection) const +{ + // We have to make sure that the visualRect of each model index is inside the region. + // QTreeView::visualRegionForSelection does not do it right because it assumes implicitly + // that all visualRects have the same width, which is in general not the case here. + QRegion selectionRegion; + const QModelIndexList indexes = selection.indexes(); + + foreach(const QModelIndex& index, indexes) { + selectionRegion += visualRect(index); + } + + return selectionRegion; +} + bool DolphinDetailsView::event(QEvent* event) { if (event->type() == QEvent::Polish) { @@ -185,6 +200,7 @@ QStyleOptionViewItem DolphinDetailsView::viewOptions() const { QStyleOptionViewItem viewOptions = QTreeView::viewOptions(); viewOptions.font = m_font; + viewOptions.fontMetrics = QFontMetrics(m_font); viewOptions.showDecorationSelected = true; viewOptions.decorationSize = m_decorationSize; return viewOptions; @@ -445,10 +461,22 @@ QModelIndex DolphinDetailsView::indexAt(const QPoint& point) const // the blank portion of the name column counts as empty space const QModelIndex index = QTreeView::indexAt(point); const bool isAboveEmptySpace = !m_useDefaultIndexAt && - (index.column() == KDirModel::Name) && !nameColumnRect(index).contains(point); + (index.column() == KDirModel::Name) && !visualRect(index).contains(point); return isAboveEmptySpace ? QModelIndex() : index; } +QRect DolphinDetailsView::visualRect(const QModelIndex& index) const +{ + QRect rect = QTreeView::visualRect(index); + const KFileItem item = m_controller->itemForIndex(index); + if (!item.isNull()) { + const int width = DolphinFileItemDelegate::nameColumnWidth(item.text(), viewOptions()); + rect.setWidth(width); + } + + return rect; +} + void DolphinDetailsView::setSelection(const QRect& rect, QItemSelectionModel::SelectionFlags command) { // We must override setSelection() as Qt calls it internally and when this happens @@ -791,7 +819,7 @@ void DolphinDetailsView::updateElasticBandSelection() QModelIndex toggleIndexRangeBegin = QModelIndex(); do { - QRect currIndexRect = nameColumnRect(currIndex); + QRect currIndexRect = visualRect(currIndex); // Update some optimization info as we go. const int cr = currIndexRect.right(); @@ -994,18 +1022,6 @@ void DolphinDetailsView::resizeColumns() headerView->resizeSection(KDirModel::Name, columnWidth[KDirModel::Name]); } -QRect DolphinDetailsView::nameColumnRect(const QModelIndex& index) const -{ - QRect rect = visualRect(index); - const KFileItem item = m_controller->itemForIndex(index); - if (!item.isNull()) { - const int width = DolphinFileItemDelegate::nameColumnWidth(item.text(), viewOptions()); - rect.setWidth(width); - } - - return rect; -} - bool DolphinDetailsView::isAboveExpandingToggle(const QPoint& pos) const { // QTreeView offers no public API to get the information whether an index has an @@ -1014,7 +1030,7 @@ bool DolphinDetailsView::isAboveExpandingToggle(const QPoint& pos) const if (itemsExpandable()) { const QModelIndex index = QTreeView::indexAt(pos); if (index.isValid() && (index.column() == KDirModel::Name)) { - QRect rect = nameColumnRect(index); + QRect rect = visualRect(index); const int toggleSize = rect.height(); if (isRightToLeft()) { rect.moveRight(rect.right());