STORM-276 FIXED Selecting a character in a line editor and replacing it doesn't trigger a spell check

master
Kitty Barnett 2012-02-03 15:34:52 +01:00
parent a9d1121977
commit 41e11a5083
2 changed files with 24 additions and 30 deletions

View File

@ -66,7 +66,7 @@ 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?
const F32 SPELLCHECK_DELAY = 0.5f; // delay between the last keypress and showing spell checking feedback for the word the cursor is on
const F32 SPELLCHECK_DELAY = 0.5f; // delay between the last keypress and spell checking the word the cursor is on
const std::string PASSWORD_ASTERISK( "\xE2\x80\xA2" ); // U+2022 BULLET
@ -1158,9 +1158,8 @@ void LLLineEditor::cut()
LLUI::reportBadKeystroke();
}
else
if( mKeystrokeCallback )
{
mKeystrokeCallback( this );
onKeystroke();
}
}
}
@ -1294,9 +1293,8 @@ void LLLineEditor::pasteHelper(bool is_primary)
LLUI::reportBadKeystroke();
}
else
if( mKeystrokeCallback )
{
mKeystrokeCallback( this );
onKeystroke();
}
}
}
@ -1549,10 +1547,7 @@ BOOL LLLineEditor::handleKeyHere(KEY key, MASK mask )
// Notify owner if requested
if (!need_to_rollback && handled)
{
if (mKeystrokeCallback)
{
mKeystrokeCallback(this);
}
onKeystroke();
if ( (!selection_modified) && (KEY_BACKSPACE == key) )
{
mSpellCheckTimer.setTimerExpirySec(SPELLCHECK_DELAY);
@ -1608,12 +1603,10 @@ BOOL LLLineEditor::handleUnicodeCharHere(llwchar uni_char)
// Notify owner if requested
if( !need_to_rollback && handled )
{
if( mKeystrokeCallback )
{
// HACK! The only usage of this callback doesn't do anything with the character.
// We'll have to do something about this if something ever changes! - Doug
mKeystrokeCallback( this );
}
// HACK! The only usage of this callback doesn't do anything with the character.
// We'll have to do something about this if something ever changes! - Doug
onKeystroke();
mSpellCheckTimer.setTimerExpirySec(SPELLCHECK_DELAY);
}
}
@ -1643,9 +1636,7 @@ void LLLineEditor::doDelete()
if (!prevalidateInput(text_to_delete))
{
if( mKeystrokeCallback )
mKeystrokeCallback( this );
onKeystroke();
return;
}
setCursor(getCursor() + 1);
@ -1661,10 +1652,8 @@ void LLLineEditor::doDelete()
}
else
{
if( mKeystrokeCallback )
{
mKeystrokeCallback( this );
}
onKeystroke();
mSpellCheckTimer.setTimerExpirySec(SPELLCHECK_DELAY);
}
}
@ -2296,6 +2285,15 @@ void LLLineEditor::setSelectAllonFocusReceived(BOOL b)
mSelectAllonFocusReceived = b;
}
void LLLineEditor::onKeystroke()
{
if (mKeystrokeCallback)
{
mKeystrokeCallback(this);
}
mSpellCheckStart = mSpellCheckEnd = -1;
}
void LLLineEditor::setKeystrokeCallback(callback_t callback, void* user_data)
{
@ -2418,10 +2416,8 @@ void LLLineEditor::updatePreedit(const LLWString &preedit_string,
// Update of the preedit should be caused by some key strokes.
mKeystrokeTimer.reset();
if( mKeystrokeCallback )
{
mKeystrokeCallback( this );
}
onKeystroke();
mSpellCheckTimer.setTimerExpirySec(SPELLCHECK_DELAY);
}
@ -2575,6 +2571,7 @@ void LLLineEditor::showContextMenu(S32 x, S32 y)
S32 screen_x, screen_y;
localPointToScreen(x, y, &screen_x, &screen_y);
setCursorAtLocalPos(x);
if (hasSelection())
{
if ( (mCursorPos < llmin(mSelectionStart, mSelectionEnd)) || (mCursorPos > llmax(mSelectionStart, mSelectionEnd)) )
@ -2582,10 +2579,6 @@ void LLLineEditor::showContextMenu(S32 x, S32 y)
else
setCursor(llmax(mSelectionStart, mSelectionEnd));
}
else
{
setCursorAtLocalPos(x);
}
bool use_spellcheck = getSpellCheck(), is_misspelled = false;
if (use_spellcheck)

View File

@ -243,6 +243,7 @@ public:
void setSelectAllonFocusReceived(BOOL b);
void setSelectAllonCommit(BOOL b) { mSelectAllonCommit = b; }
void onKeystroke();
typedef boost::function<void (LLLineEditor* caller, void* user_data)> callback_t;
void setKeystrokeCallback(callback_t callback, void* user_data);