X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fuisupport%2Fbufferview.cpp;fp=src%2Fuisupport%2Fbufferview.cpp;h=f5db3e29c25b4ee8777fd4c5a333d02cae9bf3d3;hp=4af58a3d50aed5c762af88128ca3d80e7486c56c;hb=47b54cd3ad35201ff2ab9ef6bfdba83fc086558d;hpb=0b277c98276e042f472e96f3eef9297a04f214f8 diff --git a/src/uisupport/bufferview.cpp b/src/uisupport/bufferview.cpp index 4af58a3d..f5db3e29 100644 --- a/src/uisupport/bufferview.cpp +++ b/src/uisupport/bufferview.cpp @@ -493,14 +493,18 @@ void BufferView::changeBuffer(Direction direction) QModelIndex newParent = currentIndex.sibling(currentIndex.row() - 1, 0); if (currentIndex.row() == 0) newParent = lastNetIndex; - if (model()->hasChildren(newParent)) - resultingIndex = newParent.model()->index(model()->rowCount(newParent) - 1, 0, newParent); + if (model()->hasChildren(newParent)) { + // Treat an invalid QAbstractItemModel as an invalid QModelIndex + resultingIndex = (newParent.model() ? newParent.model()->index(model()->rowCount(newParent) - 1, 0, newParent) : QModelIndex()); + } else resultingIndex = newParent; } else { - if (model()->hasChildren(currentIndex)) - resultingIndex = currentIndex.model()->index(0, 0, currentIndex); + if (model()->hasChildren(currentIndex)) { + // Treat an invalid QAbstractItemModel as an invalid QModelIndex + resultingIndex = (currentIndex.model() ? currentIndex.model()->index(0, 0, currentIndex) : QModelIndex()); + } else resultingIndex = currentIndex.sibling(currentIndex.row() + 1, 0); } @@ -509,8 +513,10 @@ void BufferView::changeBuffer(Direction direction) if (!resultingIndex.isValid()) { if (direction == Forward) resultingIndex = model()->index(0, 0, QModelIndex()); - else + else { + // Assume model is valid resultingIndex = lastNetIndex.model()->index(model()->rowCount(lastNetIndex) - 1, 0, lastNetIndex); + } } selectionModel()->setCurrentIndex(resultingIndex, QItemSelectionModel::ClearAndSelect | QItemSelectionModel::Rows);