X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fuisupport%2Fbufferview.cpp;h=b5f5a573365559011f5ae2d1e0b270a7919129dd;hp=b2fbc0fb3b8de96d09d2490574c2646317bfde54;hb=a4251618e99c35f727c526f8480055d5a9c5e41f;hpb=c80e9d81bfecf4126ed5a0a8b34802aa320ade0c diff --git a/src/uisupport/bufferview.cpp b/src/uisupport/bufferview.cpp index b2fbc0fb..b5f5a573 100644 --- a/src/uisupport/bufferview.cpp +++ b/src/uisupport/bufferview.cpp @@ -65,11 +65,14 @@ void BufferView::init() { hideColumn(1); hideColumn(2); setIndentation(10); + expandAll(); header()->hide(); // nobody seems to use this anyway - setAnimated(true); + // breaks with Qt 4.8 + if(QString("4.8.0") > qVersion()) // FIXME breaks with Qt versions >= 4.10! + setAnimated(true); // FIXME This is to workaround bug #663 setUniformRowHeights(true); @@ -439,20 +442,37 @@ void BufferView::previousBuffer() { void BufferView::changeBuffer(Direction direction) { QModelIndex currentIndex = selectionModel()->currentIndex(); QModelIndex resultingIndex; - if(model()->hasIndex( currentIndex.row() + direction, currentIndex.column(), currentIndex.parent())) - resultingIndex = currentIndex.sibling(currentIndex.row() + direction, currentIndex.column()); - - else { - //if we scroll into a the parent node... - QModelIndex parent = currentIndex.parent(); - QModelIndex aunt = parent.sibling(parent.row() + direction, parent.column()); - if(direction == Backward) - resultingIndex = aunt.child(model()->rowCount(aunt) - 1, 0); - else - resultingIndex = aunt.child(0, 0); - if(!resultingIndex.isValid()) - return; + + 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); + + if(!resultingIndex.isValid()) { + QModelIndex parent = currentIndex.parent(); + if(direction == Backward) + resultingIndex = parent; + else + resultingIndex = parent.sibling(parent.row() + direction, 0); + } + } else { + //If we have a toplevel node, try and get an adjacent child + if(direction == Backward) { + QModelIndex newParent = currentIndex.sibling(currentIndex.row() - 1, 0); + if(model()->hasChildren(newParent)) + resultingIndex = newParent.child(model()->rowCount(newParent) - 1, 0); + else + resultingIndex = newParent; + } else { + if(model()->hasChildren(currentIndex)) + resultingIndex = currentIndex.child(0, 0); + else + resultingIndex = currentIndex.sibling(currentIndex.row() + 1, 0); + } } + + if(!resultingIndex.isValid()) + return; + selectionModel()->setCurrentIndex( resultingIndex, QItemSelectionModel::ClearAndSelect | QItemSelectionModel::Rows ); selectionModel()->select( resultingIndex, QItemSelectionModel::ClearAndSelect ); }