summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorKonstantinos Sideris <sideris.konstantin@gmail.com>2018-03-11 17:56:40 +0200
committerKonstantinos Sideris <sideris.konstantin@gmail.com>2018-03-11 17:56:40 +0200
commitd6b61fbb149ed50e591b85d9814dc537ce98cc4b (patch)
tree09b2087b3cba423f67a349d335c7aee86963a2a6 /src
parentRemove unused variables (diff)
downloadnheko-d6b61fbb149ed50e591b85d9814dc537ce98cc4b.tar.xz
Add context menu option to mark events individually as read
fixes #261
Diffstat (limited to 'src')
-rw-r--r--src/UserSettingsPage.cc19
-rw-r--r--src/timeline/TimelineItem.cc16
-rw-r--r--src/timeline/TimelineView.cc6
3 files changed, 36 insertions, 5 deletions
diff --git a/src/UserSettingsPage.cc b/src/UserSettingsPage.cc

index 6c966deb..7b97788e 100644 --- a/src/UserSettingsPage.cc +++ b/src/UserSettingsPage.cc
@@ -38,6 +38,7 @@ UserSettings::load() isOrderingEnabled_ = settings.value("user/room_ordering", true).toBool(); isGroupViewEnabled_ = settings.value("user/group_view", true).toBool(); isTypingNotificationsEnabled_ = settings.value("user/typing_notifications", true).toBool(); + isReadReceiptsEnabled_ = settings.value("user/read_receipts", true).toBool(); theme_ = settings.value("user/theme", "light").toString(); applyTheme(); @@ -86,6 +87,7 @@ UserSettings::save() settings.setValue("room_ordering", isOrderingEnabled_); settings.setValue("typing_notifications", isTypingNotificationsEnabled_); + settings.setValue("read_receipts", isReadReceiptsEnabled_); settings.setValue("group_view", isGroupViewEnabled_); settings.setValue("theme", theme()); settings.endGroup(); @@ -166,6 +168,17 @@ UserSettingsPage::UserSettingsPage(QSharedPointer<UserSettings> settings, QWidge typingLayout->addWidget(typingLabel); typingLayout->addWidget(typingNotifications_, 0, Qt::AlignBottom | Qt::AlignRight); + auto receiptsLayout = new QHBoxLayout; + receiptsLayout->setContentsMargins(0, OptionMargin, 0, OptionMargin); + auto receiptsLabel = new QLabel(tr("Read receipts"), this); + readReceipts_ = new Toggle(this); + readReceipts_->setActiveColor(QColor("#38A3D8")); + readReceipts_->setInactiveColor(QColor("gray")); + receiptsLabel->setStyleSheet("font-size: 15px;"); + + receiptsLayout->addWidget(receiptsLabel); + receiptsLayout->addWidget(readReceipts_, 0, Qt::AlignBottom | Qt::AlignRight); + auto themeOptionLayout_ = new QHBoxLayout; themeOptionLayout_->setContentsMargins(0, OptionMargin, 0, OptionMargin); auto themeLabel_ = new QLabel(tr("Theme"), this); @@ -194,6 +207,7 @@ UserSettingsPage::UserSettingsPage(QSharedPointer<UserSettings> settings, QWidge mainLayout_->addLayout(groupViewLayout); mainLayout_->addWidget(new HorizontalLine(this)); mainLayout_->addLayout(typingLayout); + mainLayout_->addLayout(receiptsLayout); mainLayout_->addWidget(new HorizontalLine(this)); mainLayout_->addLayout(themeOptionLayout_); mainLayout_->addWidget(new HorizontalLine(this)); @@ -223,6 +237,10 @@ UserSettingsPage::UserSettingsPage(QSharedPointer<UserSettings> settings, QWidge settings_->setTypingNotifications(!isDisabled); }); + connect(readReceipts_, &Toggle::toggled, this, [this](bool isDisabled) { + settings_->setReadReceipts(!isDisabled); + }); + connect(backBtn_, &QPushButton::clicked, this, [this]() { settings_->save(); emit moveBack(); @@ -239,6 +257,7 @@ UserSettingsPage::showEvent(QShowEvent *) roomOrderToggle_->setState(!settings_->isOrderingEnabled()); groupViewToggle_->setState(!settings_->isGroupViewEnabled()); typingNotifications_->setState(!settings_->isTypingNotificationsEnabled()); + readReceipts_->setState(!settings_->isReadReceiptsEnabled()); } void 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())