diff --git a/resources/qml/TimelineRow.qml b/resources/qml/TimelineRow.qml
index 43de679c1dbc7f13c9c305cbddcb40e72955cbba..3a7bf56108634b209b2c549d5a28ffa7eb318c15 100644
--- a/resources/qml/TimelineRow.qml
+++ b/resources/qml/TimelineRow.qml
@@ -59,6 +59,7 @@ AbstractButton {
             acceptedButtons: Qt.RightButton
             onSingleTapped: messageContextMenu.show(eventId, type, isSender, isEncrypted, isEditable, contentItem.child.hoveredLink, contentItem.child.copyText)
             gesturePolicy: TapHandler.ReleaseWithinBounds
+            acceptedDevices: PointerDevice.Mouse | PointerDevice.Stylus | PointerDevice.TouchPad
         }
     }
 
@@ -92,6 +93,13 @@ AbstractButton {
         }
     }
 
+    onClicked: {
+        let link = contentItem.child.linkAt != undefined && contentItem.child.linkAt(pressX-row.x-msg.x, pressY-row.y-msg.y-contentItem.y);
+        if (link) {
+            Nheko.openLink(link)
+        }
+    }
+
     Rectangle {
         id: row
         property bool bubbleOnRight : isSender && Settings.bubbles
diff --git a/resources/qml/delegates/Reply.qml b/resources/qml/delegates/Reply.qml
index 53a007fe5f02ac25f9065ae535397eb99cb5c469..87eb371a21aecbf0a867b4a50105e4f6784e569e 100644
--- a/resources/qml/delegates/Reply.qml
+++ b/resources/qml/delegates/Reply.qml
@@ -78,6 +78,7 @@ AbstractButton {
             acceptedButtons: Qt.RightButton
             onSingleTapped: replyContextMenu.show(reply.child.copyText, reply.child.linkAt(eventPoint.position.x, eventPoint.position.y - userName_.implicitHeight), r.eventId)
             gesturePolicy: TapHandler.ReleaseWithinBounds
+            acceptedDevices: PointerDevice.Mouse | PointerDevice.Stylus | PointerDevice.TouchPad
         }
 
         AbstractButton {
diff --git a/resources/qml/delegates/TextMessage.qml b/resources/qml/delegates/TextMessage.qml
index 73411ab60acc2d41a3b173f8dd5393aea8cfd6de..6031093eb24517785becc2b58f9aef48b99c1844 100644
--- a/resources/qml/delegates/TextMessage.qml
+++ b/resources/qml/delegates/TextMessage.qml
@@ -39,6 +39,7 @@ MatrixText {
     height: isReply ? Math.round(Math.min(timelineView.height / 8, implicitHeight)) : implicitHeight
     clip: isReply
     selectByMouse: !Settings.mobileMode && !isReply
+    enabled: !Settings.mobileMode
     font.pointSize: (Settings.enlargeEmojiOnlyMessages && isOnlyEmoji > 0 && isOnlyEmoji < 4) ? Settings.fontSize * 3 : Settings.fontSize
 
     CursorShape {