diff --git a/autotests/src/kateview_test.cpp b/autotests/src/kateview_test.cpp --- a/autotests/src/kateview_test.cpp +++ b/autotests/src/kateview_test.cpp @@ -354,7 +354,7 @@ void KateViewTest::testScrollPastEndOfDocument() { -#if 0 // bug still exists, see bug 306745 + // bug 306745 KTextEditor::DocumentPrivate doc; doc.setText(QStringLiteral("0000000000\n" "1111111111\n" @@ -384,7 +384,6 @@ QCOMPARE(view->cursorPosition(), KTextEditor::Cursor(4, 5)); // verify, that only lines 3333333333 and 4444444444 are still visible. QCOMPARE(view->firstDisplayedLineInternal(KTextEditor::View::RealLine), 3); -#endif } void KateViewTest::testFoldFirstLine() diff --git a/src/view/kateview.cpp b/src/view/kateview.cpp --- a/src/view/kateview.cpp +++ b/src/view/kateview.cpp @@ -1491,7 +1491,7 @@ x += position.column() - z; } - m_viewInternal->updateCursor(KTextEditor::Cursor(position.line(), x), false, true, calledExternally); + m_viewInternal->updateCursor(KTextEditor::Cursor(position.line(), x), false, false, calledExternally); return true; } diff --git a/src/view/kateviewinternal.cpp b/src/view/kateviewinternal.cpp --- a/src/view/kateviewinternal.cpp +++ b/src/view/kateviewinternal.cpp @@ -708,14 +708,17 @@ //if ( doc()->foldingTree()->findNodeForLine( c.line )->visible ) // qCDebug(LOG_KTE)<<"line ("<displayViewLine(c, true) < 0 && cache()->displayViewLine(c, false) > 0); + if (force) { KTextEditor::Cursor scroll = c; scrollPos(scroll, force, calledExternally); } else if (center && (c < startPos() || c > endPos())) { - KTextEditor::Cursor scroll = viewLineOffset(c, -int(linesDisplayed()) / 2); + KTextEditor::Cursor scroll = viewLineOffset(c, -int(lnDisp) / 2); scrollPos(scroll, false, calledExternally); - } else if (c > viewLineOffset(startPos(), linesDisplayed() - m_minLinesVisible - 1)) { - KTextEditor::Cursor scroll = viewLineOffset(c, -(linesDisplayed() - m_minLinesVisible - 1)); + } else if ((cache()->displayViewLine(c, true) >= (lnDisp - m_minLinesVisible)) || (curBelowScreen)) { + KTextEditor::Cursor scroll = viewLineOffset(c, -(lnDisp - m_minLinesVisible - 1)); scrollPos(scroll, false, calledExternally); } else if (c < viewLineOffset(startPos(), m_minLinesVisible)) { KTextEditor::Cursor scroll = viewLineOffset(c, -m_minLinesVisible);