summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--resources/qml/MessageView.qml41
1 files changed, 37 insertions, 4 deletions
diff --git a/resources/qml/MessageView.qml b/resources/qml/MessageView.qml
index a013c78b..411254d8 100644
--- a/resources/qml/MessageView.qml
+++ b/resources/qml/MessageView.qml
@@ -84,9 +84,13 @@ Item {
             required property var reactions
             required property int status
             required property int trustlevel
+            required property int type
+            required property bool isEditable
 
             property int avatarMargin: (wrapper.isStateEvent || Settings.smallAvatars ? 0 : (Nheko.avatarSize + 8)) // align bubble with section header
 
+            property alias hovered: messageHover.hovered
+
             data: [
             Loader {
                 id: section
@@ -109,6 +113,19 @@ Item {
                 visible: status == Loader.Ready
                 z: 4
             }, 
+    Rectangle {
+        anchors.fill: gridContainer
+        color: (Settings.messageHoverHighlight && messageHover.hovered) ? palette.alternateBase : "transparent"
+
+        // this looks better without margins
+        TapHandler {
+            acceptedButtons: Qt.RightButton
+            acceptedDevices: PointerDevice.Mouse | PointerDevice.Stylus | PointerDevice.TouchPad
+            gesturePolicy: TapHandler.ReleaseWithinBounds
+
+            onSingleTapped: messageContextMenu.show(wrapper.eventId, wrapper.threadId, wrapper.type, wrapper.isSender, wrapper.isEncrypted, wrapper.isEditable, wrapper.main.hoveredLink, wrapper.main.copyText)
+        }
+    },
                 RowLayout {
                     id: gridContainer
 
@@ -276,7 +293,23 @@ Item {
                         }
                     }
                 },
-
+                Item {
+                    id: messageActionsAnchor
+                    anchors.fill: gridContainer
+                    property alias hovered: messageHover.hovered
+                    HoverHandler {
+                        id: messageHover
+                        onHoveredChanged: () => {
+                            if (!Settings.mobileMode && hovered) {
+                                if (!messageActions.hovered) {
+                                    messageActions.model = wrapper;
+                                    messageActions.attached = wrapper;
+                                    messageActions.anchors.bottomMargin = -gridContainer.y
+                                }
+                            }
+                        }
+                    }
+                },
                 Reactions {
                     id: reactionRow
 
@@ -346,15 +379,15 @@ Item {
 
             property Item attached: null
             // use comma to update on scroll
-            property var attachedPos: chat.contentY, attached ? chat.mapFromItem(attached, attached ? attached.width - width : 0, -height) : null
             property alias model: row.model
 
             hoverEnabled: true
             padding: Nheko.paddingSmall
             visible: Settings.buttonsInTimeline && !!attached && (attached.hovered || hovered)
-            x: attached ? attachedPos.x : 0
-            y: attached ? attachedPos.y + Nheko.paddingSmall : 0
             z: 10
+            parent: chat.contentItem
+            anchors.bottom: attached?.top
+            anchors.right: attached?.right
 
             background: Rectangle {
                 border.color: palette.buttonText