Fixed callback of back button in profile top bar.

This commit is contained in:
23rd
2025-10-30 17:40:45 +03:00
parent f08c00557d
commit f009fa9e47
8 changed files with 37 additions and 3 deletions
@@ -97,6 +97,10 @@ InnerWidget::InnerWidget(
}, lifetime());
}
rpl::producer<> InnerWidget::backRequest() const {
return _backClicks.events();
}
object_ptr<Ui::RpWidget> InnerWidget::setupContent(
not_null<RpWidget*> parent,
Origin origin) {
@@ -435,6 +439,8 @@ base::weak_qptr<Ui::RpWidget> InnerWidget::createPinnedToTop(
.backToggles = _backToggles.value(),
.showFinished = _showFinished.events(),
});
content->backRequest(
) | rpl::start_to_stream(_backClicks, content->lifetime());
content->setOnlineCount(_onlineCount.events());
_topBarColor = content->edgeColor();
return base::make_weak(not_null<Ui::RpWidget*>{ content });
@@ -46,6 +46,8 @@ public:
not_null<Controller*> controller,
Origin origin);
[[nodiscard]] rpl::producer<> backRequest() const;
void saveState(not_null<Memento*> memento);
void restoreState(not_null<Memento*> memento);
@@ -93,6 +95,7 @@ private:
rpl::event_stream<int> _desiredHeight;
rpl::variable<bool> _backToggles;
rpl::event_stream<> _backClicks;
rpl::event_stream<int> _onlineCount;
rpl::event_stream<> _showFinished;
@@ -930,6 +930,10 @@ TopBar::~TopBar() {
base::take(_badgeOldTooltips);
}
rpl::producer<> TopBar::backRequest() const {
return _backClicks.events();
}
void TopBar::setOnlineCount(rpl::producer<int> &&count) {
std::move(count) | rpl::start_with_next([=](int v) {
if (_statusLabel) {
@@ -1370,9 +1374,9 @@ void TopBar::setupButtons(
_back->toggleOn(isLayer || isSide
? rpl::duplicate(backToggles)
: rpl::single(wrap == Wrap::Narrow));
_back->entity()->setClickedCallback([=] {
controller->showBackFromStack();
});
_back->entity()->clicks() | rpl::to_empty | rpl::start_to_stream(
_backClicks,
_back->lifetime());
if (!isLayer && !isSide) {
_close = nullptr;
@@ -110,6 +110,8 @@ public:
TopBar(not_null<Ui::RpWidget*> parent, Descriptor descriptor);
~TopBar();
[[nodiscard]] rpl::producer<> backRequest() const;
void setOnlineCount(rpl::producer<int> &&count);
void setRoundEdges(bool value);
@@ -250,6 +252,8 @@ private:
base::unique_qptr<Ui::IconButton> _close;
base::unique_qptr<Ui::FadeWrap<Ui::IconButton>> _back;
rpl::event_stream<> _backClicks;
base::unique_qptr<Ui::IconButton> _topBarButton;
base::unique_qptr<Ui::PopupMenu> _peerMenu;
@@ -115,6 +115,10 @@ Widget::Widget(
}
}, lifetime());
_inner->backRequest() | rpl::start_with_next([=] {
checkBeforeClose([=] { controller->showBackFromStack(); });
}, _inner->lifetime());
if (_pinnedToTop) {
_inner->widthValue(
) | rpl::start_with_next([=](int w) {
@@ -263,6 +263,10 @@ void InnerWidget::setupAlbums() {
InnerWidget::~InnerWidget() = default;
rpl::producer<> InnerWidget::backRequest() const {
return _backClicks.events();
}
void InnerWidget::setupTop() {
const auto albumId = _albumId.current();
if (_addingToAlbumId) {
@@ -504,6 +508,8 @@ base::weak_qptr<Ui::RpWidget> InnerWidget::createPinnedToTop(
.backToggles = _backToggles.value(),
.showFinished = _showFinished.events(),
});
content->backRequest(
) | rpl::start_to_stream(_backClicks, content->lifetime());
_topBarColor = content->edgeColor();
return base::make_weak(not_null<Ui::RpWidget*>{ content });
}
@@ -57,6 +57,8 @@ public:
int addingToAlbumId = 0);
~InnerWidget();
[[nodiscard]] rpl::producer<> backRequest() const;
bool showInternal(not_null<Memento*> memento);
void setIsStackBottom(bool isStackBottom) {
_isStackBottom = isStackBottom;
@@ -162,6 +164,7 @@ private:
rpl::variable<bool> _albumEmpty;
rpl::variable<bool> _backToggles;
rpl::event_stream<> _backClicks;
rpl::event_stream<> _showFinished;
rpl::variable<std::optional<QColor>> _topBarColor;
@@ -124,6 +124,10 @@ Widget::Widget(
) | rpl::start_with_next([=] {
refreshBottom();
}, _inner->lifetime());
_inner->backRequest() | rpl::start_with_next([=] {
checkBeforeClose([=] { controller->showBackFromStack(); });
}, _inner->lifetime());
}
void Widget::setInnerFocus() {