]> cloud.milkyroute.net Git - dolphin.git/blobdiff - src/klistview.cpp
Better drawing when big selection rect is drawn.
[dolphin.git] / src / klistview.cpp
index 403e984a295ce4b96d27392fa23d18d4367df30e..526fb8dfcdf94bca5201f63eb0b4be1e45aef825 100644 (file)
@@ -637,19 +637,6 @@ void KListView::paintEvent(QPaintEvent *event)
         itemDelegate(index)->paint(&painter, option, index);
     }
 
-    // Redraw categories
-    QStyleOptionViewItem otherOption;
-    foreach (const QString &category, d->categories)
-    {
-        otherOption = option;
-        otherOption.rect = d->categoryVisualRect(category);
-
-        if (otherOption.rect.intersects(area))
-        {
-            d->drawNewCategory(category, otherOption, &painter);
-        }
-    }
-
     if (d->mouseButtonPressed && !d->isDragging)
     {
         QPoint start, end, initialPressPosition;
@@ -681,6 +668,19 @@ void KListView::paintEvent(QPaintEvent *event)
         painter.restore();
     }
 
+    // Redraw categories
+    QStyleOptionViewItem otherOption;
+    foreach (const QString &category, d->categories)
+    {
+        otherOption = option;
+        otherOption.rect = d->categoryVisualRect(category);
+
+        if (otherOption.rect.intersects(area))
+        {
+            d->drawNewCategory(category, otherOption, &painter);
+        }
+    }
+
     if (d->isDragging && !d->dragLeftViewport)
     {
         painter.setOpacity(0.5);
@@ -801,6 +801,37 @@ void KListView::mouseMoveEvent(QMouseEvent *event)
 
         viewport()->update(d->categoryVisualRect(category));
     }
+
+    QRect rect;
+    if (d->mouseButtonPressed && !d->isDragging)
+    {
+        QPoint start, end, initialPressPosition;
+
+        initialPressPosition = d->initialPressPosition;
+
+        initialPressPosition.setY(initialPressPosition.y() - verticalOffset());
+        initialPressPosition.setX(initialPressPosition.x() - horizontalOffset());
+
+        if (d->initialPressPosition.x() > d->mousePosition.x() ||
+            d->initialPressPosition.y() > d->mousePosition.y())
+        {
+            start = d->mousePosition;
+            end = initialPressPosition;
+        }
+        else
+        {
+            start = initialPressPosition;
+            end = d->mousePosition;
+        }
+
+        viewport()->update(d->lastSelectionRect);
+
+        rect = QRect(start, end).intersected(viewport()->rect().adjusted(-16, -16, 16, 16));
+
+        viewport()->update(rect);
+
+        d->lastSelectionRect = rect;
+    }
 }
 
 void KListView::mousePressEvent(QMouseEvent *event)