From c1fa3828afeb09a68cb7b47481529aea39f6f2c9 Mon Sep 17 00:00:00 2001 From: Stefano Ceccherini Date: Tue, 20 Jul 2004 07:41:47 +0000 Subject: [PATCH] Fixed Home/End key handling. Thanks to Andrew for reporting. I know this won't be the last one :) git-svn-id: file:///srv/svn/repos/haiku/trunk/current@8439 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/kits/interface/BTextView/TextView.cpp | 27 ++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/src/kits/interface/BTextView/TextView.cpp b/src/kits/interface/BTextView/TextView.cpp index bbaadbc678..595f5d8ffe 100644 --- a/src/kits/interface/BTextView/TextView.cpp +++ b/src/kits/interface/BTextView/TextView.cpp @@ -2909,10 +2909,35 @@ void BTextView::HandlePageKey(uint32 inPageKey) { CALLED(); + + int32 modifiers = 0; + BMessage *currentMessage = Window()->CurrentMessage(); + currentMessage->FindInt32("modifiers", &modifiers); + + bool shiftDown = modifiers & B_SHIFT_KEY; + + int32 oldOffset;; + int32 newOffset; + switch (inPageKey) { case B_HOME: + oldOffset = fSelStart; + newOffset = 0; + ScrollToOffset(newOffset); + if (shiftDown) + Select(newOffset, oldOffset); + else + Select(newOffset, newOffset); + break; + case B_END: - ScrollToOffset((inPageKey == B_HOME) ? 0 : fText->Length()); + oldOffset = fSelEnd; + newOffset = fText->Length(); + ScrollToOffset(newOffset); + if (shiftDown) + Select(oldOffset, newOffset); + else + Select(newOffset, newOffset); break; case B_PAGE_UP: