From a09f0db16947ed686d2cc6335c18f7ede8391ae6 Mon Sep 17 00:00:00 2001 From: Stefano Ceccherini Date: Thu, 28 Sep 2006 10:13:29 +0000 Subject: [PATCH] fixed some remaining bugs in keyboard selection, reimported code for up/down keys handling git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@18954 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/kits/interface/TextView.cpp | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/src/kits/interface/TextView.cpp b/src/kits/interface/TextView.cpp index 1bfdda77e6..9b88aa6159 100644 --- a/src/kits/interface/TextView.cpp +++ b/src/kits/interface/TextView.cpp @@ -2844,10 +2844,10 @@ BTextView::HandleArrowKey(uint32 inArrowKey) if (shiftDown) { fClickOffset = PreviousInitialByte(fClickOffset); if (fClickOffset != currentOffset) { - if (fClickOffset > fSelStart) { + if (fClickOffset >= fSelStart) { selStart = fSelStart; selEnd = fClickOffset; - } else if (fClickOffset < fSelStart) { + } else { selStart = fClickOffset; selEnd = fSelEnd; } @@ -2861,10 +2861,10 @@ BTextView::HandleArrowKey(uint32 inArrowKey) if (shiftDown) { fClickOffset = NextInitialByte(fClickOffset); if (fClickOffset != currentOffset) { - if (fClickOffset < fSelEnd) { + if (fClickOffset <= fSelEnd) { selStart = fClickOffset; selEnd = fSelEnd; - } else if (fClickOffset > fSelEnd) { + } else { selStart = fSelStart; selEnd = fClickOffset; } @@ -2879,6 +2879,12 @@ BTextView::HandleArrowKey(uint32 inArrowKey) BPoint point = PointAt(fClickOffset, &height); point.y -= height; fClickOffset = OffsetAt(point); + if (shiftDown) { + if (fClickOffset > fSelStart) + selEnd = fClickOffset; + else + selStart = fClickOffset; + } break; } @@ -2888,6 +2894,12 @@ BTextView::HandleArrowKey(uint32 inArrowKey) BPoint point = PointAt(fClickOffset, &height); point.y += height; fClickOffset = OffsetAt(point); + if (shiftDown) { + if (fClickOffset < fSelEnd) + selStart = fClickOffset; + else + selEnd = fClickOffset; + } break; } } @@ -2902,6 +2914,7 @@ BTextView::HandleArrowKey(uint32 inArrowKey) Select(fClickOffset, fClickOffset); fClickOffset = currentOffset; + // Select sets fClickOffset = fSelEnd // scroll if needed ScrollToOffset(fClickOffset);