diff --git a/messagewebview.cpp b/messagewebview.cpp index fc61e38c558b991128a74f4259335d4af0585437..7444dbf8cf9b87393816550ae0508c4c4625b984 100644 --- a/messagewebview.cpp +++ b/messagewebview.cpp @@ -188,7 +188,7 @@ bool MessageWebView::eventFilter(QObject *watched, QEvent *event) void MessageWebView::setMessagesContent(const QString& text) { - page()->runJavaScript(QStringLiteral("document.getElementById('message').value += '%1';").arg(text)); + page()->runJavaScript(QStringLiteral("replaceText('%1');").arg(text)); } void diff --git a/web/chatview.js b/web/chatview.js index 51b84d745839fdef7130985b0eb84514477e5248..c4b1bddad3f63c962dbca033d13fab72efaf2bb2 100644 --- a/web/chatview.js +++ b/web/chatview.js @@ -1761,3 +1761,28 @@ function pasteKeyDetected(e) { e.preventDefault(); window.jsbridge.emitPasteKeyDetected(); } + +// Set the curser to a target position +function setCaretPosition(elem, caretPos) { + var range; + + if (elem.createTextRange) { + range = elem.createTextRange(); + range.move('character', caretPos); + range.select(); + } else { + elem.focus(); + if (elem.selectionStart !== undefined) { + elem.setSelectionRange(caretPos, caretPos); + } + } +} +function replaceText(text) { + var input = messageBarInput; + var currentContent = input.value; + var start = input.selectionStart; + var end = input.selectionEnd; + var output = [currentContent.slice(0, start), text, currentContent.slice(end)].join(''); + input.value = output; + setCaretPosition(input, start + text.length); +}