From: Frank Reininghaus Date: Wed, 9 Dec 2009 18:38:54 +0000 (+0000) Subject: Rename Dolphin View's nameColumnRect member to visualRect. X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/commitdiff_plain/f5deeadebbb67b4b20eae13f55e0ef66f4127eea Rename Dolphin View's nameColumnRect member to visualRect. This overrides QTreeView::visualRect, such that the "visual rect" matches the area used in indexAt. Fixes the problem that the selection loses items in the Details View when selecting new items with Shift+Keyboard. BUG: 217447 svn path=/trunk/KDE/kdebase/apps/; revision=1060716 --- diff --git a/src/dolphindetailsview.cpp b/src/dolphindetailsview.cpp index bc1598541..1bf5f75e0 100644 --- a/src/dolphindetailsview.cpp +++ b/src/dolphindetailsview.cpp @@ -445,10 +445,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 +803,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 +1006,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 +1014,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()); diff --git a/src/dolphindetailsview.h b/src/dolphindetailsview.h index f9a795560..30e126cd4 100644 --- a/src/dolphindetailsview.h +++ b/src/dolphindetailsview.h @@ -72,6 +72,7 @@ protected: virtual void currentChanged(const QModelIndex& current, const QModelIndex& previous); virtual bool eventFilter(QObject* watched, QEvent* event); virtual QModelIndex indexAt (const QPoint& point) const; + virtual QRect visualRect(const QModelIndex& index) const; virtual void setSelection(const QRect& rect, QItemSelectionModel::SelectionFlags command); virtual void scrollTo(const QModelIndex& index, ScrollHint hint = EnsureVisible); @@ -206,8 +207,6 @@ private: */ void resizeColumns(); - QRect nameColumnRect(const QModelIndex& index) const; - /** * Returns true, if \a pos is within the expanding toggle of a tree. */