summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--indra/llui/llfocusmgr.cpp2
-rw-r--r--indra/llui/llfocusmgr.h2
-rw-r--r--indra/llui/lllineeditor.cpp12
-rw-r--r--indra/llui/lllineeditor.h4
-rw-r--r--indra/llui/lltexteditor.cpp10
-rw-r--r--indra/llui/lltexteditor.h4
-rw-r--r--indra/llui/llview.cpp8
-rw-r--r--indra/llui/llview.h4
-rw-r--r--indra/llwindow/llwindowcallbacks.cpp2
-rw-r--r--indra/llwindow/llwindowcallbacks.h2
-rw-r--r--indra/llwindow/llwindowsdl.cpp6
-rw-r--r--indra/newview/llviewerwindow.cpp4
-rw-r--r--indra/newview/llviewerwindow.h2
13 files changed, 35 insertions, 27 deletions
diff --git a/indra/llui/llfocusmgr.cpp b/indra/llui/llfocusmgr.cpp
index 856e03b3ab..3bc56a8360 100644
--- a/indra/llui/llfocusmgr.cpp
+++ b/indra/llui/llfocusmgr.cpp
@@ -59,7 +59,7 @@ BOOL LLFocusableElement::handleUnicodeChar(llwchar uni_char, BOOL called_from_pa
}
// virtual
-BOOL LLFocusableElement::handleUnicodeString(char *uni_str, BOOL called_from_parent)
+BOOL LLFocusableElement::handleUnicodeString(char *uni_str, bool editing, BOOL called_from_parent)
{
return FALSE;
}
diff --git a/indra/llui/llfocusmgr.h b/indra/llui/llfocusmgr.h
index f26690f4cb..e916c9a737 100644
--- a/indra/llui/llfocusmgr.h
+++ b/indra/llui/llfocusmgr.h
@@ -59,7 +59,7 @@ public:
virtual BOOL handleKey(KEY key, MASK mask, BOOL called_from_parent);
virtual BOOL handleKeyUp(KEY key, MASK mask, BOOL called_from_parent);
virtual BOOL handleUnicodeChar(llwchar uni_char, BOOL called_from_parent);
- virtual BOOL handleUnicodeString(char *uni_str, BOOL called_from_parent);
+ virtual BOOL handleUnicodeString(char *uni_str, bool editing, BOOL called_from_parent);
/**
* If true this LLFocusableElement wants to receive KEYUP and KEYDOWN messages
diff --git a/indra/llui/lllineeditor.cpp b/indra/llui/lllineeditor.cpp
index 34d08b99de..f306ecd513 100644
--- a/indra/llui/lllineeditor.cpp
+++ b/indra/llui/lllineeditor.cpp
@@ -1009,7 +1009,7 @@ void LLLineEditor::addChar(const llwchar uni_char)
getWindow()->hideCursorUntilMouseMove();
}
-void LLLineEditor::addString(char *s)
+void LLLineEditor::addString(char *s, bool editing)
{
if (hasSelection())
deleteSelection();
@@ -1018,9 +1018,13 @@ void LLLineEditor::addString(char *s)
.substr(getCursor(), 1)))
return;
mText.erase(getCursor(), 1);
+ } else if (editing) {
+ mText.clear();
+ setCursor(0);
}
mText.insert(getCursor(), utf8str_to_wstring(s));
- setCursor(getCursor() + 1);
+ if (editing) setCursor(strlen(s));
+ else setCursor(getCursor() + 1);
getWindow()->hideCursorUntilMouseMove();
}
@@ -1665,7 +1669,7 @@ BOOL LLLineEditor::handleUnicodeCharHere(llwchar uni_char)
return handled;
}
-BOOL LLLineEditor::handleUnicodeStringHere(char *uni_str)
+BOOL LLLineEditor::handleUnicodeStringHere(char *uni_str, bool editing)
{
auto handled = FALSE;
@@ -1674,7 +1678,7 @@ BOOL LLLineEditor::handleUnicodeStringHere(char *uni_str)
handled = TRUE;
LLLineEditorRollback rollback(this);
- addString(uni_str);
+ addString(uni_str, editing);
mKeystrokeTimer.reset();
deselect();
diff --git a/indra/llui/lllineeditor.h b/indra/llui/lllineeditor.h
index a8c6ee4536..836f59b843 100644
--- a/indra/llui/lllineeditor.h
+++ b/indra/llui/lllineeditor.h
@@ -130,7 +130,7 @@ public:
/*virtual*/ BOOL handleRightMouseDown(S32 x, S32 y, MASK mask);
/*virtual*/ BOOL handleKeyHere(KEY key, MASK mask );
/*virtual*/ BOOL handleUnicodeCharHere(llwchar uni_char);
- /*virtual*/ BOOL handleUnicodeStringHere(char *uni_str);
+ /*virtual*/ BOOL handleUnicodeStringHere(char *uni_str, bool editing);
/*virtual*/ void onMouseCaptureLost();
// LLEditMenuHandler overrides
@@ -297,7 +297,7 @@ public:
void removeChar();
void addChar(const llwchar c);
- void addString(char *s);
+ void addString(char *s, bool editing);
void setCursorAtLocalPos(S32 local_mouse_x);
S32 findPixelNearestPos(S32 cursor_offset = 0) const;
S32 calcCursorPos(S32 mouse_x);
diff --git a/indra/llui/lltexteditor.cpp b/indra/llui/lltexteditor.cpp
index 299af0dec8..d81009246f 100644
--- a/indra/llui/lltexteditor.cpp
+++ b/indra/llui/lltexteditor.cpp
@@ -1202,7 +1202,7 @@ void LLTextEditor::addChar(llwchar wc)
}
}
-void LLTextEditor::addString(char *str)
+void LLTextEditor::addString(char *str, bool editing)
{
if (!getEnabled())
return;
@@ -1210,6 +1210,10 @@ void LLTextEditor::addString(char *str)
deleteSelection(TRUE);
else if (LL_KIM_OVERWRITE == gKeyboard->getInsertMode())
removeChar(mCursorPos);
+ else if (editing) {
+ clear();
+ setCursorPos(0);
+ }
setCursorPos(mCursorPos + addString(mCursorPos, str));
@@ -1948,12 +1952,12 @@ BOOL LLTextEditor::handleUnicodeCharHere(llwchar uni_char)
return handled;
}
-BOOL LLTextEditor::handleUnicodeStringHere(char *uni_str)
+BOOL LLTextEditor::handleUnicodeStringHere(char *uni_str, bool editing)
{
auto handled = FALSE;
if (!mReadOnly) {
- addString(uni_str);
+ addString(uni_str, editing);
getWindow()->hideCursorUntilMouseMove();
handled = TRUE;
}
diff --git a/indra/llui/lltexteditor.h b/indra/llui/lltexteditor.h
index 513781e365..0697a2149d 100644
--- a/indra/llui/lltexteditor.h
+++ b/indra/llui/lltexteditor.h
@@ -101,7 +101,7 @@ public:
virtual BOOL handleKeyHere(KEY key, MASK mask );
virtual BOOL handleUnicodeCharHere(llwchar uni_char);
- virtual BOOL handleUnicodeStringHere(char *uni_str);
+ virtual BOOL handleUnicodeStringHere(char *uni_str, bool editing);
virtual void onMouseCaptureLost();
@@ -242,7 +242,7 @@ protected:
// Undoable operations
void addChar(llwchar c); // at mCursorPos
S32 addChar(S32 pos, llwchar wc);
- void addString(char *s);
+ void addString(char *s, bool editing);
S32 addString(S32 pos, char *str);
void addLineBreakChar(BOOL group_together = FALSE);
S32 overwriteChar(S32 pos, llwchar wc);
diff --git a/indra/llui/llview.cpp b/indra/llui/llview.cpp
index 6547a99a32..1f39e495a5 100644
--- a/indra/llui/llview.cpp
+++ b/indra/llui/llview.cpp
@@ -1043,18 +1043,18 @@ BOOL LLView::handleUnicodeChar(llwchar uni_char, BOOL called_from_parent)
return handled;
}
-BOOL LLView::handleUnicodeString(char *uni_str, BOOL called_from_parent)
+BOOL LLView::handleUnicodeString(char *uni_str, bool editing, BOOL called_from_parent)
{
auto handled = FALSE;
if (getVisible() && getEnabled() && !handled) {
- handled = handleUnicodeStringHere(uni_str);
+ handled = handleUnicodeStringHere(uni_str, editing);
if (handled && LLView::sDebugKeys)
LL_INFOS() << "Unicode key handled by " << getName() << LL_ENDL;
}
if (!handled && !called_from_parent && mParentView)
- handled = mParentView->handleUnicodeString(uni_str, FALSE);
+ handled = mParentView->handleUnicodeString(uni_str, editing, FALSE);
return handled;
}
@@ -1064,7 +1064,7 @@ BOOL LLView::handleUnicodeCharHere(llwchar uni_char )
return FALSE;
}
-BOOL LLView::handleUnicodeStringHere(char *uni_str)
+BOOL LLView::handleUnicodeStringHere(char *uni_str, bool editing)
{
return FALSE;
}
diff --git a/indra/llui/llview.h b/indra/llui/llview.h
index 4e101adecb..f455120db4 100644
--- a/indra/llui/llview.h
+++ b/indra/llui/llview.h
@@ -382,7 +382,7 @@ public:
/* virtual */ BOOL handleKey(KEY key, MASK mask, BOOL called_from_parent);
/* virtual */ BOOL handleKeyUp(KEY key, MASK mask, BOOL called_from_parent);
/* virtual */ BOOL handleUnicodeChar(llwchar uni_char, BOOL called_from_parent);
- /* virtual */ BOOL handleUnicodeString(char *uni_str, BOOL called_from_parent);
+ /* virtual */ BOOL handleUnicodeString(char *uni_str, bool editing, BOOL called_from_parent);
virtual BOOL handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop,
EDragAndDropType cargo_type,
@@ -516,7 +516,7 @@ public:
virtual BOOL handleKeyHere(KEY key, MASK mask);
virtual BOOL handleKeyUpHere(KEY key, MASK mask);
virtual BOOL handleUnicodeCharHere(llwchar uni_char);
- virtual BOOL handleUnicodeStringHere(char *uni_str);
+ virtual BOOL handleUnicodeStringHere(char *uni_str, bool editing);
virtual void handleReshape(const LLRect& rect, bool by_user);
virtual void dirtyRect();
diff --git a/indra/llwindow/llwindowcallbacks.cpp b/indra/llwindow/llwindowcallbacks.cpp
index 343ec5f9f7..e39edec588 100644
--- a/indra/llwindow/llwindowcallbacks.cpp
+++ b/indra/llwindow/llwindowcallbacks.cpp
@@ -52,7 +52,7 @@ BOOL LLWindowCallbacks::handleUnicodeChar(llwchar uni_char, MASK mask)
return FALSE;
}
-BOOL LLWindowCallbacks::handleUnicodeString(char *uni_str)
+BOOL LLWindowCallbacks::handleUnicodeString(char *uni_str, bool editing)
{
return FALSE;
}
diff --git a/indra/llwindow/llwindowcallbacks.h b/indra/llwindow/llwindowcallbacks.h
index 2a9fcf402a..22a5a9e891 100644
--- a/indra/llwindow/llwindowcallbacks.h
+++ b/indra/llwindow/llwindowcallbacks.h
@@ -37,7 +37,7 @@ public:
virtual BOOL handleTranslatedKeyUp(KEY key, MASK mask);
virtual void handleScanKey(KEY key, BOOL key_down, BOOL key_up, BOOL key_level);
virtual BOOL handleUnicodeChar(llwchar uni_char, MASK mask);
- virtual BOOL handleUnicodeString(char *uni_str);
+ virtual BOOL handleUnicodeString(char *uni_str, bool editing);
virtual BOOL handleMouseDown(LLWindow *window, LLCoordGL pos, MASK mask);
virtual BOOL handleMouseUp(LLWindow *window, LLCoordGL pos, MASK mask);
diff --git a/indra/llwindow/llwindowsdl.cpp b/indra/llwindow/llwindowsdl.cpp
index bbc966fb25..f56b6bfa7b 100644
--- a/indra/llwindow/llwindowsdl.cpp
+++ b/indra/llwindow/llwindowsdl.cpp
@@ -1893,12 +1893,12 @@ void LLWindowSDL::gatherInput()
break;
case SDL_TEXTINPUT:
- mCallbacks->handleUnicodeString(event.text.text);
+ mCallbacks->handleUnicodeString(event.text.text, false);
break;
case SDL_TEXTEDITING:
- mCallbacks->handleUnicodeString(event.edit.text);
- break;
+ mCallbacks->handleUnicodeString(event.edit.text, true);
+ break;
case SDL_KEYUP:
mKeyScanCode = event.key.keysym.scancode;
diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp
index 405da33bdf..86ca03fa4a 100644
--- a/indra/newview/llviewerwindow.cpp
+++ b/indra/newview/llviewerwindow.cpp
@@ -3129,11 +3129,11 @@ BOOL LLViewerWindow::handleUnicodeChar(llwchar uni_char, MASK mask)
return FALSE;
}
-BOOL LLViewerWindow::handleUnicodeString(char *uni_str)
+BOOL LLViewerWindow::handleUnicodeString(char *uni_str, bool editing)
{
auto keyboard_focus = gFocusMgr.getKeyboardFocus();
if (keyboard_focus)
- keyboard_focus->handleUnicodeString(uni_str, FALSE);
+ keyboard_focus->handleUnicodeString(uni_str, editing, FALSE);
return TRUE;
}
diff --git a/indra/newview/llviewerwindow.h b/indra/newview/llviewerwindow.h
index fe20b5fa23..1e3a03ab50 100644
--- a/indra/newview/llviewerwindow.h
+++ b/indra/newview/llviewerwindow.h
@@ -192,7 +192,7 @@ public:
/*virtual*/ BOOL handleTranslatedKeyUp(KEY key, MASK mask);
/*virtual*/ void handleScanKey(KEY key, BOOL key_down, BOOL key_up, BOOL key_level);
/*virtual*/ BOOL handleUnicodeChar(llwchar uni_char, MASK mask); // NOT going to handle extended
- /*virtual*/ BOOL handleUnicodeString(char *uni_str);
+ /*virtual*/ BOOL handleUnicodeString(char *uni_str, bool editing);
/*virtual*/ BOOL handleMouseDown(LLWindow *window, LLCoordGL pos, MASK mask);
/*virtual*/ BOOL handleMouseUp(LLWindow *window, LLCoordGL pos, MASK mask);
/*virtual*/ BOOL handleCloseRequest(LLWindow *window);