From: romibi Date: Tue, 23 Jan 2018 00:17:42 +0000 (+0100) Subject: Improve channel navigation shortcut in some cases X-Git-Tag: travis-deploy-test~128 X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=commitdiff_plain;h=a25f1db4e6c59cdfb82a5d485add8a5597968279 Improve channel navigation shortcut in some cases Select first/last if nothing selected yet Enable wrap around navigation Closes GH-323. --- diff --git a/src/uisupport/bufferview.cpp b/src/uisupport/bufferview.cpp index 7d7490f5..8387f025 100644 --- a/src/uisupport/bufferview.cpp +++ b/src/uisupport/bufferview.cpp @@ -501,6 +501,8 @@ void BufferView::changeBuffer(Direction direction) QModelIndex currentIndex = selectionModel()->currentIndex(); QModelIndex resultingIndex; + QModelIndex lastNetIndex = model()->index(model()->rowCount() - 1, 0, QModelIndex()); + if (currentIndex.parent().isValid()) { //If we are a child node just switch among siblings unless it's the first/last child resultingIndex = currentIndex.sibling(currentIndex.row() + direction, 0); @@ -517,6 +519,8 @@ void BufferView::changeBuffer(Direction direction) //If we have a toplevel node, try and get an adjacent child if (direction == Backward) { QModelIndex newParent = currentIndex.sibling(currentIndex.row() - 1, 0); + if (currentIndex.row() == 0) + newParent = lastNetIndex; if (model()->hasChildren(newParent)) resultingIndex = newParent.child(model()->rowCount(newParent) - 1, 0); else @@ -530,8 +534,12 @@ void BufferView::changeBuffer(Direction direction) } } - if (!resultingIndex.isValid()) - return; + if (!resultingIndex.isValid()) { + if (direction == Forward) + resultingIndex = model()->index(0, 0, QModelIndex()); + else + resultingIndex = lastNetIndex.child(model()->rowCount(lastNetIndex) - 1, 0); + } selectionModel()->setCurrentIndex(resultingIndex, QItemSelectionModel::ClearAndSelect | QItemSelectionModel::Rows); selectionModel()->select(resultingIndex, QItemSelectionModel::ClearAndSelect);