From fbd9437775605f530cd5511aae5076823b3c89d2 Mon Sep 17 00:00:00 2001 From: 23rd <23rd@vivaldi.net> Date: Thu, 5 May 2022 23:20:05 +0300 Subject: [PATCH] Added ability to transfer variant data between nearest setting sections. --- Telegram/SourceFiles/info/info_controller.cpp | 8 ++++++++ Telegram/SourceFiles/info/info_controller.h | 7 ++++++- Telegram/SourceFiles/info/info_wrap_widget.cpp | 3 +++ .../SourceFiles/info/settings/info_settings_widget.cpp | 3 ++- Telegram/SourceFiles/settings/settings_common.h | 2 ++ 5 files changed, 21 insertions(+), 2 deletions(-) diff --git a/Telegram/SourceFiles/info/info_controller.cpp b/Telegram/SourceFiles/info/info_controller.cpp index bde22cd81..525323c83 100644 --- a/Telegram/SourceFiles/info/info_controller.cpp +++ b/Telegram/SourceFiles/info/info_controller.cpp @@ -342,6 +342,14 @@ rpl::producer Controller::mediaSource( limitAfter); } +std::any &Controller::stepDataReference() { + return _stepData; +} + +void Controller::takeStepData(not_null another) { + _stepData = base::take(another->_stepData); +} + Controller::~Controller() = default; } // namespace Info diff --git a/Telegram/SourceFiles/info/info_controller.h b/Telegram/SourceFiles/info/info_controller.h index 10a38a7ab..e7f48d518 100644 --- a/Telegram/SourceFiles/info/info_controller.h +++ b/Telegram/SourceFiles/info/info_controller.h @@ -10,7 +10,6 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include #include "data/data_search_controller.h" #include "window/window_session_controller.h" -#include "settings/settings_common.h" namespace Ui { class SearchFieldController; @@ -214,6 +213,9 @@ public: void removeFromStack(const std::vector
§ions) const; + void takeStepData(not_null another); + std::any &stepDataReference(); + rpl::lifetime &lifetime() { return _lifetime; } @@ -238,6 +240,9 @@ private: rpl::variable _seachEnabledByContent = false; bool _searchStartsFocused = false; + // Data between sections based on steps. + std::any _stepData; + rpl::lifetime _lifetime; }; diff --git a/Telegram/SourceFiles/info/info_wrap_widget.cpp b/Telegram/SourceFiles/info/info_wrap_widget.cpp index 5fc532606..80e569939 100644 --- a/Telegram/SourceFiles/info/info_wrap_widget.cpp +++ b/Telegram/SourceFiles/info/info_wrap_widget.cpp @@ -920,6 +920,9 @@ void WrapWidget::showNewContent( auto newController = createController( _controller->parentController(), memento); + if (_controller && newController) { + newController->takeStepData(_controller.get()); + } auto newContent = object_ptr(nullptr); if (needAnimation) { newContent = createContent(memento, newController.get()); diff --git a/Telegram/SourceFiles/info/settings/info_settings_widget.cpp b/Telegram/SourceFiles/info/settings/info_settings_widget.cpp index 285497ed6..0797a96c2 100644 --- a/Telegram/SourceFiles/info/settings/info_settings_widget.cpp +++ b/Telegram/SourceFiles/info/settings/info_settings_widget.cpp @@ -8,7 +8,6 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "info/settings/info_settings_widget.h" #include "info/info_memento.h" -#include "info/info_controller.h" #include "settings/settings_common.h" #include "settings/settings_main.h" #include "settings/settings_information.h" @@ -60,6 +59,8 @@ Widget::Widget( controller->showBackFromStack(); }, _inner->lifetime()); + _inner->setStepDataReference(controller->stepDataReference()); + _removesFromStack.events( ) | rpl::start_with_next([=](const std::vector &types) { const auto sections = ranges::views::all( diff --git a/Telegram/SourceFiles/settings/settings_common.h b/Telegram/SourceFiles/settings/settings_common.h index adf4e62fd..e59787041 100644 --- a/Telegram/SourceFiles/settings/settings_common.h +++ b/Telegram/SourceFiles/settings/settings_common.h @@ -100,6 +100,8 @@ public: not_null parent) { return nullptr; } + virtual void setStepDataReference(std::any &data) { + } }; template