]> cloud.milkyroute.net Git - dolphin.git/blobdiff - src/kcategorizedview.cpp
Use the same codebase for rating drawing as in KRatingWidget and playground/nepomuk.
[dolphin.git] / src / kcategorizedview.cpp
index 03002d30378280b8df37734f161685d973d9aa19..152573214d32a1f0c129315218886ae4b21433ef 100644 (file)
 // Qt 4.4, so that this workaround can be skipped.
 #define DOLPHIN_DRAGANDDROP
 
+// By defining KDE_WORKAROUND_FOR_QT_VIEW_BUG we save the selection being held
+// before mousePressEvent happens. On Qt there is something clearing the last
+// selection made, what make it impossible to save our very last selection.
+#define KDE_WORKAROUND_FOR_QT_VIEW_BUG
+
 KCategorizedView::Private::Private(KCategorizedView *listView)
     : listView(listView)
     , categoryDrawer(0)
@@ -1038,7 +1043,13 @@ void KCategorizedView::mousePressEvent(QMouseEvent *event)
                                                             horizontalOffset());
     }
 
+#ifdef KDE_WORKAROUND_FOR_QT_VIEW_BUG
+    QItemSelection prevSelection = selectionModel()->selection();
+#endif
     QListView::mousePressEvent(event);
+#ifdef KDE_WORKAROUND_FOR_QT_VIEW_BUG
+    selectionModel()->select(prevSelection, QItemSelectionModel::Select);
+#endif
 
     viewport()->update(d->categoryVisualRect(d->hoveredCategory));
 }
@@ -1059,37 +1070,28 @@ void KCategorizedView::mouseReleaseEvent(QMouseEvent *event)
     initialPressPosition.setY(initialPressPosition.y() + verticalOffset());
     initialPressPosition.setX(initialPressPosition.x() + horizontalOffset());
 
-    QItemSelection selection;
-    QItemSelection deselection;
-#if 0
     if (initialPressPosition == d->initialPressPosition)
     {
         foreach(const QString &category, d->categories)
         {
             if (d->categoryVisualRect(category).contains(event->pos()))
             {
-                foreach (const QModelIndex &index, d->categoriesIndexes[category])
+                QItemSelection selection;
+                QModelIndexList indexList = d->categoriesIndexes[category];
+
+                foreach (const QModelIndex &index, indexList)
                 {
                     QModelIndex selectIndex = index.model()->index(index.row(), 0);
 
-                    if (/*!d->lastSelection.contains(selectIndex)*/)
-                    {
-                        selection << QItemSelectionRange(selectIndex);
-                    }
-                    else
-                    {
-                        deselection << QItemSelectionRange(selectIndex);
-                    }
+                    selection << QItemSelectionRange(selectIndex);
                 }
 
-                selectionModel()->select(selection, QItemSelectionModel::Select);
-                selectionModel()->select(deselection, QItemSelectionModel::Deselect);
+                selectionModel()->select(selection, QItemSelectionModel::SelectCurrent);
 
                 break;
             }
         }
     }
-#endif
 
     if (d->hovered.isValid())
         viewport()->update(visualRect(d->hovered));