diff --git a/qml/MatriqueSettings.qml b/qml/MatriqueSettings.qml
index 60d4509..5060878 100644
--- a/qml/MatriqueSettings.qml
+++ b/qml/MatriqueSettings.qml
@@ -4,7 +4,6 @@ import Qt.labs.settings 1.0
Settings {
property bool lazyLoad: true
- property bool richText: true
property bool pressAndHold
property bool rearrangeByActivity
diff --git a/qml/Setting.qml b/qml/Setting.qml
index d9e953d..a75fcc5 100644
--- a/qml/Setting.qml
+++ b/qml/Setting.qml
@@ -198,13 +198,6 @@ Page {
onCheckedChanged: MSettings.lazyLoad = checked
}
- Switch {
- text: "Use RichText instead of StyledText"
- checked: MSettings.richText
-
- onCheckedChanged: MSettings.richText = checked
- }
-
Switch {
text: "Use press and hold instead of right click"
checked: MSettings.pressAndHold
diff --git a/qml/component/MessageDelegate.qml b/qml/component/MessageDelegate.qml
index f84fe9b..13d7ef8 100644
--- a/qml/component/MessageDelegate.qml
+++ b/qml/component/MessageDelegate.qml
@@ -69,12 +69,23 @@ RowLayout {
}
}
- AutoLabel {
+ TextEdit {
Layout.fillWidth: true
- text: display
+ text: (highlighted ? "" : "") + display
+
visible: isText
- coloredBackground: highlighted
+ color: highlighted ? "white": Material.foreground
+
+ font.family: "Noto Sans"
+ font.pointSize: 10
+ selectByMouse: true
+ readOnly: true
+ wrapMode: Label.Wrap
+ selectionColor: Material.accent
+ textFormat: Text.RichText
+
+ onLinkActivated: Qt.openUrlExternally(link)
}
Loader {
diff --git a/qml/menu/MessageContextMenu.qml b/qml/menu/MessageContextMenu.qml
index d41f9d0..24b0124 100644
--- a/qml/menu/MessageContextMenu.qml
+++ b/qml/menu/MessageContextMenu.qml
@@ -9,11 +9,6 @@ Menu {
id: messageContextMenu
- MenuItem {
- text: "Copy"
-
- onTriggered: matriqueController.copyToClipboard(model.plainText)
- }
MenuItem {
text: "View Source"
diff --git a/src/messageeventmodel.cpp b/src/messageeventmodel.cpp
index 51fefbb..ef169ea 100644
--- a/src/messageeventmodel.cpp
+++ b/src/messageeventmodel.cpp
@@ -31,7 +31,6 @@ QHash MessageEventModel::roleNames() const {
roles[LongOperationRole] = "progressInfo";
roles[AnnotationRole] = "annotation";
roles[EventResolvedTypeRole] = "eventResolvedType";
- roles[PlainTextRole] = "plainText";
roles[UserMarkerRole] = "userMarker";
return roles;
}
@@ -416,105 +415,6 @@ QVariant MessageEventModel::data(const QModelIndex& idx, int role) const {
tr("Unknown Event"));
}
- if (role == PlainTextRole) {
- if (evt.isRedacted()) {
- auto reason = evt.redactedBecause()->reason();
- if (reason.isEmpty()) return tr("Redacted");
-
- return tr("Redacted: %1").arg(evt.redactedBecause()->reason());
- }
-
- return visit(
- evt,
- [this](const RoomMessageEvent& e) {
- using namespace MessageEventContent;
-
- if (e.hasFileContent()) {
- auto fileCaption = e.content()->fileInfo()->originalName;
- if (fileCaption.isEmpty()) fileCaption = e.plainBody();
- if (fileCaption.isEmpty()) return tr("a file");
- }
- return e.plainBody();
- },
- [this](const RoomMemberEvent& e) {
- // FIXME: Rewind to the name that was at the time of this event
- QString subjectName = m_currentRoom->roomMembername(e.userId());
- // The below code assumes senderName output in AuthorRole
- switch (e.membership()) {
- case MembershipType::Invite:
- if (e.repeatsState())
- return tr("reinvited %1 to the room").arg(subjectName);
- FALLTHROUGH;
- case MembershipType::Join: {
- if (e.repeatsState()) return tr("joined the room (repeated)");
- if (!e.prevContent() ||
- e.membership() != e.prevContent()->membership) {
- return e.membership() == MembershipType::Invite
- ? tr("invited %1 to the room").arg(subjectName)
- : tr("joined the room");
- }
- QString text{};
- if (e.displayName() != e.prevContent()->displayName) {
- if (e.displayName().isEmpty())
- text = tr("cleared their display name");
- else
- text = tr("changed their display name to %1")
- .arg(e.displayName());
- }
- if (e.avatarUrl() != e.prevContent()->avatarUrl) {
- if (!text.isEmpty()) text += " and ";
- if (e.avatarUrl().isEmpty())
- text += tr("cleared the avatar");
- else
- text += tr("updated the avatar");
- }
- return text;
- }
- case MembershipType::Leave:
- if (e.prevContent() &&
- e.prevContent()->membership == MembershipType::Ban) {
- return (e.senderId() != e.userId())
- ? tr("unbanned %1").arg(subjectName)
- : tr("self-unbanned");
- }
- return (e.senderId() != e.userId())
- ? tr("has kicked %1 from the room").arg(subjectName)
- : tr("left the room");
- case MembershipType::Ban:
- return (e.senderId() != e.userId())
- ? tr("banned %1 from the room").arg(subjectName)
- : tr("self-banned from the room");
- case MembershipType::Knock:
- return tr("knocked");
- default:;
- }
- return tr("made something unknown");
- },
- [](const RoomAliasesEvent& e) {
- return tr("set aliases to: %1").arg(e.aliases().join(", "));
- },
- [](const RoomCanonicalAliasEvent& e) {
- return (e.alias().isEmpty())
- ? tr("cleared the room main alias")
- : tr("set the room main alias to: %1").arg(e.alias());
- },
- [](const RoomNameEvent& e) {
- return (e.name().isEmpty())
- ? tr("cleared the room name")
- : tr("set the room name to: %1").arg(e.name());
- },
- [](const RoomTopicEvent& e) {
- return (e.topic().isEmpty())
- ? tr("cleared the topic")
- : tr("set the topic to: %1").arg(e.topic());
- },
- [](const RoomAvatarEvent&) { return tr("changed the room avatar"); },
- [](const EncryptionEvent&) {
- return tr("activated End-to-End Encryption");
- },
- tr("Unknown Event"));
- }
-
if (role == Qt::ToolTipRole) {
return evt.originalJson();
}
diff --git a/src/messageeventmodel.h b/src/messageeventmodel.h
index a19cb0a..5045681 100644
--- a/src/messageeventmodel.h
+++ b/src/messageeventmodel.h
@@ -28,7 +28,6 @@ class MessageEventModel : public QAbstractListModel {
SpecialMarksRole,
LongOperationRole,
AnnotationRole,
- PlainTextRole,
UserMarkerRole,
// For debugging
EventResolvedTypeRole,