diff --git a/Telegram/SourceFiles/history/history_widget.cpp b/Telegram/SourceFiles/history/history_widget.cpp index 0630c14547..13119ca1cc 100644 --- a/Telegram/SourceFiles/history/history_widget.cpp +++ b/Telegram/SourceFiles/history/history_widget.cpp @@ -2474,6 +2474,7 @@ void HistoryWidget::showHistory( _silent.destroy(); updateBotKeyboard(); + _subsectionCheckLifetime.destroy(); if (_subsectionTabs) { _subsectionTabsLifetime.destroy(); controller()->saveSubsectionTabs(base::take(_subsectionTabs)); @@ -2623,7 +2624,6 @@ void HistoryWidget::showHistory( channel->flagsValue( ) | rpl::start_with_next([=] { refreshJoinChannelText(); - validateSubsectionTabs(); }, _list->lifetime()); } else { refreshJoinChannelText(); @@ -8245,6 +8245,21 @@ void HistoryWidget::showPremiumToast(not_null document) { } void HistoryWidget::validateSubsectionTabs() { + if (!_subsectionCheckLifetime + && _history + && _history->peer->isMegagroup()) { + _subsectionCheckLifetime = _history->peer->asChannel()->flagsValue( + ) | rpl::skip( + 1 + ) | rpl::filter([=](Data::Flags::Change change) { + const auto mask = ChannelDataFlag::Forum + | ChannelDataFlag::ForumTabs + | ChannelDataFlag::MonoforumAdmin; + return change.diff & mask; + }) | rpl::start_with_next([=] { + validateSubsectionTabs(); + }); + } if (!_history || !HistoryView::SubsectionTabs::UsedFor(_history)) { if (_subsectionTabs) { _subsectionTabsLifetime.destroy(); diff --git a/Telegram/SourceFiles/history/history_widget.h b/Telegram/SourceFiles/history/history_widget.h index e9f536e403..3c7cc4e82e 100644 --- a/Telegram/SourceFiles/history/history_widget.h +++ b/Telegram/SourceFiles/history/history_widget.h @@ -829,6 +829,7 @@ private: std::unique_ptr _composeSearch; std::unique_ptr _subsectionTabs; rpl::lifetime _subsectionTabsLifetime; + rpl::lifetime _subsectionCheckLifetime; bool _cmdStartShown = false; object_ptr _field; base::unique_qptr _fieldDisabled; diff --git a/Telegram/SourceFiles/history/view/history_view_chat_section.cpp b/Telegram/SourceFiles/history/view/history_view_chat_section.cpp index 70e7d71042..cbd9d6c8a4 100644 --- a/Telegram/SourceFiles/history/view/history_view_chat_section.cpp +++ b/Telegram/SourceFiles/history/view/history_view_chat_section.cpp @@ -928,7 +928,6 @@ void ChatWidget::setupComposeControls() { channel->flagsValue() ) | rpl::start_with_next([=] { refreshJoinGroupButton(); - validateSubsectionTabs(); }, lifetime()); } else { refreshJoinGroupButton(); @@ -1522,6 +1521,19 @@ void ChatWidget::edit( } void ChatWidget::validateSubsectionTabs() { + if (!_subsectionCheckLifetime && _history->peer->isMegagroup()) { + _subsectionCheckLifetime = _history->peer->asChannel()->flagsValue( + ) | rpl::skip( + 1 + ) | rpl::filter([=](Data::Flags::Change change) { + const auto mask = ChannelDataFlag::Forum + | ChannelDataFlag::ForumTabs + | ChannelDataFlag::MonoforumAdmin; + return change.diff & mask; + }) | rpl::start_with_next([=] { + validateSubsectionTabs(); + }); + } if (!HistoryView::SubsectionTabs::UsedFor(_history)) { if (_subsectionTabs) { _subsectionTabsLifetime.destroy(); diff --git a/Telegram/SourceFiles/history/view/history_view_chat_section.h b/Telegram/SourceFiles/history/view/history_view_chat_section.h index a4fb8fb012..f62beb39d5 100644 --- a/Telegram/SourceFiles/history/view/history_view_chat_section.h +++ b/Telegram/SourceFiles/history/view/history_view_chat_section.h @@ -409,6 +409,7 @@ private: std::unique_ptr _emptyPainter; std::unique_ptr _subsectionTabs; rpl::lifetime _subsectionTabsLifetime; + rpl::lifetime _subsectionCheckLifetime; bool _canSendTexts = false; bool _skipScrollEvent = false; bool _synteticScrollEvent = false;