diff --git a/resources/qml/MessageInput.qml b/resources/qml/MessageInput.qml
index 8090cd99..76c498d9 100644
--- a/resources/qml/MessageInput.qml
+++ b/resources/qml/MessageInput.qml
@@ -124,7 +124,7 @@ Rectangle {
completerTriggeredAt = pos;
completer.completerName = type;
popup.open();
- completer.completer.setSearchString(messageInput.getText(completerTriggeredAt, cursorPosition));
+ completer.completer.setSearchString(messageInput.getText(completerTriggeredAt, cursorPosition)+messageInput.preeditText);
}
function positionCursorAtEnd() {
@@ -147,11 +147,24 @@ Rectangle {
bottomPadding: 8
leftPadding: inputBar.showAllButtons? 0 : 8
focus: true
+ property string lastChar
onTextChanged: {
if (room)
room.input.updateState(selectionStart, selectionEnd, cursorPosition, text);
-
forceActiveFocus();
+ if (cursorPosition > 0)
+ lastChar = text.charAt(cursorPosition-1)
+ else
+ lastChar = ''
+ if (lastChar == '@') {
+ messageInput.openCompleter(selectionStart-1, "user");
+ } else if (lastChar == ':') {
+ messageInput.openCompleter(selectionStart-1, "emoji");
+ } else if (lastChar == '#') {
+ messageInput.openCompleter(selectionStart-1, "roomAliases");
+ } else if (lastChar == "~") {
+ messageInput.openCompleter(selectionStart-1, "customEmoji");
+ }
}
onCursorPositionChanged: {
if (!room)
@@ -162,9 +175,13 @@ Rectangle {
popup.close();
if (popup.opened)
- completer.completer.setSearchString(messageInput.getText(completerTriggeredAt, cursorPosition));
+ completer.completer.setSearchString(messageInput.getText(completerTriggeredAt, cursorPosition)+messageInput.preeditText);
}
+ onPreeditTextChanged: {
+ if (popup.opened)
+ completer.completer.setSearchString(messageInput.getText(completerTriggeredAt, cursorPosition)+messageInput.preeditText);
+ }
onSelectionStartChanged: room.input.updateState(selectionStart, selectionEnd, cursorPosition, text)
onSelectionEndChanged: room.input.updateState(selectionStart, selectionEnd, cursorPosition, text)
// Ensure that we get escape key press events first.
@@ -187,14 +204,6 @@ Rectangle {
messageInput.text = room.input.previousText();
} else if (event.modifiers == Qt.ControlModifier && event.key == Qt.Key_N) {
messageInput.text = room.input.nextText();
- } else if (event.key == Qt.Key_At) {
- messageInput.openCompleter(selectionStart, "user");
- } else if (event.key == Qt.Key_Colon) {
- messageInput.openCompleter(selectionStart, "emoji");
- } else if (event.key == Qt.Key_NumberSign) {
- messageInput.openCompleter(selectionStart, "roomAliases");
- } else if (event.text == "~") {
- messageInput.openCompleter(selectionStart, "customEmoji");
} else if (event.key == Qt.Key_Escape && popup.opened) {
completer.completerName = "";
popup.close();
@@ -215,8 +224,10 @@ Rectangle {
return;
}
}
- room.input.send();
- event.accepted = true;
+ if (!Qt.inputMethod.visible) {
+ room.input.send();
+ event.accepted = true;
+ }
} else if (event.key == Qt.Key_Tab && (event.modifiers == Qt.NoModifier || event.modifiers == Qt.ShiftModifier)) {
event.accepted = true;
if (popup.opened) {
|