diff --git a/imports/NeoChat/Component/ChatBox/ChatBar.qml b/imports/NeoChat/Component/ChatBox/ChatBar.qml index 916fc4317..7dc36b322 100644 --- a/imports/NeoChat/Component/ChatBox/ChatBar.qml +++ b/imports/NeoChat/Component/ChatBox/ChatBar.qml @@ -204,7 +204,7 @@ ToolBar { completionMenu.model = currentRoom.getUsers(completionInfo.keyword); } else { completionMenu.isCompletingEmoji = true - completionMenu.model = completionMenu.emojiModel.filterModel(completionInfo.keyword); + completionMenu.model = EmojiModel.filterModel(completionInfo.keyword); } if (completionMenu.model.length === 0) { diff --git a/imports/NeoChat/Component/ChatBox/ChatBox.qml b/imports/NeoChat/Component/ChatBox/ChatBox.qml index 0d42036c4..0efa6af1e 100644 --- a/imports/NeoChat/Component/ChatBox/ChatBox.qml +++ b/imports/NeoChat/Component/ChatBox/ChatBox.qml @@ -64,7 +64,6 @@ Item { anchors.bottom: replySeparator.top sourceComponent: EmojiPicker{ textArea: chatBar.textField - emojiModel: EmojiModel { id: emojiModel } onChosen: addText(emoji) } Behavior on height { diff --git a/imports/NeoChat/Component/ChatBox/CompletionMenu.qml b/imports/NeoChat/Component/ChatBox/CompletionMenu.qml index 5d72de09b..cd5c58d76 100644 --- a/imports/NeoChat/Component/ChatBox/CompletionMenu.qml +++ b/imports/NeoChat/Component/ChatBox/CompletionMenu.qml @@ -23,8 +23,6 @@ Popup { property string currentDisplayText: currentItem && currentItem.displayName ? currentItem.displayName : "" property string currentUserId: currentItem && currentItem.id ? currentItem.id : "" - //FIXME: EmojiModel should probably be a singleton - property var emojiModel: EmojiModel {} property bool isCompletingEmoji: false property int beginPosition: 0 property int endPosition: 0 @@ -49,7 +47,6 @@ Popup { ListView { id: completionListView implicitWidth: contentWidth - model: control.model delegate: isCompletingEmoji ? emojiDelegate : usernameDelegate keyNavigationWraps: true @@ -99,7 +96,7 @@ Popup { Layout.preferredHeight: Kirigami.Units.gridUnit Layout.preferredWidth: textMetrics.tightBoundingRect.width font.pointSize: Kirigami.Units.gridUnit * 0.75 - text: emojiItem.modelData.unicode + text: modelData.unicode horizontalAlignment: Text.AlignHCenter verticalAlignment: Text.AlignVCenter } diff --git a/imports/NeoChat/Component/Emoji/EmojiPicker.qml b/imports/NeoChat/Component/Emoji/EmojiPicker.qml index dbdaf5ef8..de6ab72ec 100644 --- a/imports/NeoChat/Component/Emoji/EmojiPicker.qml +++ b/imports/NeoChat/Component/Emoji/EmojiPicker.qml @@ -10,12 +10,12 @@ import org.kde.kirigami 2.13 as Kirigami import NeoChat.Component 1.0 -import org.kde.neochat 1.0 +import org.kde.neochat 1.0 as NeoChat ColumnLayout { property string emojiCategory: "history" property var textArea - property var emojiModel + readonly property var emojiModel: NeoChat.EmojiModel signal chosen(string emoji) diff --git a/imports/NeoChat/Dialog/EmojiDialog.qml b/imports/NeoChat/Dialog/EmojiDialog.qml index bde56c21b..845d13f71 100644 --- a/imports/NeoChat/Dialog/EmojiDialog.qml +++ b/imports/NeoChat/Dialog/EmojiDialog.qml @@ -25,6 +25,5 @@ QQC2.Popup { contentItem: EmojiPicker { onChosen: react(emoji) - emojiModel: EmojiModel {} } } diff --git a/src/emojimodel.cpp b/src/emojimodel.cpp index 135c4410f..c20bf3033 100644 --- a/src/emojimodel.cpp +++ b/src/emojimodel.cpp @@ -22,24 +22,36 @@ QVariantList EmojiModel::filterModel(const QString &filter) auto emoji = qvariant_cast(e); if (emoji.shortname.startsWith(filter)) { result.append(e); + if (result.length() > 10) { + return result; + } } } for (const QVariant &e : nature) { auto emoji = qvariant_cast(e); if (emoji.shortname.startsWith(filter)) { result.append(e); + if (result.length() > 10) { + return result; + } } } for (const QVariant &e : food) { auto emoji = qvariant_cast(e); if (emoji.shortname.startsWith(filter)) { result.append(e); + if (result.length() > 10) { + return result; + } } } for (const QVariant &e : activity) { auto emoji = qvariant_cast(e); if (emoji.shortname.startsWith(filter)) { result.append(e); + if (result.length() > 10) { + return result; + } } } for (const QVariant &e : travel) { @@ -52,18 +64,27 @@ QVariantList EmojiModel::filterModel(const QString &filter) auto emoji = qvariant_cast(e); if (emoji.shortname.startsWith(filter)) { result.append(e); + if (result.length() > 10) { + return result; + } } } for (const QVariant &e : symbols) { auto emoji = qvariant_cast(e); if (emoji.shortname.startsWith(filter)) { result.append(e); + if (result.length() > 10) { + return result; + } } } for (const QVariant &e : flags) { auto emoji = qvariant_cast(e); if (emoji.shortname.startsWith(filter)) { result.append(e); + if (result.length() > 10) { + return result; + } } } diff --git a/src/main.cpp b/src/main.cpp index bf8fb9a96..e97c71747 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -126,7 +126,12 @@ int main(int argc, char *argv[]) qmlRegisterType("org.kde.neochat", 1, 0, "MessageFilterModel"); qmlRegisterType("org.kde.neochat", 1, 0, "PublicRoomListModel"); qmlRegisterType("org.kde.neochat", 1, 0, "UserDirectoryListModel"); - qmlRegisterType("org.kde.neochat", 1, 0, "EmojiModel"); + qmlRegisterSingletonType("org.kde.neochat", 1, 0, "EmojiModel", [](QQmlEngine *engine2, QJSEngine *scriptEngine) -> QObject * + { + Q_UNUSED(scriptEngine); + Q_UNUSED(engine2); + return new EmojiModel(); + }); qmlRegisterType("org.kde.neochat", 1, 0, "SortFilterRoomListModel"); qmlRegisterType("org.kde.neochat", 1, 0, "DevicesModel"); qmlRegisterUncreatableType("org.kde.neochat", 1, 0, "RoomMessageEvent", "ENUM");