]> cloud.milkyroute.net Git - dolphin.git/commitdiff
Restore behaviour (I don't have an old version to check against, though!) - if CTRL...
authorSimon Paul St James <kdedevel@etotheipiplusone.com>
Mon, 27 Oct 2008 20:55:54 +0000 (20:55 +0000)
committerSimon Paul St James <kdedevel@etotheipiplusone.com>
Mon, 27 Oct 2008 20:55:54 +0000 (20:55 +0000)
CCMAIL : peter.penz@gmx.at

svn path=/trunk/KDE/kdebase/apps/; revision=876690

src/dolphindetailsview.cpp
src/dolphindetailsview.h

index 8aff93bfa4804641f39f9fe2b213bd02b999b75a..a40e6236d8f9320b21e606c5f3e80f59e89dc511 100644 (file)
@@ -245,6 +245,7 @@ void DolphinDetailsView::mousePressEvent(QMouseEvent* event)
             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();
         }
     } 
 }
@@ -655,7 +656,7 @@ void DolphinDetailsView::updateElasticBandSelection()
     selRect = nameColumnRect.intersect(selRect).normalized();
 
     if (selRect.isNull()) {
-        clearSelection();
+        selectionModel()->select(m_band.originalSelection, QItemSelectionModel::ClearAndSelect);
         m_band.ignoreOldInfo = true;
         return;
     }
@@ -718,7 +719,7 @@ void DolphinDetailsView::updateElasticBandSelection()
         startIndex = model()->index(startIndex.row(), KDirModel::Name);
     }
     if (!startIndex.isValid()) {
-        clearSelection();
+        selectionModel()->select(m_band.originalSelection, QItemSelectionModel::ClearAndSelect);
         m_band.ignoreOldInfo = true;
         return;
     }
@@ -764,8 +765,10 @@ void DolphinDetailsView::updateElasticBandSelection()
        }
 
        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;
index e974635e58cb1844aaee25699b9cee2cba0bb08f..f564773bc6f23abb4106212e75c02723deac0bb5 100644 (file)
@@ -212,6 +212,9 @@ private:
         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;
 };