]> cloud.milkyroute.net Git - dolphin.git/blobdiff - src/kcategorizedview.cpp
Fix crash when category view is enabled if there are no categories in KCategorizedVie...
[dolphin.git] / src / kcategorizedview.cpp
index d250c42c90d585c4094b5423f0964da260bad3d9..39d04772488227940c34bfc601b839f185acbe5f 100644 (file)
@@ -83,7 +83,6 @@ KCategorizedView::Private::Private(KCategorizedView *listView)
     , isDragging(false)
     , dragLeftViewport(false)
     , proxyModel(0)
-    , lastIndex(QModelIndex())
 {
 }
 
@@ -388,6 +387,9 @@ void KCategorizedView::Private::drawNewCategory(const QModelIndex &index,
 
 void KCategorizedView::Private::updateScrollbars()
 {
+    // find the last index in the last category 
+    QModelIndex lastIndex = categoriesIndexes.isEmpty() ? QModelIndex() : categoriesIndexes[categories.last()].last(); 
+
     int lastItemBottom = cachedRectIndex(lastIndex).top() +
                          listView->spacing() + (listView->gridSize().isEmpty() ? 0 : listView->gridSize().height()) - listView->viewport()->height();
 
@@ -998,8 +1000,11 @@ void KCategorizedView::dragLeaveEvent(QDragLeaveEvent *event)
 QModelIndex KCategorizedView::moveCursor(CursorAction cursorAction,
                                   Qt::KeyboardModifiers modifiers)
 {
-    if ((viewMode() != KCategorizedView::IconMode) || !d->proxyModel ||
-        !d->itemCategorizer)
+    if (    (viewMode() != KCategorizedView::IconMode) || 
+            !d->proxyModel ||
+            !d->itemCategorizer || 
+            d->categories.isEmpty()     
+       )
     {
         return QListView::moveCursor(cursorAction, modifiers);
     }
@@ -1021,9 +1026,10 @@ QModelIndex KCategorizedView::moveCursor(CursorAction cursorAction,
     int itemWidthPlusSeparation = spacing() + itemWidth;
     int elementsPerRow = viewportWidth / itemWidthPlusSeparation;
 
-    QString lastCategory = d->categories[0];
-    QString theCategory = d->categories[0];
-    QString afterCategory = d->categories[0];
+    QString lastCategory = d->categories.first();
+    QString theCategory = d->categories.first();
+    QString afterCategory = d->categories.first();
+
     bool hasToBreak = false;
     foreach (const QString &category, d->categories)
     {
@@ -1243,8 +1249,6 @@ void KCategorizedView::rowsInsertedArtifficial(const QModelIndex &parent,
         qStableSort(indexList.begin(), indexList.end(), categoryLessThan);
     }
 
-    d->lastIndex = d->categoriesIndexes[d->categories[d->categories.count() - 1]][d->categoriesIndexes[d->categories[d->categories.count() - 1]].count() - 1];
-
     // Finally, fill data information of items situation. This will help when
     // trying to compute an item place in the viewport
     int i = 0; // position relative to the category beginning