dhaumann created this revision. dhaumann added a reviewer: cullmann. Restricted Application added projects: Kate, Frameworks. Restricted Application added a subscriber: Frameworks. dhaumann requested review of this revision.
REVISION SUMMARY This patch fixes a corner case for the following setup: - enable "[x] Scroll past end of document" - disable dynamic word wrap (i.e. you see a horizontal scrollbar for long lines) - open a document with several lines, where the last line - make sure the last line is NOT empty Let's say the last two lines look as follows yy|yy # '|' denoes the cursor position zzzzz Make sure you scrolled past the end of the document (either with the mouse or with Ctrl+Down). Note that line 'zzzzz' is completely visible. Now press 'cursor down'. What happens is that the view contents jumps and the scrolling behavior acts as if "Scroll past end of document" is not enabled. Expected behavior is that the cursor position goes one line down, but the scroll position remains completely unchanged. The bug here is the following if clause: } else if (c > viewLineOffset(startPos(), linesDisplayed() - m_minLinesVisible - 1)) { KTextEditor::Cursor scroll = viewLineOffset(c, -(linesDisplayed() - m_minLinesVisible - 1)); scrollPos(scroll, false, calledExternally); } In the buggy case, c==(28, 1), and viewLineOffset()==(28,0). This triggers the bug that in the last line of the document for columns > 0 the scroll position is adapted. The proposed fix here is to not compare cursor positions, but only the lines. Clearly, 28 < 28 is not true, leading to no change in the scroll position. BIG: 306745 FIXED-IN: KDE Frameworks 5.43 TEST PLAN make test REPOSITORY R39 KTextEditor BRANCH FixScrollPastEnd (branched from master) REVISION DETAIL https://phabricator.kde.org/D10054 AFFECTED FILES src/view/kateviewinternal.cpp To: dhaumann, cullmann Cc: #frameworks, michaelh, kevinapavew, ngraham, demsking, cullmann, sars, dhaumann