diff --git a/Telegram/SourceFiles/info/settings/info_settings_widget.cpp b/Telegram/SourceFiles/info/settings/info_settings_widget.cpp index 7c5ff4620..02d6d6c8d 100644 --- a/Telegram/SourceFiles/info/settings/info_settings_widget.cpp +++ b/Telegram/SourceFiles/info/settings/info_settings_widget.cpp @@ -47,11 +47,25 @@ Widget::Widget( , _type(controller->section().settingsType()) , _inner( setInnerWidget( - _type()->create(this, controller->parentController()))) { + _type()->create(this, controller->parentController()))) +, _pinnedToTop(_inner->createPinnedToTop(this)) { _inner->sectionShowOther( ) | rpl::start_with_next([=](Type type) { controller->showSettings(type); }, _inner->lifetime()); + + if (_pinnedToTop) { + _inner->widthValue( + ) | rpl::start_with_next([=](int w) { + _pinnedToTop->resizeToWidth(w); + setScrollTopSkip(_pinnedToTop->height()); + }, _pinnedToTop->lifetime()); + + _pinnedToTop->heightValue( + ) | rpl::start_with_next([=](int h) { + setScrollTopSkip(h); + }, _pinnedToTop->lifetime()); + } } Widget::~Widget() = default; diff --git a/Telegram/SourceFiles/info/settings/info_settings_widget.h b/Telegram/SourceFiles/info/settings/info_settings_widget.h index 2e8ae3a77..6dddc62b6 100644 --- a/Telegram/SourceFiles/info/settings/info_settings_widget.h +++ b/Telegram/SourceFiles/info/settings/info_settings_widget.h @@ -81,6 +81,7 @@ private: Type _type = Type(); not_null<::Settings::AbstractSection*> _inner; + QPointer _pinnedToTop; }; diff --git a/Telegram/SourceFiles/settings/settings_common.h b/Telegram/SourceFiles/settings/settings_common.h index 96297f72f..511835037 100644 --- a/Telegram/SourceFiles/settings/settings_common.h +++ b/Telegram/SourceFiles/settings/settings_common.h @@ -80,6 +80,10 @@ public: } virtual void showFinished() { } + [[nodiscard]] virtual QPointer createPinnedToTop( + not_null parent) { + return nullptr; + } }; template