summary refs log tree commit diff
diff options
context:
space:
mode:
authorNicolas Werner <nicolas.werner@hotmail.de>2019-11-03 03:28:16 +0100
committerNicolas Werner <nicolas.werner@hotmail.de>2019-11-23 20:06:15 +0100
commit88dc72df4f7cd6cabdb48866e6030f5e506eb24f (patch)
tree58b8752b724ef1bd213cf8a9a61c08fa44399bd9
parentMake user clickable and improve button cursor look (diff)
downloadnheko-88dc72df4f7cd6cabdb48866e6030f5e506eb24f.tar.xz
Enable link handling
-rw-r--r--resources/qml/MatrixText.qml33
-rw-r--r--resources/qml/delegates/NoticeMessage.qml8
-rw-r--r--resources/qml/delegates/Placeholder.qml7
-rw-r--r--resources/qml/delegates/TextMessage.qml9
-rw-r--r--resources/res.qrc1
-rw-r--r--src/timeline2/TimelineModel.cpp1
6 files changed, 41 insertions, 18 deletions
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 @@ <file>qml/TimelineView.qml</file> <file>qml/Avatar.qml</file> <file>qml/ImageButton.qml</file> + <file>qml/MatrixText.qml</file> <file>qml/StatusIndicator.qml</file> <file>qml/EncryptionIndicator.qml</file> <file>qml/TimelineRow.qml</file> 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;