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

Reply via email to