summary refs log tree commit diff
path: root/resources
diff options
context:
space:
mode:
Diffstat (limited to 'resources')
-rw-r--r--resources/qml/MessageInput.qml2
-rw-r--r--resources/qml/emoji/StickerPicker.qml52
2 files changed, 42 insertions, 12 deletions
diff --git a/resources/qml/MessageInput.qml b/resources/qml/MessageInput.qml
index 6ddbb32e..14f27fff 100644
--- a/resources/qml/MessageInput.qml
+++ b/resources/qml/MessageInput.qml
@@ -433,7 +433,7 @@ Rectangle {
             ToolTip.visible: hovered
             ToolTip.text: qsTr("Stickers")
             onClicked: stickerPopup.visible ? stickerPopup.close() : stickerPopup.show(stickerButton, room.roomId, function(row) {
-                room.input.sticker(stickerPopup.model.sourceModel, row);
+                room.input.sticker(row);
                 TimelineManager.focusMessageInput();
             })
 
diff --git a/resources/qml/emoji/StickerPicker.qml b/resources/qml/emoji/StickerPicker.qml
index 1928dfa7..f84fe06f 100644
--- a/resources/qml/emoji/StickerPicker.qml
+++ b/resources/qml/emoji/StickerPicker.qml
@@ -102,19 +102,41 @@ Menu {
                 }
             }
 
-            // emoji grid
-            GridView {
+            Component {
+                id: sectionHeading
+                Rectangle {
+                    width: gridView.width
+                    height: childrenRect.height
+                    color: Nheko.colors.alternateBase
+
+                    required property string section
+
+                    Text {
+                        anchors.left: parent.left
+                        anchors.right: parent.right
+                        text: parent.section
+                        color: Nheko.colors.text
+                        font.bold: true
+                    }
+                }
+            }
+
+            // sticker grid
+            ListView {
                 id: gridView
 
-                model: roomid ? TimelineManager.completerFor("stickers", roomid) : null
+                model: roomid ? TimelineManager.completerFor("stickergrid", roomid) : null
                 Layout.preferredHeight: cellHeight * 3.5
                 Layout.preferredWidth: stickersPerRow * stickerDimPad + 20 - Nheko.paddingSmall
-                cellWidth: stickerDimPad
-                cellHeight: stickerDimPad
+                property int cellHeight: stickerDimPad
                 boundsBehavior: Flickable.StopAtBounds
                 clip: true
                 currentIndex: -1 // prevent sorting from stealing focus
-                cacheBuffer: 500
+
+                section.property: "packname"
+                section.criteria: ViewSection.FullString
+                section.delegate: sectionHeading
+                section.labelPositioning: ViewSection.InlineLabels | ViewSection.CurrentLabelAtStart
 
                 ScrollHelper {
                     flickable: parent
@@ -123,23 +145,29 @@ Menu {
                 }
 
                 // Individual emoji
-                delegate: AbstractButton {
+                delegate: Row {
+                    required property var row;
+
+                    Repeater {
+                        model: row
+
+                    delegate: AbstractButton {
                     width: stickerDim
                     height: stickerDim
                     hoverEnabled: true
-                    ToolTip.text: ":" + model.shortcode + ": - " + model.body
+                    ToolTip.text: ":" + modelData.shortcode + ": - " + modelData.body
                     ToolTip.visible: hovered
                     // TODO: maybe add favorites at some point?
                     onClicked: {
-                        console.debug("Picked " + model.shortcode);
+                        console.debug("Picked " + modelData.descriptor);
                         stickerPopup.close();
-                        callback(model.originalRow);
+                        callback(modelData.descriptor);
                     }
 
                     contentItem: Image {
                         height: stickerDim
                         width: stickerDim
-                        source: model.url.replace("mxc://", "image://MxcImage/") + "?scale"
+                        source: modelData.url.replace("mxc://", "image://MxcImage/") + "?scale"
                         fillMode: Image.PreserveAspectFit
                     }
 
@@ -150,6 +178,8 @@ Menu {
                     }
 
                 }
+            }
+        }
 
                 ScrollBar.vertical: ScrollBar {
                     id: emojiScroll