summary refs log tree commit diff
diff options
context:
space:
mode:
authorNicolas Werner <nicolas.werner@hotmail.de>2024-03-10 22:21:40 +0100
committerNicolas Werner <nicolas.werner@hotmail.de>2024-03-10 22:21:40 +0100
commitf25a1b5c36967f1138f6dfb45a0e69ee52769d78 (patch)
treed326a1e7d2ca7c565347190dc8dfb6fc3897e19d
parentUpdate translations (diff)
downloadnheko-f25a1b5c36967f1138f6dfb45a0e69ee52769d78.tar.xz
Work around the duplicate right click menus on KDE
-rw-r--r--resources/qml/TimelineBubbleMessageStyle.qml17
-rw-r--r--resources/qml/TimelineDefaultMessageStyle.qml25
2 files changed, 40 insertions, 2 deletions
diff --git a/resources/qml/TimelineBubbleMessageStyle.qml b/resources/qml/TimelineBubbleMessageStyle.qml
index 2e038131..3b0f2d94 100644
--- a/resources/qml/TimelineBubbleMessageStyle.qml
+++ b/resources/qml/TimelineBubbleMessageStyle.qml
@@ -317,6 +317,23 @@ TimelineEvent {
             }
 
         },
+        Item {
+            // We need this item to grab events, that otherwise would go to the TextArea in the main item. If we don't have this, it would trigger a right click menu on KDE...
+            // https://invent.kde.org/frameworks/qqc2-desktop-style/-/blob/9d71fe874186009f76d392e203d9fa25a49f8be7/org.kde.desktop/TextArea.qml#L55
+            
+            anchors.fill: gridContainer
+            anchors.topMargin: replyRow.height
+            TapHandler {
+
+                acceptedButtons: Qt.RightButton
+                acceptedDevices: PointerDevice.Mouse | PointerDevice.Stylus | PointerDevice.TouchPad
+                gesturePolicy: TapHandler.ReleaseWithinBounds
+
+                onSingleTapped: (event) => {
+                    messageContextMenu.show(wrapper.eventId, wrapper.threadId, wrapper.type, wrapper.isSender, wrapper.isEncrypted, wrapper.isEditable, wrapper.main.hoveredLink, wrapper.main.copyText);
+                }
+            }
+        },
         Reactions {
             id: reactionRow
 
diff --git a/resources/qml/TimelineDefaultMessageStyle.qml b/resources/qml/TimelineDefaultMessageStyle.qml
index 34808323..331a5dfe 100644
--- a/resources/qml/TimelineDefaultMessageStyle.qml
+++ b/resources/qml/TimelineDefaultMessageStyle.qml
@@ -75,16 +75,20 @@ TimelineEvent {
             z: 4
         }, 
         Rectangle {
+            // this looks better without margins
             anchors.fill: gridContainer
             color: (Settings.messageHoverHighlight && messageHover.hovered) ? palette.alternateBase : "transparent"
 
-            // this looks better without margins
+            // This is partially duplicated by a later handler, however we need this to handle the remaining events around the reply.
             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)
+                onSingleTapped: (event) => {
+                    messageContextMenu.show(wrapper.eventId, wrapper.threadId, wrapper.type, wrapper.isSender, wrapper.isEncrypted, wrapper.isEditable, wrapper.main.hoveredLink, wrapper.main.copyText);
+                    event.accepted = true;
+                }
             }
         },
         Rectangle {
@@ -312,6 +316,23 @@ TimelineEvent {
                 timestamp: wrapper.timestamp
                 room: wrapper.room
             },
+        Item {
+            // We need this item to grab events, that otherwise would go to the TextArea in the main item. If we don't have this, it would trigger a right click menu on KDE...
+            // https://invent.kde.org/frameworks/qqc2-desktop-style/-/blob/9d71fe874186009f76d392e203d9fa25a49f8be7/org.kde.desktop/TextArea.qml#L55
+            
+            anchors.fill: gridContainer
+            anchors.topMargin: replyRow.height
+            TapHandler {
+
+                acceptedButtons: Qt.RightButton
+                acceptedDevices: PointerDevice.Mouse | PointerDevice.Stylus | PointerDevice.TouchPad
+                gesturePolicy: TapHandler.ReleaseWithinBounds
+
+                onSingleTapped: (event) => {
+                    messageContextMenu.show(wrapper.eventId, wrapper.threadId, wrapper.type, wrapper.isSender, wrapper.isEncrypted, wrapper.isEditable, wrapper.main.hoveredLink, wrapper.main.copyText);
+                }
+            }
+        },
         Reactions {
             id: reactionRow