From 2165eb8cb8875642f7ac05b6cc287832722b3171 Mon Sep 17 00:00:00 2001 From: Nicolas Werner Date: Mon, 25 Jan 2021 16:17:14 +0100 Subject: Focus input area on room switch and reply change again fixes #412 fixes #413 --- resources/qml/MessageInput.qml | 71 ++++++++++++++++++++++++------------------ 1 file changed, 40 insertions(+), 31 deletions(-) (limited to 'resources/qml/MessageInput.qml') diff --git a/resources/qml/MessageInput.qml b/resources/qml/MessageInput.qml index fc50ea32..6aedd031 100644 --- a/resources/qml/MessageInput.qml +++ b/resources/qml/MessageInput.qml @@ -98,29 +98,28 @@ Rectangle { clip: true boundsBehavior: Flickable.StopAtBounds flickableDirection: Flickable.VerticalFlick - implicitWidth: textArea.width - implicitHeight: textArea.height - contentWidth: textArea.width - contentHeight: textArea.height + implicitWidth: messageInput.width + implicitHeight: messageInput.height + contentWidth: messageInput.width + contentHeight: messageInput.height TextArea { - id: textArea + id: messageInput property int completerTriggeredAt: -1 function insertCompletion(completion) { - textArea.remove(completerTriggeredAt, cursorPosition); - textArea.insert(cursorPosition, completion); + messageInput.remove(completerTriggeredAt, cursorPosition); + messageInput.insert(cursorPosition, completion); } function openCompleter(pos, type) { completerTriggeredAt = pos; popup.completerName = type; popup.open(); - popup.completer.setSearchString(textArea.getText(completerTriggeredAt, cursorPosition)); + popup.completer.setSearchString(messageInput.getText(completerTriggeredAt, cursorPosition)); } - text: "asfkajsdf" selectByMouse: true placeholderText: qsTr("Write a message...") //placeholderTextColor: colors.buttonText @@ -152,7 +151,7 @@ Rectangle { popup.close(); } if (popup.opened) - popup.completer.setSearchString(textArea.getText(completerTriggeredAt, cursorPosition)); + popup.completer.setSearchString(messageInput.getText(completerTriggeredAt, cursorPosition)); } onSelectionStartChanged: TimelineManager.timeline.input.updateState(selectionStart, selectionEnd, cursorPosition, text) @@ -164,16 +163,16 @@ Rectangle { TimelineManager.timeline.input.paste(false); event.accepted = true; } else if (event.modifiers == Qt.ControlModifier && event.key == Qt.Key_U) { - textArea.clear(); + messageInput.clear(); } else if (event.modifiers == Qt.ControlModifier && event.key == Qt.Key_P) { - textArea.text = TimelineManager.timeline.input.previousText(); + messageInput.text = TimelineManager.timeline.input.previousText(); } else if (event.modifiers == Qt.ControlModifier && event.key == Qt.Key_N) { - textArea.text = TimelineManager.timeline.input.nextText(); + messageInput.text = TimelineManager.timeline.input.nextText(); } else if (event.key == Qt.Key_At) { - textArea.openCompleter(cursorPosition, "user"); + messageInput.openCompleter(cursorPosition, "user"); popup.open(); } else if (event.key == Qt.Key_Colon) { - textArea.openCompleter(cursorPosition, "emoji"); + messageInput.openCompleter(cursorPosition, "emoji"); popup.open(); } else if (event.key == Qt.Key_Escape && popup.opened) { completerTriggeredAt = -1; @@ -186,13 +185,13 @@ Rectangle { popup.completerName = ""; popup.close(); if (currentCompletion) { - textArea.insertCompletion(currentCompletion); + messageInput.insertCompletion(currentCompletion); event.accepted = true; return ; } } TimelineManager.timeline.input.send(); - textArea.clear(); + messageInput.clear(); event.accepted = true; } else if (event.key == Qt.Key_Tab) { event.accepted = true; @@ -201,19 +200,19 @@ Rectangle { } else { var pos = cursorPosition - 1; while (pos > -1) { - var t = textArea.getText(pos, pos + 1); + var t = messageInput.getText(pos, pos + 1); console.log('"' + t + '"'); if (t == '@' || t == ' ' || t == '\t') { - textArea.openCompleter(pos, "user"); + messageInput.openCompleter(pos, "user"); return ; } else if (t == ':') { - textArea.openCompleter(pos, "emoji"); + messageInput.openCompleter(pos, "emoji"); return ; } pos = pos - 1; } // At start of input - textArea.openCompleter(0, "user"); + messageInput.openCompleter(0, "user"); } } else if (event.key == Qt.Key_Up && popup.opened) { event.accepted = true; @@ -226,33 +225,43 @@ Rectangle { background: null Connections { - onTimelineChanged: { - textArea.clear(); - textArea.append(TimelineManager.timeline.input.text()); - textArea.completerTriggeredAt = -1; + onActiveTimelineChanged: { + messageInput.clear(); + messageInput.append(TimelineManager.timeline.input.text()); + messageInput.completerTriggeredAt = -1; popup.completerName = ""; + messageInput.forceActiveFocus(); } target: TimelineManager } Connections { - onCompletionClicked: textArea.insertCompletion(completion) + onCompletionClicked: messageInput.insertCompletion(completion) target: popup } Completer { id: popup - x: textArea.completerTriggeredAt >= 0 ? textArea.positionToRectangle(textArea.completerTriggeredAt).x : 0 - y: textArea.completerTriggeredAt >= 0 ? textArea.positionToRectangle(textArea.completerTriggeredAt).y - height : 0 + x: messageInput.completerTriggeredAt >= 0 ? messageInput.positionToRectangle(messageInput.completerTriggeredAt).x : 0 + y: messageInput.completerTriggeredAt >= 0 ? messageInput.positionToRectangle(messageInput.completerTriggeredAt).y - height : 0 } Connections { ignoreUnknownSignals: true - onInsertText: textArea.insert(textArea.cursorPosition, text) + onInsertText: messageInput.insert(messageInput.cursorPosition, text) target: TimelineManager.timeline ? TimelineManager.timeline.input : null } + Connections { + ignoreUnknownSignals: true + onReplyChanged: { + messageInput.forceActiveFocus(); + console.log("sakjlsdgfjsadfglkjsdfg"); + } + target: TimelineManager.timeline + } + MouseArea { // workaround for wrong cursor shape on some platforms anchors.fill: parent @@ -284,7 +293,7 @@ Rectangle { ToolTip.visible: hovered ToolTip.text: qsTr("Emoji") onClicked: emojiPopup.visible ? emojiPopup.close() : emojiPopup.show(emojiButton, function(emoji) { - textArea.insert(textArea.cursorPosition, emoji); + messageInput.insert(messageInput.cursorPosition, emoji); }) } @@ -299,7 +308,7 @@ Rectangle { ToolTip.text: qsTr("Send") onClicked: { TimelineManager.timeline.input.send(); - textArea.clear(); + messageInput.clear(); } } -- cgit 1.5.1 From e5d2e2b72844a74615e1ad254695277f3f62c1d0 Mon Sep 17 00:00:00 2001 From: Nicolas Werner Date: Mon, 25 Jan 2021 16:19:28 +0100 Subject: Remove test log message --- resources/qml/MessageInput.qml | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) (limited to 'resources/qml/MessageInput.qml') diff --git a/resources/qml/MessageInput.qml b/resources/qml/MessageInput.qml index 6aedd031..12362f57 100644 --- a/resources/qml/MessageInput.qml +++ b/resources/qml/MessageInput.qml @@ -255,10 +255,7 @@ Rectangle { Connections { ignoreUnknownSignals: true - onReplyChanged: { - messageInput.forceActiveFocus(); - console.log("sakjlsdgfjsadfglkjsdfg"); - } + onReplyChanged: messageInput.forceActiveFocus(); target: TimelineManager.timeline } -- cgit 1.5.1 From d1280af2e4c704147a36da510faa0a994d3159c7 Mon Sep 17 00:00:00 2001 From: Nicolas Werner Date: Wed, 27 Jan 2021 19:19:21 +0100 Subject: Autoclose completer when space is pressed and no suggestion available --- resources/qml/Completer.qml | 1 + resources/qml/MessageInput.qml | 3 +++ resources/qml/TimelineView.qml | 2 +- 3 files changed, 5 insertions(+), 1 deletion(-) (limited to 'resources/qml/MessageInput.qml') diff --git a/resources/qml/Completer.qml b/resources/qml/Completer.qml index 7b71bd7f..750a0fdd 100644 --- a/resources/qml/Completer.qml +++ b/resources/qml/Completer.qml @@ -11,6 +11,7 @@ Popup { property string completerName property var completer property bool bottomToTop: true + property alias count: listView.count signal completionClicked(string completion) diff --git a/resources/qml/MessageInput.qml b/resources/qml/MessageInput.qml index 12362f57..138a9ab6 100644 --- a/resources/qml/MessageInput.qml +++ b/resources/qml/MessageInput.qml @@ -162,6 +162,9 @@ Rectangle { if (event.matches(StandardKey.Paste)) { TimelineManager.timeline.input.paste(false); event.accepted = true; + } else if (event.key == Qt.Key_Space) { + if (popup.opened && popup.count <= 0) + popup.close() } else if (event.modifiers == Qt.ControlModifier && event.key == Qt.Key_U) { messageInput.clear(); } else if (event.modifiers == Qt.ControlModifier && event.key == Qt.Key_P) { diff --git a/resources/qml/TimelineView.qml b/resources/qml/TimelineView.qml index 2eb0a7c5..a2b56b9a 100644 --- a/resources/qml/TimelineView.qml +++ b/resources/qml/TimelineView.qml @@ -35,7 +35,7 @@ Page { colors: palette model: EmojiProxyModel { - category: EmojiCategory.People + category: Emoji.Category.People sourceModel: EmojiModel { } -- cgit 1.5.1 From 54cc77de0ebdebe58b28f6fad713fbcc53d6d7a8 Mon Sep 17 00:00:00 2001 From: Nicolas Werner Date: Wed, 27 Jan 2021 19:36:53 +0100 Subject: Only select elements in completer when mouse is moved --- resources/qml/Completer.qml | 2 +- resources/qml/MessageInput.qml | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) (limited to 'resources/qml/MessageInput.qml') diff --git a/resources/qml/Completer.qml b/resources/qml/Completer.qml index 750a0fdd..27322172 100644 --- a/resources/qml/Completer.qml +++ b/resources/qml/Completer.qml @@ -85,7 +85,7 @@ Popup { anchors.fill: parent hoverEnabled: true - onEntered: popup.currentIndex = model.index + onPositionChanged: popup.currentIndex = model.index onClicked: popup.completionClicked(completer.completionAt(model.index)) Ripple { diff --git a/resources/qml/MessageInput.qml b/resources/qml/MessageInput.qml index 138a9ab6..35ebe488 100644 --- a/resources/qml/MessageInput.qml +++ b/resources/qml/MessageInput.qml @@ -164,7 +164,8 @@ Rectangle { event.accepted = true; } else if (event.key == Qt.Key_Space) { if (popup.opened && popup.count <= 0) - popup.close() + popup.close(); + } else if (event.modifiers == Qt.ControlModifier && event.key == Qt.Key_U) { messageInput.clear(); } else if (event.modifiers == Qt.ControlModifier && event.key == Qt.Key_P) { @@ -258,7 +259,7 @@ Rectangle { Connections { ignoreUnknownSignals: true - onReplyChanged: messageInput.forceActiveFocus(); + onReplyChanged: messageInput.forceActiveFocus() target: TimelineManager.timeline } -- cgit 1.5.1 From 73244afdb8581f61967fab6663564d3b68ee9b99 Mon Sep 17 00:00:00 2001 From: Nicolas Werner Date: Wed, 27 Jan 2021 20:26:54 +0100 Subject: Fix username completion deleting characters before it fixes #421 --- resources/qml/MessageInput.qml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'resources/qml/MessageInput.qml') diff --git a/resources/qml/MessageInput.qml b/resources/qml/MessageInput.qml index 35ebe488..cb7d383f 100644 --- a/resources/qml/MessageInput.qml +++ b/resources/qml/MessageInput.qml @@ -206,9 +206,12 @@ Rectangle { while (pos > -1) { var t = messageInput.getText(pos, pos + 1); console.log('"' + t + '"'); - if (t == '@' || t == ' ' || t == '\t') { + if (t == '@') { messageInput.openCompleter(pos, "user"); return ; + } else if (t == ' ' || t == '\t') { + messageInput.openCompleter(pos + 1, "user"); + return ; } else if (t == ':') { messageInput.openCompleter(pos, "emoji"); return ; -- cgit 1.5.1