diff --git a/src/kits/interface/TextView.cpp b/src/kits/interface/TextView.cpp index bf21c47d59..1be6f53fe1 100644 --- a/src/kits/interface/TextView.cpp +++ b/src/kits/interface/TextView.cpp @@ -3056,7 +3056,7 @@ BTextView::_HandleAlphaKey(const char *bytes, int32 numBytes) } else _DoInsertText(bytes, numBytes, fSelStart, NULL, NULL); - fClickOffset = fSelEnd; + fSelStart = fSelEnd = fClickOffset = fSelStart + numBytes; ScrollToOffset(fClickOffset); } @@ -3480,7 +3480,13 @@ BTextView::_DoInsertText(const char *inText, int32 inLength, int32 inOffset, if (TextLength() + inLength > MaxBytes()) return; - + + if (fSelStart != fSelEnd + && fSelStart != 0 + && fSelEnd != 0) { + + Select(fSelStart, fSelStart); + } // Don't do any check, the public methods will have adjusted // eventual bogus values... @@ -3491,13 +3497,8 @@ BTextView::_DoInsertText(const char *inText, int32 inLength, int32 inOffset, // copy data into buffer InsertText(inText, inLength, inOffset, inRuns); - // offset the caret/selection - int32 saveStart = fSelStart; - fSelStart += inLength; - fSelEnd += inLength; - // recalc line breaks and draw the text - _Refresh(saveStart, fSelEnd, true, false); + _Refresh(inOffset, textLength, true, false); }