From 148413eb249d6638e7052fc448177c5f57c3f063 Mon Sep 17 00:00:00 2001 From: Stefano Ceccherini Date: Wed, 27 Jul 2005 10:09:07 +0000 Subject: [PATCH] Added working multi-word selection (asynchronous version) git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@13836 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/kits/interface/BTextView/TextView.cpp | 18 ++++++------------ 1 file changed, 6 insertions(+), 12 deletions(-) diff --git a/src/kits/interface/BTextView/TextView.cpp b/src/kits/interface/BTextView/TextView.cpp index 6efc22bd92..4dae31f7d5 100644 --- a/src/kits/interface/BTextView/TextView.cpp +++ b/src/kits/interface/BTextView/TextView.cpp @@ -463,8 +463,6 @@ BTextView::MouseDown(BPoint where) currentMessage->FindInt32("modifiers", &modifiers); bool shiftDown = modifiers & B_SHIFT_KEY; - // TODO: Asynchronous mouse tracking - // should we initiate a drag? if (fSelStart != fSelEnd && !shiftDown) { BPoint loc; @@ -504,6 +502,9 @@ BTextView::MouseDown(BPoint where) // double click fClickCount = 2; fClickTime = system_time(); + int32 start, end; + FindWord(fClickOffset, &start, &end); + Select(start, end); } } else { // new click @@ -521,9 +522,6 @@ BTextView::MouseDown(BPoint where) if (!fSelectable) return; - // TODO: Honor window flags and skip this - // implementation even if we don't have an alternative - // asynchronous version, yet. if (Window()->Flags() & B_ASYNCHRONOUS_CONTROLS) { SetMouseEventMask(B_POINTER_EVENTS | B_KEYBOARD_EVENTS, B_LOCK_WINDOW_FOCUS | B_NO_POINTER_HISTORY); @@ -3901,13 +3899,7 @@ BTextView::PerformMouseMoved(BPoint where, uint32 code) int32 start = 0, end = 0; int32 offset = OffsetAt(where); - int32 clickCount = 1; - -#if 0 - Window()->CurrentMessage()->FindInt32("clicks", &clickCount); -#endif - - switch (clickCount) { + switch (fClickCount) { case 1: start = min_c(offset, fClickOffset); end = max_c(offset, fClickOffset); @@ -3915,6 +3907,8 @@ BTextView::PerformMouseMoved(BPoint where, uint32 code) case 2: FindWord(offset, &start, &end); + start = min_c(start, fClickOffset); + end = max_c(end, fClickOffset); break; case 3: