diff --git a/Telegram/SourceFiles/core/deep_links/deep_links_settings.cpp b/Telegram/SourceFiles/core/deep_links/deep_links_settings.cpp index 42958d7528..b5a329c1c0 100644 --- a/Telegram/SourceFiles/core/deep_links/deep_links_settings.cpp +++ b/Telegram/SourceFiles/core/deep_links/deep_links_settings.cpp @@ -223,7 +223,7 @@ Result ShowLogOutMenu(const Context &ctx) { return Result::NeedsAuth; } ctx.controller->setHighlightControlId(u"settings/log-out"_q); - ctx.controller->showSettings(::Settings::Main::Id()); + ctx.controller->showSettings(::Settings::MainId()); return Result::Handled; } @@ -321,7 +321,7 @@ Result ShowPrivacyBox( void RegisterSettingsHandlers(Router &router) { router.add(u"settings"_q, { .path = QString(), - .action = SettingsSection{ ::Settings::Main::Id() }, + .action = SettingsSection{ ::Settings::MainId() }, }); router.add(u"settings"_q, { @@ -466,7 +466,7 @@ void RegisterSettingsHandlers(Router &router) { router.add(u"settings"_q, { .path = u"profile-photo/use-emoji"_q, .action = SettingsControl{ - ::Settings::Main::Id(), + ::Settings::MainId(), u"profile-photo/use-emoji"_q, }, }); @@ -1390,7 +1390,7 @@ void RegisterSettingsHandlers(Router &router) { router.add(u"settings"_q, { .path = u"appearance/text-size"_q, .action = SettingsControl{ - ::Settings::Main::Id(), + ::Settings::MainId(), u"main/scale"_q, }, }); @@ -1679,7 +1679,7 @@ void RegisterSettingsHandlers(Router &router) { router.add(u"settings"_q, { .path = u"search"_q, - .action = SettingsSection{ ::Settings::Main::Id() }, + .action = SettingsSection{ ::Settings::MainId() }, }); router.add(u"settings"_q, { @@ -1700,7 +1700,7 @@ void RegisterSettingsHandlers(Router &router) { router.add(u"settings"_q, { .path = u"edit/set-photo"_q, .action = SettingsControl{ - ::Settings::Main::Id(), + ::Settings::MainId(), u"profile-photo"_q, }, }); diff --git a/Telegram/SourceFiles/core/local_url_handlers.cpp b/Telegram/SourceFiles/core/local_url_handlers.cpp index 6a42c08472..6db0176be8 100644 --- a/Telegram/SourceFiles/core/local_url_handlers.cpp +++ b/Telegram/SourceFiles/core/local_url_handlers.cpp @@ -842,7 +842,7 @@ bool ResolveSettings( ShowLoginEmailSettings(controller); return {}; } - return ::Settings::Main::Id(); + return ::Settings::MainId(); }(); if (type.has_value()) { diff --git a/Telegram/SourceFiles/info/info_wrap_widget.cpp b/Telegram/SourceFiles/info/info_wrap_widget.cpp index bfd7b2d2b8..5f9a5c6f45 100644 --- a/Telegram/SourceFiles/info/info_wrap_widget.cpp +++ b/Telegram/SourceFiles/info/info_wrap_widget.cpp @@ -411,7 +411,7 @@ void WrapWidget::setupTopBarMenuToggle() { addProfileCallsButton(); } else if (section.type() == Section::Type::Settings) { addTopBarMenuButton(); - if (section.settingsType() == ::Settings::Main::Id()) { + if (section.settingsType() == ::Settings::MainId()) { const auto &st = (wrap() == Wrap::Layer) ? st::infoLayerTopBarSearch : st::infoTopBarSearch; @@ -800,7 +800,7 @@ void WrapWidget::showFinishedHook() { const auto controller = _controller->parentController(); const auto settingsType = _controller->section().settingsType(); const auto highlightId = [&]() -> QString { - if (settingsType == ::Settings::Main::Id()) { + if (settingsType == ::Settings::MainId()) { return u"settings/log-out"_q; } else if (settingsType == ::Settings::Chat::Id()) { return u"chat/themes-create"_q; diff --git a/Telegram/SourceFiles/info/settings/info_settings_widget.cpp b/Telegram/SourceFiles/info/settings/info_settings_widget.cpp index 48397c5b73..471f21e826 100644 --- a/Telegram/SourceFiles/info/settings/info_settings_widget.cpp +++ b/Telegram/SourceFiles/info/settings/info_settings_widget.cpp @@ -10,6 +10,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "info/info_memento.h" #include "settings/sections/settings_main.h" #include "settings/sections/settings_information.h" +#include "settings/settings_common_session.h" #include "ui/ui_utility.h" namespace Info { @@ -202,7 +203,7 @@ const Ui::RoundRect *Widget::bottomSkipRounding() const { } rpl::producer Widget::desiredShadowVisibility() const { - return (_type == ::Settings::Main::Id() + return (_type == ::Settings::MainId() || _type == ::Settings::InformationId()) ? ContentWidget::desiredShadowVisibility() : rpl::single(true); diff --git a/Telegram/SourceFiles/settings/sections/settings_advanced.cpp b/Telegram/SourceFiles/settings/sections/settings_advanced.cpp index 6392bf462b..59b3665057 100644 --- a/Telegram/SourceFiles/settings/sections/settings_advanced.cpp +++ b/Telegram/SourceFiles/settings/sections/settings_advanced.cpp @@ -1114,7 +1114,7 @@ void BuildExportSection(SectionBuilder &builder) { const auto kMeta = BuildHelper({ .id = Advanced::Id(), - .parentId = Main::Id(), + .parentId = MainId(), .title = &tr::lng_settings_advanced, .icon = &st::menuIconManage, }, [](SectionBuilder &builder) { diff --git a/Telegram/SourceFiles/settings/sections/settings_business.cpp b/Telegram/SourceFiles/settings/sections/settings_business.cpp index af56fe8ef7..dabcb45c02 100644 --- a/Telegram/SourceFiles/settings/sections/settings_business.cpp +++ b/Telegram/SourceFiles/settings/sections/settings_business.cpp @@ -951,7 +951,7 @@ base::weak_qptr Business::createPinnedToBottom( const auto kMeta = BuildHelper({ .id = Business::Id(), - .parentId = Main::Id(), + .parentId = MainId(), .title = &tr::lng_business_title, .icon = &st::menuIconShop, }, [](SectionBuilder &builder) { diff --git a/Telegram/SourceFiles/settings/sections/settings_calls.cpp b/Telegram/SourceFiles/settings/sections/settings_calls.cpp index 92ec82a675..58fd414aed 100644 --- a/Telegram/SourceFiles/settings/sections/settings_calls.cpp +++ b/Telegram/SourceFiles/settings/sections/settings_calls.cpp @@ -20,6 +20,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "platform/platform_specific.h" #include "settings/sections/settings_main.h" #include "settings/settings_builder.h" +#include "settings/settings_common_session.h" #include "tgcalls/VideoCaptureInterface.h" #include "ui/boxes/confirm_box.h" #include "ui/boxes/single_choice_box.h" @@ -725,7 +726,7 @@ void Calls::requestPermissionAndStartTestingMicrophone() { const auto kMeta = BuildHelper({ .id = Calls::Id(), - .parentId = Main::Id(), + .parentId = MainId(), .title = &tr::lng_settings_section_devices, .icon = &st::menuIconUnmute, }, [](SectionBuilder &builder) { diff --git a/Telegram/SourceFiles/settings/sections/settings_chat.cpp b/Telegram/SourceFiles/settings/sections/settings_chat.cpp index 7c56c6ec03..e6e5e474de 100644 --- a/Telegram/SourceFiles/settings/sections/settings_chat.cpp +++ b/Telegram/SourceFiles/settings/sections/settings_chat.cpp @@ -1274,7 +1274,7 @@ void BuildChatSectionContent(SectionBuilder &builder) { const auto kMeta = BuildHelper({ .id = Chat::Id(), - .parentId = Main::Id(), + .parentId = MainId(), .title = &tr::lng_settings_section_chat_settings, .icon = &st::menuIconChatBubble, }, [](SectionBuilder &builder) { diff --git a/Telegram/SourceFiles/settings/sections/settings_credits.cpp b/Telegram/SourceFiles/settings/sections/settings_credits.cpp index 235d02b3a9..942f63d67a 100644 --- a/Telegram/SourceFiles/settings/sections/settings_credits.cpp +++ b/Telegram/SourceFiles/settings/sections/settings_credits.cpp @@ -1033,7 +1033,7 @@ void BuildCreditsSectionContent( const auto kCreditsBuilderMeta = BuildHelper({ .id = Credits::Id(), - .parentId = Main::Id(), + .parentId = MainId(), .title = &tr::lng_credits_summary_title, .icon = &st::menuIconPremium, }, [](SectionBuilder &builder) { diff --git a/Telegram/SourceFiles/settings/sections/settings_folders.cpp b/Telegram/SourceFiles/settings/sections/settings_folders.cpp index c6af86d564..91ff4e11ce 100644 --- a/Telegram/SourceFiles/settings/sections/settings_folders.cpp +++ b/Telegram/SourceFiles/settings/sections/settings_folders.cpp @@ -1238,7 +1238,7 @@ void Folders::showFinished() { const auto kMeta = BuildHelper({ .id = Folders::Id(), - .parentId = Main::Id(), + .parentId = MainId(), .title = &tr::lng_filters_title, .icon = &st::menuIconShowInFolder, }, [](SectionBuilder &builder) { diff --git a/Telegram/SourceFiles/settings/sections/settings_information.cpp b/Telegram/SourceFiles/settings/sections/settings_information.cpp index bc585e89f8..b42c74f650 100644 --- a/Telegram/SourceFiles/settings/sections/settings_information.cpp +++ b/Telegram/SourceFiles/settings/sections/settings_information.cpp @@ -9,6 +9,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "settings/sections/settings_main.h" #include "settings/settings_builder.h" +#include "settings/settings_common_session.h" #include "ui/wrap/vertical_layout.h" #include "ui/wrap/vertical_layout_reorder.h" #include "ui/wrap/padding_wrap.h" @@ -1294,7 +1295,7 @@ void Information::setupContent() { const auto kMeta = BuildHelper({ .id = Information::Id(), - .parentId = Main::Id(), + .parentId = MainId(), .title = &tr::lng_settings_section_info, .icon = &st::menuIconProfile, }, [](SectionBuilder &builder) { diff --git a/Telegram/SourceFiles/settings/sections/settings_main.cpp b/Telegram/SourceFiles/settings/sections/settings_main.cpp index 77df2db975..d10bc8a9bf 100644 --- a/Telegram/SourceFiles/settings/sections/settings_main.cpp +++ b/Telegram/SourceFiles/settings/sections/settings_main.cpp @@ -595,6 +595,135 @@ void BuildValidationSuggestions(SectionBuilder &builder) { }); } +class Main final : public Section
{ +public: + Main(QWidget *parent, not_null controller); + + [[nodiscard]] rpl::producer title() override; + + void fillTopBarMenu(const Ui::Menu::MenuCallback &addAction) override; + void showFinished() override; + +protected: + void keyPressEvent(QKeyEvent *e) override; + +private: + void setupContent(); + + QPointer _userpic; + +}; + +Main::Main( + QWidget *parent, + not_null controller) +: Section(parent, controller) { + setupContent(); +} + +rpl::producer Main::title() { + return tr::lng_menu_settings(); +} + +void Main::fillTopBarMenu(const Ui::Menu::MenuCallback &addAction) { + const auto &list = Core::App().domain().accounts(); + if (list.size() < Core::App().domain().maxAccounts()) { + addAction(tr::lng_menu_add_account(tr::now), [=] { + Core::App().domain().addActivated(MTP::Environment{}); + }, &st::menuIconAddAccount); + } + if (!controller()->session().supportMode()) { + addAction( + tr::lng_settings_information(tr::now), + [=] { showOther(InformationId()); }, + &st::menuIconEdit); + } + const auto window = &controller()->window(); + const auto logout = addAction({ + .text = tr::lng_settings_logout(tr::now), + .handler = [=] { window->showLogoutConfirmation(); }, + .icon = &st::menuIconLeaveAttention, + .isAttention = true, + }); + logout->setProperty("highlight-control-id", u"settings/log-out"_q); +} + +void Main::keyPressEvent(QKeyEvent *e) { + crl::on_main(this, [=, text = e->text()]{ + CodesFeedString(controller(), text); + }); + return Section::keyPressEvent(e); +} + +void Main::setupContent() { + const auto content = Ui::CreateChild(this); + + const auto window = controller(); + const auto session = &window->session(); + const auto cover = content->add(object_ptr( + content, + window, + session->user())); + _userpic = cover->userpic(); + + const SectionBuildMethod buildMethod = []( + not_null container, + not_null controller, + Fn showOther, + rpl::producer<> showFinished) { + const auto isPaused = Window::PausedIn( + controller, + Window::GifPauseReason::Layer); + auto builder = SectionBuilder(WidgetContext{ + .container = container, + .controller = controller, + .showOther = std::move(showOther), + .isPaused = isPaused, + }); + builder.addDivider(); + builder.addSkip(); + BuildValidationSuggestions(builder); + BuildSectionButtons(builder); + builder.addSkip(); + BuildInterfaceScale(builder); + BuildPremiumSection(builder); + BuildHelpSection(builder); + }; + build(content, buildMethod); + + Ui::ResizeFitChild(this, content); + + session->api().cloudPassword().reload(); + session->api().reloadContactSignupSilent(); + session->api().sensitiveContent().reload(); + session->api().globalPrivacy().reload(); + session->api().premium().reload(); + session->data().cloudThemes().refresh(); +} + +void Main::showFinished() { + controller()->checkHighlightControl(u"profile-photo"_q, _userpic.data(), { + .margin = st::settingsPhotoHighlightMargin, + .shape = HighlightShape::Ellipse, + }); + const auto emojiId = u"profile-photo/use-emoji"_q; + if (controller()->takeHighlightControlId(emojiId)) { + if (const auto popupMenu = _userpic->showChangePhotoMenu()) { + const auto menu = popupMenu->menu(); + for (const auto action : menu->actions()) { + const auto controlId = "highlight-control-id"; + if (action->property(controlId).toString() == emojiId) { + if (const auto item = menu->itemForAction(action)) { + HighlightWidget(item); + } + break; + } + } + } + } + Section
::showFinished(); +} + const auto kMeta = BuildHelper({ .id = Main::Id(), .parentId = nullptr, @@ -985,91 +1114,8 @@ void SetupInterfaceScale( } } -Main::Main( - QWidget *parent, - not_null controller) -: Section(parent, controller) { - setupContent(); -} - -rpl::producer Main::title() { - return tr::lng_menu_settings(); -} - -void Main::fillTopBarMenu(const Ui::Menu::MenuCallback &addAction) { - const auto &list = Core::App().domain().accounts(); - if (list.size() < Core::App().domain().maxAccounts()) { - addAction(tr::lng_menu_add_account(tr::now), [=] { - Core::App().domain().addActivated(MTP::Environment{}); - }, &st::menuIconAddAccount); - } - if (!controller()->session().supportMode()) { - addAction( - tr::lng_settings_information(tr::now), - [=] { showOther(InformationId()); }, - &st::menuIconEdit); - } - const auto window = &controller()->window(); - const auto logout = addAction({ - .text = tr::lng_settings_logout(tr::now), - .handler = [=] { window->showLogoutConfirmation(); }, - .icon = &st::menuIconLeaveAttention, - .isAttention = true, - }); - logout->setProperty("highlight-control-id", u"settings/log-out"_q); -} - -void Main::keyPressEvent(QKeyEvent *e) { - crl::on_main(this, [=, text = e->text()]{ - CodesFeedString(controller(), text); - }); - return Section::keyPressEvent(e); -} - -void Main::setupContent() { - const auto content = Ui::CreateChild(this); - - const auto window = controller(); - const auto session = &window->session(); - const auto cover = content->add(object_ptr( - content, - window, - session->user())); - _userpic = cover->userpic(); - - build(content, Builder::MainSection); - - Ui::ResizeFitChild(this, content); - - session->api().cloudPassword().reload(); - session->api().reloadContactSignupSilent(); - session->api().sensitiveContent().reload(); - session->api().globalPrivacy().reload(); - session->api().premium().reload(); - session->data().cloudThemes().refresh(); -} - -void Main::showFinished() { - controller()->checkHighlightControl(u"profile-photo"_q, _userpic.data(), { - .margin = st::settingsPhotoHighlightMargin, - .shape = HighlightShape::Ellipse, - }); - const auto emojiId = u"profile-photo/use-emoji"_q; - if (controller()->takeHighlightControlId(emojiId)) { - if (const auto popupMenu = _userpic->showChangePhotoMenu()) { - const auto menu = popupMenu->menu(); - for (const auto action : menu->actions()) { - const auto controlId = "highlight-control-id"; - if (action->property(controlId).toString() == emojiId) { - if (const auto item = menu->itemForAction(action)) { - HighlightWidget(item); - } - break; - } - } - } - } - Section
::showFinished(); +Type MainId() { + return Main::Id(); } void OpenFaq(base::weak_ptr weak) { @@ -1115,9 +1161,4 @@ void OpenAskQuestionConfirm(not_null window) { })); } -namespace Builder { - -SectionBuildMethod MainSection = kMeta.build; - -} // namespace Builder } // namespace Settings diff --git a/Telegram/SourceFiles/settings/sections/settings_main.h b/Telegram/SourceFiles/settings/sections/settings_main.h index 26c122f84f..c06b499e59 100644 --- a/Telegram/SourceFiles/settings/sections/settings_main.h +++ b/Telegram/SourceFiles/settings/sections/settings_main.h @@ -7,7 +7,6 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL */ #pragma once -#include "settings/settings_common_session.h" #include "settings/settings_type.h" namespace Window { @@ -16,13 +15,13 @@ class SessionController; } // namespace Window namespace Ui { -class SettingsButton; -class UserpicButton; class VerticalLayout; } // namespace Ui namespace Settings { +[[nodiscard]] Type MainId(); + void SetupLanguageButton( not_null window, not_null container); @@ -44,30 +43,4 @@ void SetupValidatePasswordSuggestion( void OpenFaq(base::weak_ptr weak); void OpenAskQuestionConfirm(not_null window); -class Main : public Section
{ -public: - Main(QWidget *parent, not_null controller); - - [[nodiscard]] rpl::producer title() override; - - void fillTopBarMenu( - const Ui::Menu::MenuCallback &addAction) override; - - void showFinished() override; - -protected: - void keyPressEvent(QKeyEvent *e) override; - -private: - void setupContent(); - - QPointer _userpic; - -}; - -namespace Builder { - -extern SectionBuildMethod MainSection; - -} // namespace Builder } // namespace Settings diff --git a/Telegram/SourceFiles/settings/sections/settings_notifications.cpp b/Telegram/SourceFiles/settings/sections/settings_notifications.cpp index a66a4f37ef..2b6eb5b427 100644 --- a/Telegram/SourceFiles/settings/sections/settings_notifications.cpp +++ b/Telegram/SourceFiles/settings/sections/settings_notifications.cpp @@ -1488,7 +1488,7 @@ void BuildNotificationsSectionContent(SectionBuilder &builder) { const auto kMeta = BuildHelper({ .id = Notifications::Id(), - .parentId = Main::Id(), + .parentId = MainId(), .title = &tr::lng_settings_section_notify, .icon = &st::menuIconNotifications, }, [](SectionBuilder &builder) { diff --git a/Telegram/SourceFiles/settings/sections/settings_premium.cpp b/Telegram/SourceFiles/settings/sections/settings_premium.cpp index d4e0460211..2d7847c6ab 100644 --- a/Telegram/SourceFiles/settings/sections/settings_premium.cpp +++ b/Telegram/SourceFiles/settings/sections/settings_premium.cpp @@ -1578,7 +1578,7 @@ base::weak_qptr Premium::createPinnedToBottom( const auto kMeta = BuildHelper({ .id = Premium::Id(), - .parentId = Main::Id(), + .parentId = MainId(), .title = &tr::lng_premium_summary_title, .icon = &st::menuIconPremium, }, [](SectionBuilder &builder) { diff --git a/Telegram/SourceFiles/settings/sections/settings_privacy_security.cpp b/Telegram/SourceFiles/settings/sections/settings_privacy_security.cpp index 066dc9c359..d1046d54c5 100644 --- a/Telegram/SourceFiles/settings/sections/settings_privacy_security.cpp +++ b/Telegram/SourceFiles/settings/sections/settings_privacy_security.cpp @@ -1793,7 +1793,7 @@ void BuildPrivacySecuritySectionContent(SectionBuilder &builder) { const auto kMeta = BuildHelper({ .id = PrivacySecurity::Id(), - .parentId = Main::Id(), + .parentId = MainId(), .title = &tr::lng_settings_section_privacy, .icon = &st::menuIconLock, }, [](SectionBuilder &builder) { diff --git a/Telegram/SourceFiles/settings/settings_common_session.cpp b/Telegram/SourceFiles/settings/settings_common_session.cpp index d4a149d4d6..a0b463e8fb 100644 --- a/Telegram/SourceFiles/settings/settings_common_session.cpp +++ b/Telegram/SourceFiles/settings/settings_common_session.cpp @@ -15,7 +15,7 @@ namespace Settings { bool HasMenu(Type type) { return (type == ::Settings::CloudPasswordEmailConfirmId()) - || (type == Main::Id()) + || (type == MainId()) || (type == Chat::Id()); } diff --git a/Telegram/SourceFiles/window/window_session_controller.cpp b/Telegram/SourceFiles/window/window_session_controller.cpp index 3989f877d0..11e079ae5b 100644 --- a/Telegram/SourceFiles/window/window_session_controller.cpp +++ b/Telegram/SourceFiles/window/window_session_controller.cpp @@ -1460,7 +1460,7 @@ void SessionNavigation::showSettings( } void SessionNavigation::showSettings(const SectionShow ¶ms) { - showSettings(Settings::Main::Id(), params); + showSettings(Settings::MainId(), params); } void SessionNavigation::showPollResults(