diff --git a/src/timeline/TimelineItem.cc b/src/timeline/TimelineItem.cc
index 02f22472..1707dd19 100644
--- a/src/timeline/TimelineItem.cc
+++ b/src/timeline/TimelineItem.cc
@@ -21,7 +21,6 @@
#include <QTextEdit>
#include "Avatar.h"
-#include "ChatPage.h"
#include "Config.h"
#include "timeline/TimelineItem.h"
@@ -44,14 +43,19 @@ TimelineItem::init()
QFontMetrics fm(font_);
- receiptsMenu_ = new QMenu(this);
+ contextMenu_ = new QMenu(this);
showReadReceipts_ = new QAction("Read receipts", this);
- receiptsMenu_->addAction(showReadReceipts_);
+ markAsRead_ = new QAction("Mark as read", this);
+ contextMenu_->addAction(showReadReceipts_);
+ contextMenu_->addAction(markAsRead_);
+
connect(showReadReceipts_, &QAction::triggered, this, [this]() {
if (!event_id_.isEmpty())
ChatPage::instance()->showReadReceipts(event_id_);
});
+ connect(markAsRead_, &QAction::triggered, this, [this]() { sendReadReceipt(); });
+
topLayout_ = new QHBoxLayout(this);
mainLayout_ = new QVBoxLayout;
messageLayout_ = new QHBoxLayout;
@@ -360,6 +364,8 @@ TimelineItem::markReceived()
{
checkmark_->setText(CHECKMARK);
checkmark_->setAlignment(Qt::AlignTop);
+
+ sendReadReceipt();
}
// Only the body is displayed.
@@ -500,8 +506,8 @@ TimelineItem::setUserAvatar(const QImage &avatar)
void
TimelineItem::contextMenuEvent(QContextMenuEvent *event)
{
- if (receiptsMenu_)
- receiptsMenu_->exec(event->globalPos());
+ if (contextMenu_)
+ contextMenu_->exec(event->globalPos());
}
void
diff --git a/src/timeline/TimelineView.cc b/src/timeline/TimelineView.cc
index 33da7f82..7e281e03 100644
--- a/src/timeline/TimelineView.cc
+++ b/src/timeline/TimelineView.cc
@@ -19,8 +19,10 @@
#include <QFileInfo>
#include <QTimer>
+#include "ChatPage.h"
#include "Config.h"
#include "FloatingButton.h"
+#include "UserSettingsPage.h"
#include "Utils.h"
#include "timeline/TimelineView.h"
@@ -504,6 +506,7 @@ TimelineView::addUserMessage(mtx::events::MessageType ty, const QString &body)
TimelineItem *view_item =
new TimelineItem(ty, local_user_, body, with_sender, scroll_widget_);
+ view_item->setRoomId(room_id_);
addTimelineItem(view_item);
@@ -628,6 +631,9 @@ TimelineView::paintEvent(QPaintEvent *)
void
TimelineView::readLastEvent() const
{
+ if (!ChatPage::instance()->userSettings()->isReadReceiptsEnabled())
+ return;
+
const auto eventId = getLastEventId();
if (!eventId.isEmpty())
|