src/gui/itemviews/qitemselectionmodel.cpp
changeset 3 41300fa6a67c
parent 0 1918ee327afb
child 4 3b1da2848fc7
--- a/src/gui/itemviews/qitemselectionmodel.cpp	Tue Jan 26 12:42:25 2010 +0200
+++ b/src/gui/itemviews/qitemselectionmodel.cpp	Tue Feb 02 00:43:10 2010 +0200
@@ -599,7 +599,7 @@
             while (itParent.isValid() && itParent.parent() != parent)
                 itParent = itParent.parent();
 
-            if (parent.isValid() && start <= itParent.row() && itParent.row() <= end) {
+            if (itParent.isValid() && start <= itParent.row() && itParent.row() <= end) {
                 deselected.append(*it);
                 it = ranges.erase(it);
             } else {
@@ -730,13 +730,14 @@
     savedPersistentIndexes.clear();
     savedPersistentCurrentIndexes.clear();
 
-    // special case for when all indexes are selected
+    // optimisation for when all indexes are selected
+    // (only if there is lots of items (1000) because this is not entirely correct)
     if (ranges.isEmpty() && currentSelection.count() == 1) {
         QItemSelectionRange range = currentSelection.first();
         QModelIndex parent = range.parent();
         tableRowCount = model->rowCount(parent);
         tableColCount = model->columnCount(parent);
-        if (tableRowCount * tableColCount > 100
+        if (tableRowCount * tableColCount > 1000
             && range.top() == 0
             && range.left() == 0
             && range.bottom() == tableRowCount - 1
@@ -1587,7 +1588,8 @@
         }
     }
 
-    emit selectionChanged(selected, deselected);
+    if (!selected.isEmpty() || !deselected.isEmpty())
+        emit selectionChanged(selected, deselected);
 }
 
 #ifndef QT_NO_DEBUG_STREAM