From b7505fe562b695ff6798a5443dba79956d685fd8 Mon Sep 17 00:00:00 2001
From: Nicolas Werner <nicolas.werner@hotmail.de>
Date: Wed, 25 Nov 2020 19:03:22 +0100
Subject: [PATCH] Open completer on tab

---
 .gitignore                     |  1 +
 resources/qml/MessageInput.qml | 35 ++++++++++++++++++++++++++++------
 2 files changed, 30 insertions(+), 6 deletions(-)

diff --git a/.gitignore b/.gitignore
index 5f6725dbc..e91866ed1 100644
--- a/.gitignore
+++ b/.gitignore
@@ -57,6 +57,7 @@ ui_*.h
 # Vim
 *.swp
 *.swo
+*.swn
 
 #####=== CMake ===#####
 
diff --git a/resources/qml/MessageInput.qml b/resources/qml/MessageInput.qml
index c221cf3e1..ae95cbb60 100644
--- a/resources/qml/MessageInput.qml
+++ b/resources/qml/MessageInput.qml
@@ -75,6 +75,13 @@ Rectangle {
                     textArea.insert(cursorPosition, completion);
                 }
 
+                function openCompleter(pos, type) {
+                    completerTriggeredAt = pos;
+                    popup.completerName = type;
+                    popup.open();
+                    popup.completer.setSearchString(textArea.getText(completerTriggeredAt, cursorPosition));
+                }
+
                 placeholderText: qsTr("Write a message...")
                 placeholderTextColor: colors.buttonText
                 color: colors.text
@@ -106,12 +113,10 @@ Rectangle {
                     } else if (event.modifiers == Qt.ControlModifier && event.key == Qt.Key_N) {
                         textArea.text = TimelineManager.timeline.input.nextText();
                     } else if (event.key == Qt.Key_At) {
-                        completerTriggeredAt = cursorPosition;
-                        popup.completerName = "user";
+                        textArea.openCompleter(cursorPosition, "user");
                         popup.open();
                     } else if (event.key == Qt.Key_Colon) {
-                        completerTriggeredAt = cursorPosition;
-                        popup.completerName = "emoji";
+                        textArea.openCompleter(cursorPosition, "emoji");
                         popup.open();
                     } else if (event.key == Qt.Key_Escape && popup.opened) {
                         completerTriggeredAt = -1;
@@ -132,9 +137,27 @@ Rectangle {
                         TimelineManager.timeline.input.send();
                         textArea.clear();
                         event.accepted = true;
-                    } else if (event.key == Qt.Key_Tab && popup.opened) {
+                    } else if (event.key == Qt.Key_Tab) {
                         event.accepted = true;
-                        popup.down();
+                        if (popup.opened) {
+                            popup.up();
+                        } else {
+                            var pos = cursorPosition - 1;
+                            while (pos > -1) {
+                                var t = textArea.getText(pos, pos + 1);
+                                console.log('"' + t + '"');
+                                if (t == '@' || t == ' ' || t == '\t') {
+                                    textArea.openCompleter(pos, "user");
+                                    return ;
+                                } else if (t == ':') {
+                                    textArea.openCompleter(pos, "emoji");
+                                    return ;
+                                }
+                                pos = pos - 1;
+                            }
+                            // At start of input
+                            textArea.openCompleter(0, "user");
+                        }
                     } else if (event.key == Qt.Key_Up && popup.opened) {
                         event.accepted = true;
                         popup.up();
-- 
GitLab