]> cloud.milkyroute.net Git - dolphin.git/blobdiff - src/dolphindetailsview.cpp
When collapsing nodes that made the scrollbar bigger, it didnt became smaller. I...
[dolphin.git] / src / dolphindetailsview.cpp
index 68b288b0b96f2375e499e98315f61ce49c4904cc..36ea99ad82fdbb96d2de413cb7dbc2e4df42b1c7 100644 (file)
@@ -199,9 +199,27 @@ void DolphinDetailsView::mousePressEvent(QMouseEvent* event)
 
 void DolphinDetailsView::mouseMoveEvent(QMouseEvent* event)
 {
-    QTreeView::mouseMoveEvent(event);
     if (m_showElasticBand) {
+        const QPoint mousePos = event->pos();
+        const QModelIndex index = indexAt(mousePos);
+        if (!index.isValid()) {
+            // the destination of the selection rectangle is above the viewport. In this
+            // case QTreeView does no selection at all, which is not the wanted behavior
+            // in Dolphin -> select all items within the elastic band rectangle
+            clearSelection();
+
+            const int nameColumnWidth = header()->sectionSize(DolphinModel::Name);
+            QRect selRect = QRect(m_elasticBandOrigin, m_elasticBandDestination).normalized();
+            const QRect nameColumnsRect(0, 0, nameColumnWidth, viewport()->height());
+            selRect = nameColumnsRect.intersected(selRect);
+
+            setSelection(selRect, QItemSelectionModel::Select);
+        }
+
+        QTreeView::mouseMoveEvent(event);
         updateElasticBand();
+    } else {
+        QTreeView::mouseMoveEvent(event);
     }
 }
 
@@ -384,11 +402,12 @@ void DolphinDetailsView::slotEntered(const QModelIndex& index)
 
 void DolphinDetailsView::updateElasticBand()
 {
-    Q_ASSERT(m_showElasticBand);
-    QRect dirtyRegion(elasticBandRect());
-    m_elasticBandDestination = viewport()->mapFromGlobal(QCursor::pos());
-    dirtyRegion = dirtyRegion.united(elasticBandRect());
-    setDirtyRegion(dirtyRegion);
+    if (m_showElasticBand) {
+        QRect dirtyRegion(elasticBandRect());
+        m_elasticBandDestination = viewport()->mapFromGlobal(QCursor::pos());
+        dirtyRegion = dirtyRegion.united(elasticBandRect());
+        setDirtyRegion(dirtyRegion);
+    }
 }
 
 QRect DolphinDetailsView::elasticBandRect() const