diff --git a/indra/llui/lllineeditor.cpp b/indra/llui/lllineeditor.cpp index 98877f077c..8c6064c05a 100644 --- a/indra/llui/lllineeditor.cpp +++ b/indra/llui/lllineeditor.cpp @@ -68,6 +68,9 @@ const S32 SCROLL_INCREMENT_ADD = 0; // make space for typing const S32 SCROLL_INCREMENT_DEL = 4; // make space for baskspacing const F32 AUTO_SCROLL_TIME = 0.05f; const F32 TRIPLE_CLICK_INTERVAL = 0.3f; // delay between double and triple click. *TODO: make this equal to the double click interval? +// [SL:KB] - Patch: Misc-Spellcheck | Checked: 2010-12-24 (Catznip-2.5.0a) | Added: Catznip-2.5.0a +const F32 SPELLCHECK_DELAY = 0.5f; // delay between the last keypress and showing spell checking feedback for the word the cursor is on +// [/SL:KB] const std::string PASSWORD_ASTERISK( "\xE2\x80\xA2" ); // U+2022 BULLET @@ -163,6 +166,9 @@ LLLineEditor::LLLineEditor(const LLLineEditor::Params& p) mScrollTimer.reset(); mTripleClickTimer.reset(); +// [SL:KB] - Patch: Misc-Spellcheck | Checked: 2010-12-25 (Catznip-2.5.0a) | Added: Catznip-2.5.0a + mSpellCheckTimer.reset(); +// [/SL:KB] setText(p.default_text()); // Initialize current history line iterator @@ -1513,6 +1519,13 @@ BOOL LLLineEditor::handleKeyHere(KEY key, MASK mask ) { mKeystrokeCallback(this); } +// [SL:KB] - Patch: Misc-Spellcheck | Checked: 2010-12-24 (Catznip-2.5.0a) | Added: Catznip-2.5.0a + // We're only interested in the backspace key + if ( (!selection_modified) && (KEY_BACKSPACE == key) ) + { + mSpellCheckTimer.setTimerExpirySec(SPELLCHECK_DELAY); + } +// [/SL:KB] } } } @@ -1563,6 +1576,9 @@ BOOL LLLineEditor::handleUnicodeCharHere(llwchar uni_char) // We'll have to do something about this if something ever changes! - Doug mKeystrokeCallback( this ); } +// [SL:KB] - Patch: Misc-Spellcheck | Checked: 2010-12-24 (Catznip-2.5.0a) | Added: Catznip-2.5.0a + mSpellCheckTimer.setTimerExpirySec(SPELLCHECK_DELAY); +// [/SL:KB] } } return handled; @@ -1604,6 +1620,9 @@ void LLLineEditor::doDelete() { mKeystrokeCallback( this ); } +// [SL:KB] - Patch: Misc-Spellcheck | Checked: 2010-12-24 (Catznip-2.5.0a) | Added: Catznip-2.5.0a + mSpellCheckTimer.setTimerExpirySec(SPELLCHECK_DELAY); +// [/SL:KB] } } } @@ -1836,7 +1855,7 @@ void LLLineEditor::draw() #endif // [SL:KB] - Patch: Misc-Spellcheck | Checked: 2010-12-19 (Catznip-2.5.0a) | Added: Catznip-2.5.0a - if ( (mSpellCheck) && (!mReadOnly) && (mText.length() > 2) ) + if ( (useSpellCheck()) && (mText.length() > 2) ) { // Calculate start and end (character) indices for the first and last visible word U32 idxStart = prevWordPos(mScrollHPos); static U32 idxPrevStart = -1; @@ -1891,6 +1910,10 @@ void LLLineEditor::draw() if ( ((itMisspell->first < idxStart) && (itMisspell->second < idxStart)) || (itMisspell->first > idxEnd) ) continue; + // Skip the current word if the user is still busy editing it + if ( (!mSpellCheckTimer.hasExpired()) && (itMisspell->first <= (U32)mCursorPos) && (itMisspell->second >= (U32)mCursorPos) ) + continue; + S32 pxWidth = getRect().getWidth(); S32 pxStart = findPixelNearestPos(itMisspell->first - getCursor()); if (pxStart > pxWidth) @@ -2304,6 +2327,9 @@ void LLLineEditor::updatePreedit(const LLWString &preedit_string, { mKeystrokeCallback( this ); } +// [SL:KB] - Patch: Misc-Spellcheck | Checked: 2010-12-24 (Catznip-2.5.0a) | Added: Catznip-2.5.0a + mSpellCheckTimer.setTimerExpirySec(SPELLCHECK_DELAY); +// [/SL:KB] } BOOL LLLineEditor::getPreeditLocation(S32 query_offset, LLCoordGL *coord, LLRect *bounds, LLRect *control) const diff --git a/indra/llui/lllineeditor.h b/indra/llui/lllineeditor.h index 634379455c..de6ee36493 100644 --- a/indra/llui/lllineeditor.h +++ b/indra/llui/lllineeditor.h @@ -341,6 +341,7 @@ protected: // [SL:KB] - Patch: Misc-Spellcheck | Checked: 2010-12-19 (Catznip-2.5.0a) | Added: Catznip-2.5.0a BOOL mSpellCheck; BOOL mNeedsSpellCheck; + LLTimer mSpellCheckTimer; std::list > mMisspellRanges; std::vector mSuggestionList; // [/SL:KB]