diff --git a/include/timeline/TimelineItem.h b/include/timeline/TimelineItem.h index 525cd6e1..c499957b 100644 --- a/include/timeline/TimelineItem.h +++ b/include/timeline/TimelineItem.h @@ -137,6 +137,7 @@ private: QFont font_; QLabel *timestamp_; + QLabel *checkmark_; QLabel *userName_; QLabel *body_; }; @@ -181,6 +182,7 @@ TimelineItem::setupLocalWidgetLayout(Widget *widget, messageLayout_->addLayout(widgetLayout, 1); } + messageLayout_->addWidget(checkmark_); messageLayout_->addWidget(timestamp_); mainLayout_->addLayout(messageLayout_); } @@ -231,6 +233,7 @@ TimelineItem::setupWidgetLayout(Widget *widget, messageLayout_->addLayout(widgetLayout, 1); } + messageLayout_->addWidget(checkmark_); messageLayout_->addWidget(timestamp_); mainLayout_->addLayout(messageLayout_); } diff --git a/src/timeline/TimelineItem.cc b/src/timeline/TimelineItem.cc index 93987d52..62e195a4 100644 --- a/src/timeline/TimelineItem.cc +++ b/src/timeline/TimelineItem.cc @@ -30,6 +30,8 @@ #include "timeline/widgets/ImageItem.h" #include "timeline/widgets/VideoItem.h" +constexpr const static char *CHECKMARK = "✓"; + void TimelineItem::init() { @@ -61,6 +63,15 @@ TimelineItem::init() mainLayout_->setContentsMargins(conf::timeline::headerLeftMargin, 0, 0, 0); mainLayout_->setSpacing(0); + + QFont checkmarkFont; + checkmarkFont.setPixelSize(conf::timeline::fonts::timestamp); + + // Setting fixed width for checkmark because systems may have a differing width for a + // space and the Unicode checkmark. + checkmark_ = new QLabel(" ", this); + checkmark_->setFont(checkmarkFont); + checkmark_->setFixedWidth(QFontMetrics{checkmarkFont}.width(CHECKMARK)); } /* @@ -108,6 +119,7 @@ TimelineItem::TimelineItem(mtx::events::MessageType ty, messageLayout_->addWidget(body_, 1); } + messageLayout_->addWidget(checkmark_); messageLayout_->addWidget(timestamp_); mainLayout_->addLayout(messageLayout_); } @@ -239,6 +251,7 @@ TimelineItem::TimelineItem(const mtx::events::RoomEventaddWidget(body_, 1); } + messageLayout_->addWidget(checkmark_); messageLayout_->addWidget(timestamp_); mainLayout_->addLayout(messageLayout_); } @@ -285,6 +298,7 @@ TimelineItem::TimelineItem(const mtx::events::RoomEvent messageLayout_->addWidget(body_, 1); } + messageLayout_->addWidget(checkmark_); messageLayout_->addWidget(timestamp_); mainLayout_->addLayout(messageLayout_); } @@ -336,6 +350,7 @@ TimelineItem::TimelineItem(const mtx::events::RoomEvent messageLayout_->addWidget(body_, 1); } + messageLayout_->addWidget(checkmark_); messageLayout_->addWidget(timestamp_); mainLayout_->addLayout(messageLayout_); } @@ -343,11 +358,8 @@ TimelineItem::TimelineItem(const mtx::events::RoomEvent void TimelineItem::markReceived() { - auto checkmark = new QLabel("✓", this); - checkmark->setStyleSheet(QString("font-size: %1px;").arg(conf::timeline::fonts::timestamp)); - checkmark->setAlignment(Qt::AlignTop); - - messageLayout_->insertWidget(1, checkmark); + checkmark_->setText(CHECKMARK); + checkmark_->setAlignment(Qt::AlignTop); } // Only the body is displayed.