diff --git a/Telegram/SourceFiles/history/admin_log/history_admin_log_inner.cpp b/Telegram/SourceFiles/history/admin_log/history_admin_log_inner.cpp index cb099afe4..973a44a21 100644 --- a/Telegram/SourceFiles/history/admin_log/history_admin_log_inner.cpp +++ b/Telegram/SourceFiles/history/admin_log/history_admin_log_inner.cpp @@ -683,6 +683,10 @@ QString InnerWidget::elementAuthorRank(not_null<const Element*> view) { return {}; } +bool InnerWidget::elementHideTopicButton(not_null<const Element*> view) { + return false; +} + void InnerWidget::saveState(not_null<SectionMemento*> memento) { memento->setFilter(std::move(_filter)); memento->setAdmins(std::move(_admins)); diff --git a/Telegram/SourceFiles/history/admin_log/history_admin_log_inner.h b/Telegram/SourceFiles/history/admin_log/history_admin_log_inner.h index bbe3c0381..5f55e5d40 100644 --- a/Telegram/SourceFiles/history/admin_log/history_admin_log_inner.h +++ b/Telegram/SourceFiles/history/admin_log/history_admin_log_inner.h @@ -141,6 +141,8 @@ public: HistoryView::Element *replacing) override; QString elementAuthorRank( not_null<const HistoryView::Element*> view) override; + bool elementHideTopicButton( + not_null<const HistoryView::Element*> view) override; ~InnerWidget(); diff --git a/Telegram/SourceFiles/history/history_inner_widget.cpp b/Telegram/SourceFiles/history/history_inner_widget.cpp index c232aaa1c..46d1a4612 100644 --- a/Telegram/SourceFiles/history/history_inner_widget.cpp +++ b/Telegram/SourceFiles/history/history_inner_widget.cpp @@ -324,6 +324,10 @@ public: return {}; } + bool elementHideTopicButton(not_null<const Element*> view) override { + return false; + } + not_null<HistoryView::ElementDelegate*> delegate() override { return this; } diff --git a/Telegram/SourceFiles/history/view/history_view_chat_preview.cpp b/Telegram/SourceFiles/history/view/history_view_chat_preview.cpp index 91540a729..dddc36695 100644 --- a/Telegram/SourceFiles/history/view/history_view_chat_preview.cpp +++ b/Telegram/SourceFiles/history/view/history_view_chat_preview.cpp @@ -126,6 +126,7 @@ private: Painter &p, const Ui::ChatPaintContext &context) override; QString listElementAuthorRank(not_null<const Element*> view) override; + bool listElementHideTopicButton(not_null<const Element*> view) override; History *listTranslateHistory() override; void listAddTranslatedItems( not_null<TranslateTracker*> tracker) override; @@ -279,6 +280,8 @@ void Item::setupTop() { const auto topic = _thread->asTopic(); auto nameValue = (topic ? Info::Profile::TitleValue(topic) + : _thread->peer()->isSelf() + ? tr::lng_saved_messages() : Info::Profile::NameValue(_thread->peer()) ) | rpl::start_spawning(_top->lifetime()); const auto name = Ui::CreateChild<Ui::FlatLabel>( @@ -294,18 +297,24 @@ void Item::setupTop() { ) | rpl::map([](StatusFields &&fields) { return fields.text; }); - const auto status = Ui::CreateChild<Ui::FlatLabel>( - _top.get(), - (topic - ? Info::Profile::NameValue(topic->channel()) - : std::move(statusText)), - st::previewStatus); - std::move(statusFields) | rpl::start_with_next([=](const StatusFields &fields) { - status->setTextColorOverride(fields.active - ? st::windowActiveTextFg->c - : std::optional<QColor>()); - }, status->lifetime()); - status->setAttribute(Qt::WA_TransparentForMouseEvents); + const auto status = _thread->peer()->isSelf() + ? nullptr + : Ui::CreateChild<Ui::FlatLabel>( + _top.get(), + (topic + ? Info::Profile::NameValue(topic->channel()) + : std::move(statusText)), + st::previewStatus); + if (status) { + std::move( + statusFields + ) | rpl::start_with_next([=](const StatusFields &fields) { + status->setTextColorOverride(fields.active + ? st::windowActiveTextFg->c + : std::optional<QColor>()); + }, status->lifetime()); + status->setAttribute(Qt::WA_TransparentForMouseEvents); + } const auto userpic = topic ? nullptr : Ui::CreateChild<Ui::UserpicButton>( @@ -313,6 +322,7 @@ void Item::setupTop() { _thread->peer(), st::previewUserpic); if (userpic) { + userpic->showSavedMessagesOnSelf(true); userpic->setAttribute(Qt::WA_TransparentForMouseEvents); } const auto icon = topic @@ -334,15 +344,23 @@ void Item::setupTop() { name->resizeToNaturalWidth(width - st.namePosition.x() - st.photoPosition.x()); - name->move(st::previewTop.namePosition); + if (status) { + name->move(st::previewTop.namePosition); + } else { + name->move( + st::previewTop.namePosition.x(), + (st::previewTop.height - name->height()) / 2); + } }, name->lifetime()); _top->geometryValue() | rpl::start_with_next([=](QRect geometry) { const auto &st = st::previewTop; - status->resizeToWidth(geometry.width() - - st.statusPosition.x() - - st.photoPosition.x()); - status->move(st.statusPosition); + if (status) { + status->resizeToWidth(geometry.width() + - st.statusPosition.x() + - st.photoPosition.x()); + status->move(st.statusPosition); + } shadow->setGeometry( geometry.x(), geometry.y() + geometry.height(), @@ -673,6 +691,10 @@ QString Item::listElementAuthorRank(not_null<const Element*> view) { return {}; } +bool Item::listElementHideTopicButton(not_null<const Element*> view) { + return _thread->asTopic() != nullptr; +} + History *Item::listTranslateHistory() { return nullptr; } diff --git a/Telegram/SourceFiles/history/view/history_view_element.cpp b/Telegram/SourceFiles/history/view/history_view_element.cpp index df32ee082..b85001331 100644 --- a/Telegram/SourceFiles/history/view/history_view_element.cpp +++ b/Telegram/SourceFiles/history/view/history_view_element.cpp @@ -198,10 +198,16 @@ void DefaultElementDelegate::elementStartEffect( } QString DefaultElementDelegate::elementAuthorRank( - not_null<const Element*> view) { + not_null<const Element*> view) { return {}; } +bool DefaultElementDelegate::elementHideTopicButton( + not_null<const Element*> view) { + return true; +} + + SimpleElementDelegate::SimpleElementDelegate( not_null<Window::SessionController*> controller, Fn<void()> update) diff --git a/Telegram/SourceFiles/history/view/history_view_element.h b/Telegram/SourceFiles/history/view/history_view_element.h index 0c01e9767..d4139e8ec 100644 --- a/Telegram/SourceFiles/history/view/history_view_element.h +++ b/Telegram/SourceFiles/history/view/history_view_element.h @@ -117,6 +117,7 @@ public: not_null<const Element*> view, Element *replacing) = 0; virtual QString elementAuthorRank(not_null<const Element*> view) = 0; + virtual bool elementHideTopicButton(not_null<const Element*> view) = 0; virtual ~ElementDelegate() { } @@ -170,6 +171,7 @@ public: not_null<const Element*> view, Element *replacing) override; QString elementAuthorRank(not_null<const Element*> view) override; + bool elementHideTopicButton(not_null<const Element*> view) override; }; diff --git a/Telegram/SourceFiles/history/view/history_view_list_widget.cpp b/Telegram/SourceFiles/history/view/history_view_list_widget.cpp index 9c125252c..eb5e079ad 100644 --- a/Telegram/SourceFiles/history/view/history_view_list_widget.cpp +++ b/Telegram/SourceFiles/history/view/history_view_list_widget.cpp @@ -1867,6 +1867,11 @@ QString ListWidget::elementAuthorRank(not_null<const Element*> view) { return _delegate->listElementAuthorRank(view); } +bool ListWidget::elementHideTopicButton(not_null<const Element*> view) { + return _delegate->listElementHideTopicButton(view); +} + + void ListWidget::saveState(not_null<ListMemento*> memento) { memento->setAroundPosition(_aroundPosition); const auto state = countScrollState(); diff --git a/Telegram/SourceFiles/history/view/history_view_list_widget.h b/Telegram/SourceFiles/history/view/history_view_list_widget.h index 5cfc57c08..d0507474f 100644 --- a/Telegram/SourceFiles/history/view/history_view_list_widget.h +++ b/Telegram/SourceFiles/history/view/history_view_list_widget.h @@ -155,6 +155,7 @@ public: Painter &p, const Ui::ChatPaintContext &context) = 0; virtual QString listElementAuthorRank(not_null<const Element*> view) = 0; + virtual bool listElementHideTopicButton(not_null<const Element*> view) = 0; virtual History *listTranslateHistory() = 0; virtual void listAddTranslatedItems( not_null<TranslateTracker*> tracker) = 0; @@ -368,7 +369,7 @@ public: [[nodiscard]] auto replyToMessageRequested() const -> rpl::producer<ReplyToMessageRequest>; void replyToMessageRequestNotify( - FullReplyTo to, + FullReplyTo to, bool forceAnotherChat = false); [[nodiscard]] rpl::producer<FullMsgId> readMessageRequested() const; [[nodiscard]] rpl::producer<FullMsgId> showMessageRequested() const; @@ -425,6 +426,7 @@ public: not_null<const Element*> view, Element *replacing) override; QString elementAuthorRank(not_null<const Element*> view) override; + bool elementHideTopicButton(not_null<const Element*> view) override; void setEmptyInfoWidget(base::unique_qptr<Ui::RpWidget> &&w); void overrideIsChatWide(bool isWide); diff --git a/Telegram/SourceFiles/history/view/history_view_message.cpp b/Telegram/SourceFiles/history/view/history_view_message.cpp index cd10f2399..0d93ee0b6 100644 --- a/Telegram/SourceFiles/history/view/history_view_message.cpp +++ b/Telegram/SourceFiles/history/view/history_view_message.cpp @@ -1037,8 +1037,7 @@ QSize Message::performCountOptimalSize() { void Message::refreshTopicButton() { const auto item = data(); if (isAttachedToPrevious() - || (context() != Context::History - && context() != Context::ChatPreview)) { + || delegate()->elementHideTopicButton(this)) { _topicButton = nullptr; } else if (const auto topic = item->topic()) { if (!_topicButton) { diff --git a/Telegram/SourceFiles/history/view/history_view_pinned_section.cpp b/Telegram/SourceFiles/history/view/history_view_pinned_section.cpp index 51a3101eb..7a9ecd8dc 100644 --- a/Telegram/SourceFiles/history/view/history_view_pinned_section.cpp +++ b/Telegram/SourceFiles/history/view/history_view_pinned_section.cpp @@ -679,6 +679,11 @@ QString PinnedWidget::listElementAuthorRank(not_null<const Element*> view) { return {}; } +bool PinnedWidget::listElementHideTopicButton( + not_null<const Element*> view) { + return true; +} + History *PinnedWidget::listTranslateHistory() { return _history; } diff --git a/Telegram/SourceFiles/history/view/history_view_pinned_section.h b/Telegram/SourceFiles/history/view/history_view_pinned_section.h index 2c54e0684..75956e403 100644 --- a/Telegram/SourceFiles/history/view/history_view_pinned_section.h +++ b/Telegram/SourceFiles/history/view/history_view_pinned_section.h @@ -132,6 +132,7 @@ public: Painter &p, const Ui::ChatPaintContext &context) override; QString listElementAuthorRank(not_null<const Element*> view) override; + bool listElementHideTopicButton(not_null<const Element*> view) override; History *listTranslateHistory() override; void listAddTranslatedItems( not_null<TranslateTracker*> tracker) override; diff --git a/Telegram/SourceFiles/history/view/history_view_replies_section.cpp b/Telegram/SourceFiles/history/view/history_view_replies_section.cpp index 492992642..738377b58 100644 --- a/Telegram/SourceFiles/history/view/history_view_replies_section.cpp +++ b/Telegram/SourceFiles/history/view/history_view_replies_section.cpp @@ -2614,6 +2614,11 @@ QString RepliesWidget::listElementAuthorRank(not_null<const Element*> view) { : QString(); } +bool RepliesWidget::listElementHideTopicButton( + not_null<const Element*> view) { + return true; +} + History *RepliesWidget::listTranslateHistory() { return _history; } diff --git a/Telegram/SourceFiles/history/view/history_view_replies_section.h b/Telegram/SourceFiles/history/view/history_view_replies_section.h index 37c8540fd..c8bacc2c7 100644 --- a/Telegram/SourceFiles/history/view/history_view_replies_section.h +++ b/Telegram/SourceFiles/history/view/history_view_replies_section.h @@ -175,6 +175,7 @@ public: Painter &p, const Ui::ChatPaintContext &context) override; QString listElementAuthorRank(not_null<const Element*> view) override; + bool listElementHideTopicButton(not_null<const Element*> view) override; History *listTranslateHistory() override; void listAddTranslatedItems( not_null<TranslateTracker*> tracker) override; diff --git a/Telegram/SourceFiles/history/view/history_view_scheduled_section.cpp b/Telegram/SourceFiles/history/view/history_view_scheduled_section.cpp index bd4a1123b..045b5b830 100644 --- a/Telegram/SourceFiles/history/view/history_view_scheduled_section.cpp +++ b/Telegram/SourceFiles/history/view/history_view_scheduled_section.cpp @@ -1450,6 +1450,11 @@ QString ScheduledWidget::listElementAuthorRank( return {}; } +bool ScheduledWidget::listElementHideTopicButton( + not_null<const Element*> view) { + return true; +} + History *ScheduledWidget::listTranslateHistory() { return nullptr; } diff --git a/Telegram/SourceFiles/history/view/history_view_scheduled_section.h b/Telegram/SourceFiles/history/view/history_view_scheduled_section.h index b2b0efa41..ba4813713 100644 --- a/Telegram/SourceFiles/history/view/history_view_scheduled_section.h +++ b/Telegram/SourceFiles/history/view/history_view_scheduled_section.h @@ -159,6 +159,7 @@ public: Painter &p, const Ui::ChatPaintContext &context) override; QString listElementAuthorRank(not_null<const Element*> view) override; + bool listElementHideTopicButton(not_null<const Element*> view) override; History *listTranslateHistory() override; void listAddTranslatedItems( not_null<TranslateTracker*> tracker) override; diff --git a/Telegram/SourceFiles/history/view/history_view_sublist_section.cpp b/Telegram/SourceFiles/history/view/history_view_sublist_section.cpp index df4f4ea04..424aaa5f0 100644 --- a/Telegram/SourceFiles/history/view/history_view_sublist_section.cpp +++ b/Telegram/SourceFiles/history/view/history_view_sublist_section.cpp @@ -736,6 +736,11 @@ QString SublistWidget::listElementAuthorRank(not_null<const Element*> view) { return {}; } +bool SublistWidget::listElementHideTopicButton( + not_null<const Element*> view) { + return true; +} + History *SublistWidget::listTranslateHistory() { return _history; } diff --git a/Telegram/SourceFiles/history/view/history_view_sublist_section.h b/Telegram/SourceFiles/history/view/history_view_sublist_section.h index eff71d50c..6379c9845 100644 --- a/Telegram/SourceFiles/history/view/history_view_sublist_section.h +++ b/Telegram/SourceFiles/history/view/history_view_sublist_section.h @@ -136,6 +136,7 @@ public: Painter &p, const Ui::ChatPaintContext &context) override; QString listElementAuthorRank(not_null<const Element*> view) override; + bool listElementHideTopicButton(not_null<const Element*> view) override; History *listTranslateHistory() override; void listAddTranslatedItems( not_null<TranslateTracker*> tracker) override; diff --git a/Telegram/SourceFiles/settings/business/settings_shortcut_messages.cpp b/Telegram/SourceFiles/settings/business/settings_shortcut_messages.cpp index 96c6cb841..9724bdec2 100644 --- a/Telegram/SourceFiles/settings/business/settings_shortcut_messages.cpp +++ b/Telegram/SourceFiles/settings/business/settings_shortcut_messages.cpp @@ -161,6 +161,7 @@ private: Painter &p, const Ui::ChatPaintContext &context) override; QString listElementAuthorRank(not_null<const Element*> view) override; + bool listElementHideTopicButton(not_null<const Element*> view) override; History *listTranslateHistory() override; void listAddTranslatedItems( not_null<TranslateTracker*> tracker) override; @@ -1046,6 +1047,11 @@ QString ShortcutMessages::listElementAuthorRank( return {}; } +bool ShortcutMessages::listElementHideTopicButton( + not_null<const Element*> view) { + return true; +} + History *ShortcutMessages::listTranslateHistory() { return nullptr; }