diff --git a/resources/qml/MatrixText.qml b/resources/qml/MatrixText.qml
new file mode 100644
index 00000000..5d20095c
--- /dev/null
+++ b/resources/qml/MatrixText.qml
@@ -0,0 +1,33 @@
+import QtQuick 2.5
+import QtQuick.Controls 2.3
+
+TextEdit {
+ textFormat: TextEdit.RichText
+ readOnly: true
+ wrapMode: Text.Wrap
+ selectByMouse: true
+ color: colors.text
+
+ onLinkActivated: {
+ if (/^https:\/\/matrix.to\/#\/(@.*)$/.test(link)) chat.model.openUserProfile(/^https:\/\/matrix.to\/#\/(@.*)$/.exec(link)[1])
+ if (/^https:\/\/matrix.to\/#\/(![^\/]*)$/.test(link)) timelineManager.setHistoryView(/^https:\/\/matrix.to\/#\/(!.*)$/.exec(link)[1])
+ if (/^https:\/\/matrix.to\/#\/(![^\/]*)\/(\$.*)$/.test(link)) {
+ var match = /^https:\/\/matrix.to\/#\/(![^\/]*)\/(\$.*)$/.exec(link)
+ timelineManager.setHistoryView(match[1])
+ chat.positionViewAtIndex(chat.model.idToIndex(match[2]), ListView.Contain)
+ }
+ else Qt.openUrlExternally(link)
+ }
+ MouseArea
+ {
+ anchors.fill: parent
+ onPressed: mouse.accepted = false
+ cursorShape: parent.hoveredLink ? Qt.PointingHandCursor : Qt.ArrowCursor
+ }
+
+ ToolTip {
+ visible: parent.hoveredLink
+ text: parent.hoveredLink
+ palette: colors
+ }
+}
diff --git a/resources/qml/delegates/NoticeMessage.qml b/resources/qml/delegates/NoticeMessage.qml
index 59e051be..a392eb5b 100644
--- a/resources/qml/delegates/NoticeMessage.qml
+++ b/resources/qml/delegates/NoticeMessage.qml
@@ -1,12 +1,8 @@
-import QtQuick 2.5
+import ".."
-TextEdit {
+MatrixText {
text: model.formattedBody
- textFormat: TextEdit.RichText
- readOnly: true
- wrapMode: Text.Wrap
width: parent ? parent.width : undefined
- selectByMouse: true
font.italic: true
color: inactiveColors.text
}
diff --git a/resources/qml/delegates/Placeholder.qml b/resources/qml/delegates/Placeholder.qml
index 171bf18d..4c0e68c3 100644
--- a/resources/qml/delegates/Placeholder.qml
+++ b/resources/qml/delegates/Placeholder.qml
@@ -1,10 +1,7 @@
-import QtQuick 2.5
-import QtQuick.Controls 2.1
+import ".."
-Label {
+MatrixText {
text: qsTr("unimplemented event: ") + model.type
- textFormat: Text.PlainText
- wrapMode: Text.Wrap
width: parent ? parent.width : undefined
color: inactiveColors.text
}
diff --git a/resources/qml/delegates/TextMessage.qml b/resources/qml/delegates/TextMessage.qml
index 713be868..990a3f5b 100644
--- a/resources/qml/delegates/TextMessage.qml
+++ b/resources/qml/delegates/TextMessage.qml
@@ -1,11 +1,6 @@
-import QtQuick 2.5
+import ".."
-TextEdit {
+MatrixText {
text: model.formattedBody
- textFormat: TextEdit.RichText
- readOnly: true
- wrapMode: Text.Wrap
width: parent ? parent.width : undefined
- selectByMouse: true
- color: colors.text
}
diff --git a/resources/res.qrc b/resources/res.qrc
index 264ed82d..c9938d57 100644
--- a/resources/res.qrc
+++ b/resources/res.qrc
@@ -118,6 +118,7 @@
qml/TimelineView.qml
qml/Avatar.qml
qml/ImageButton.qml
+ qml/MatrixText.qml
qml/StatusIndicator.qml
qml/EncryptionIndicator.qml
qml/TimelineRow.qml
diff --git a/src/timeline2/TimelineModel.cpp b/src/timeline2/TimelineModel.cpp
index fa87ec26..bdb3ea6f 100644
--- a/src/timeline2/TimelineModel.cpp
+++ b/src/timeline2/TimelineModel.cpp
@@ -827,6 +827,7 @@ TimelineModel::replyAction(QString id)
[](const auto &e) -> std::string { return eventMsgType(e); }, event));
related.quoted_body =
boost::apply_visitor([](const auto &e) -> QString { return eventBody(e); }, event);
+ related.room = room_id_;
if (related.quoted_body.isEmpty())
return;