diff options
-rw-r--r-- | indra/llui/llfocusmgr.cpp | 2 | ||||
-rw-r--r-- | indra/llui/llfocusmgr.h | 2 | ||||
-rw-r--r-- | indra/llui/lllineeditor.cpp | 12 | ||||
-rw-r--r-- | indra/llui/lllineeditor.h | 4 | ||||
-rw-r--r-- | indra/llui/lltexteditor.cpp | 10 | ||||
-rw-r--r-- | indra/llui/lltexteditor.h | 4 | ||||
-rw-r--r-- | indra/llui/llview.cpp | 8 | ||||
-rw-r--r-- | indra/llui/llview.h | 4 | ||||
-rw-r--r-- | indra/llwindow/llwindowcallbacks.cpp | 2 | ||||
-rw-r--r-- | indra/llwindow/llwindowcallbacks.h | 2 | ||||
-rw-r--r-- | indra/llwindow/llwindowsdl.cpp | 6 | ||||
-rw-r--r-- | indra/newview/llviewerwindow.cpp | 4 | ||||
-rw-r--r-- | indra/newview/llviewerwindow.h | 2 |
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); |