]> cloud.milkyroute.net Git - dolphin.git/blobdiff - src/klistview.cpp
Let deselect items individually using Ctrl+Click
[dolphin.git] / src / klistview.cpp
index df8150a11c2bf9ff233a244f0dc46f55ae04a546..206853530efcede4ada4e890d2dc90fda9273351 100644 (file)
@@ -399,8 +399,8 @@ void KListView::Private::drawDraggedItems(QPainter *painter)
     option.state &= ~QStyle::State_MouseOver;
     foreach (const QModelIndex &index, listView->selectionModel()->selectedIndexes())
     {
-        int dx = mousePosition.x() - initialPressPosition.x();
-        int dy = mousePosition.y() - initialPressPosition.y();
+        int dx = mousePosition.x() - initialPressPosition.x() + listView->horizontalOffset();
+        int dy = mousePosition.y() - initialPressPosition.y() + listView->verticalOffset();
 
         option.rect = visualRect(index);
         option.rect.adjust(dx, dy, dx, dy);
@@ -699,6 +699,7 @@ void KListView::setSelection(const QRect &rect,
     }
 
     QItemSelection selection;
+    QItemSelection deselect;
     QModelIndexList dirtyIndexes = d->intersectionSet(rect);
     foreach (const QModelIndex &index, dirtyIndexes)
     {
@@ -707,9 +708,15 @@ void KListView::setSelection(const QRect &rect,
             if (d->isIndexSelected.contains(index))
             {
                 if (!d->isIndexSelected[index])
+                {
                     selection.select(index, index);
-
-                d->isIndexSelected[index] = true;
+                    d->isIndexSelected[index] = true;
+                }
+                else
+                {
+                    deselect.select(index, index);
+                    d->isIndexSelected[index] = false;
+                }
             }
             else
             {
@@ -747,8 +754,6 @@ void KListView::setSelection(const QRect &rect,
         }
     }
 
-    QItemSelection deselect;
-
     foreach (const QModelIndex &index, d->isIndexSelected.keys())
     {
         if (!rect.intersects(visualRect(index)))