summary refs log tree commit diff
path: root/src/RoomInfoListItem.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/RoomInfoListItem.cc')
-rw-r--r--src/RoomInfoListItem.cc37
1 files changed, 36 insertions, 1 deletions
diff --git a/src/RoomInfoListItem.cc b/src/RoomInfoListItem.cc

index 7753536e..3d4c5355 100644 --- a/src/RoomInfoListItem.cc +++ b/src/RoomInfoListItem.cc
@@ -24,10 +24,14 @@ #include "RoomState.h" #include "Theme.h" -RoomInfoListItem::RoomInfoListItem(RoomState state, QString room_id, QWidget *parent) +RoomInfoListItem::RoomInfoListItem(QSharedPointer<RoomSettings> settings, + RoomState state, + QString room_id, + QWidget *parent) : QWidget(parent) , state_(state) , roomId_(room_id) + , roomSettings_{settings} , isPressed_(false) , maxHeight_(IconSize + 2 * Padding) , unreadMsgCount_(0) @@ -44,6 +48,24 @@ RoomInfoListItem::RoomInfoListItem(RoomState state, QString room_id, QWidget *pa ripple_overlay_ = new RippleOverlay(this); ripple_overlay_->setClipPath(path); ripple_overlay_->setClipping(true); + + menu_ = new Menu(this); + + toggleNotifications_ = new QAction(notificationText(), this); + + connect(toggleNotifications_, &QAction::triggered, this, [=]() { + roomSettings_->toggleNotifications(); + }); + + menu_->addAction(toggleNotifications_); +} + +QString RoomInfoListItem::notificationText() +{ + if (roomSettings_.isNull() || roomSettings_->isNotificationsEnabled()) + return QString(tr("Disable notifications")); + + return tr("Enable notifications"); } void RoomInfoListItem::paintEvent(QPaintEvent *event) @@ -193,8 +215,21 @@ void RoomInfoListItem::setState(const RoomState &new_state) repaint(); } +void RoomInfoListItem::contextMenuEvent(QContextMenuEvent *event) +{ + Q_UNUSED(event); + + toggleNotifications_->setText(notificationText()); + menu_->popup(event->globalPos()); +} + void RoomInfoListItem::mousePressEvent(QMouseEvent *event) { + if (event->buttons() == Qt::RightButton) { + QWidget::mousePressEvent(event); + return; + } + emit clicked(roomId_); setPressedState(true);