diff --git a/Telegram/SourceFiles/history/history_widget.cpp b/Telegram/SourceFiles/history/history_widget.cpp index 19d3709b7f..9a0b27fb82 100644 --- a/Telegram/SourceFiles/history/history_widget.cpp +++ b/Telegram/SourceFiles/history/history_widget.cpp @@ -6388,9 +6388,8 @@ void HistoryWidget::checkPinnedBarState() { auto barContent = HistoryView::PinnedBarContent( &session(), _pinnedTracker->shownMessageId()); - _pinnedBar = std::make_unique( - this, - std::move(barContent)); + _pinnedBar = std::make_unique(this); + _pinnedBar->setContent(std::move(barContent)); Info::Profile::SharedMediaCountValue( _peer, nullptr, diff --git a/Telegram/SourceFiles/history/view/history_view_replies_section.cpp b/Telegram/SourceFiles/history/view/history_view_replies_section.cpp index 769e733c4e..f9148fda2f 100644 --- a/Telegram/SourceFiles/history/view/history_view_replies_section.cpp +++ b/Telegram/SourceFiles/history/view/history_view_replies_section.cpp @@ -388,7 +388,8 @@ void RepliesWidget::setupRootView() { ) | rpl::map([=](Ui::MessageBarContent &&content, bool shown) { return shown ? std::move(content) : Ui::MessageBarContent(); }); - _rootView = std::make_unique(this, std::move(content)); + _rootView = std::make_unique(this); + _rootView->setContent(std::move(content)); controller()->adaptive().oneColumnValue( ) | rpl::start_with_next([=](bool one) { diff --git a/Telegram/SourceFiles/ui/chat/pinned_bar.cpp b/Telegram/SourceFiles/ui/chat/pinned_bar.cpp index d46141ebae..895482cccd 100644 --- a/Telegram/SourceFiles/ui/chat/pinned_bar.cpp +++ b/Telegram/SourceFiles/ui/chat/pinned_bar.cpp @@ -18,9 +18,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL namespace Ui { -PinnedBar::PinnedBar( - not_null parent, - rpl::producer content) +PinnedBar::PinnedBar(not_null parent) : _wrap(parent, object_ptr(parent)) , _shadow(std::make_unique(_wrap.parentWidget())) { _wrap.hide(anim::type::instant); @@ -31,10 +29,18 @@ PinnedBar::PinnedBar( QPainter(_wrap.entity()).fillRect(clip, st::historyPinnedBg); }, lifetime()); _wrap.setAttribute(Qt::WA_OpaquePaintEvent); +} + +PinnedBar::~PinnedBar() { + _right.button.destroy(); +} + +void PinnedBar::setContent(rpl::producer content) { + _contentLifetime.destroy(); auto copy = std::move( content - ) | rpl::start_spawning(_wrap.lifetime()); + ) | rpl::start_spawning(_contentLifetime); rpl::duplicate( copy @@ -49,7 +55,7 @@ PinnedBar::PinnedBar( if (creating) { _bar->finishAnimating(); } - }, lifetime()); + }, _contentLifetime); std::move( copy @@ -65,11 +71,7 @@ PinnedBar::PinnedBar( }, [=] { _forceHidden = true; _wrap.toggle(false, anim::type::normal); - }, lifetime()); -} - -PinnedBar::~PinnedBar() { - _right.button.destroy(); + }, _contentLifetime); } void PinnedBar::setRightButton(object_ptr button) { diff --git a/Telegram/SourceFiles/ui/chat/pinned_bar.h b/Telegram/SourceFiles/ui/chat/pinned_bar.h index fd6a45c44f..9e4ff87dca 100644 --- a/Telegram/SourceFiles/ui/chat/pinned_bar.h +++ b/Telegram/SourceFiles/ui/chat/pinned_bar.h @@ -22,9 +22,7 @@ class RpWidget; class PinnedBar final { public: - PinnedBar( - not_null parent, - rpl::producer content); + PinnedBar(not_null parent); ~PinnedBar(); void show(); @@ -34,6 +32,7 @@ public: void setShadowGeometryPostprocess(Fn postprocess); + void setContent(rpl::producer content); void setRightButton(object_ptr button); void move(int x, int y); @@ -66,6 +65,8 @@ private: bool _shouldBeShown = false; bool _forceHidden = false; + rpl::lifetime _contentLifetime; + }; } // namespace Ui