diff --git a/src/models/messageeventmodel.cpp b/src/models/messageeventmodel.cpp index 9ea0ad5be..466253800 100644 --- a/src/models/messageeventmodel.cpp +++ b/src/models/messageeventmodel.cpp @@ -2,6 +2,7 @@ // SPDX-License-Identifier: GPL-3.0-only #include "messageeventmodel.h" +#include "messagecomponenttype.h" #include "messageeventmodel_logging.h" #include "neochatconfig.h" @@ -58,6 +59,7 @@ QHash MessageEventModel::roleNames() const roles[IsPendingRole] = "isPending"; roles[ContentModelRole] = "contentModel"; roles[MediaInfoRole] = "mediaInfo"; + roles[IsEditableRole] = "isEditable"; return roles; } @@ -618,6 +620,10 @@ QVariant MessageEventModel::data(const QModelIndex &idx, int role) const return eventHandler.getMediaInfo(); } + if (role == IsEditableRole) { + return eventHandler.messageComponentType() == MessageComponentType::Text && evt.senderId() == m_currentRoom->localUser()->id(); + } + return {}; } diff --git a/src/models/messageeventmodel.h b/src/models/messageeventmodel.h index 0032ac0aa..253a8fac7 100644 --- a/src/models/messageeventmodel.h +++ b/src/models/messageeventmodel.h @@ -69,6 +69,7 @@ public: AuthorDisplayNameRole, /**< The displayname for the event's sender; for name change events, the old displayname. */ IsRedactedRole, /**< Whether an event has been deleted. */ IsPendingRole, /**< Whether an event is waiting to be accepted by the server. */ + IsEditableRole, /**< Whether the event can be edited by the user. */ LastRole, // Keep this last }; Q_ENUM(EventRoles) diff --git a/src/qml/HoverActions.qml b/src/qml/HoverActions.qml index 585a08d62..6beb2595b 100644 --- a/src/qml/HoverActions.qml +++ b/src/qml/HoverActions.qml @@ -90,7 +90,7 @@ QQC2.Control { onTriggered: emojiDialog.open() }, Kirigami.Action { - visible: root.delegate && root.delegate.author.isLocalUser && (root.delegate.delegateType === DelegateType.Emote || root.delegate.delegateType === DelegateType.Message) && !root.currentRoom.readOnly + visible: root.delegate && root.delegate.isEditable && !root.currentRoom.readOnly text: i18n("Edit") icon.name: "document-edit" onTriggered: { diff --git a/src/qml/MessageDelegate.qml b/src/qml/MessageDelegate.qml index 82f5b74f4..ea6a4a7c0 100644 --- a/src/qml/MessageDelegate.qml +++ b/src/qml/MessageDelegate.qml @@ -146,6 +146,11 @@ TimelineDelegate { */ required property bool isPending + /** + * @brief Whether the event can be edited by the local user. + */ + required property bool isEditable + /** * @brief Whether an encrypted message is sent in a verified session. */