diff --git a/Telegram/SourceFiles/main/main_domain.cpp b/Telegram/SourceFiles/main/main_domain.cpp index 4badf2727c..d9525fb736 100644 --- a/Telegram/SourceFiles/main/main_domain.cpp +++ b/Telegram/SourceFiles/main/main_domain.cpp @@ -273,6 +273,20 @@ not_null Domain::add(MTP::Environment environment) { return account; } +void Domain::addActivated(MTP::Environment environment) { + if (accounts().size() < Main::Domain::kMaxAccounts) { + activate(add(environment)); + } else { + for (auto &[index, account] : accounts()) { + if (!account->sessionExists() + && account->mtp().environment() == environment) { + activate(account.get()); + break; + } + } + } +} + void Domain::watchSession(not_null account) { account->sessionValue( ) | rpl::filter([=](Session *session) { diff --git a/Telegram/SourceFiles/main/main_domain.h b/Telegram/SourceFiles/main/main_domain.h index 6e9da8386c..4adadf21ea 100644 --- a/Telegram/SourceFiles/main/main_domain.h +++ b/Telegram/SourceFiles/main/main_domain.h @@ -64,6 +64,7 @@ public: [[nodiscard]] not_null add(MTP::Environment environment); void activate(not_null account); + void addActivated(MTP::Environment environment); // Interface for Storage::Domain. void accountAddedInStorage(AccountWithIndex accountWithIndex); diff --git a/Telegram/SourceFiles/settings/settings_common.cpp b/Telegram/SourceFiles/settings/settings_common.cpp index 76b9f40bc5..0b6dc0390a 100644 --- a/Telegram/SourceFiles/settings/settings_common.cpp +++ b/Telegram/SourceFiles/settings/settings_common.cpp @@ -15,6 +15,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "settings/settings_privacy_security.h" #include "settings/settings_folders.h" #include "settings/settings_calls.h" +#include "core/application.h" #include "ui/wrap/padding_wrap.h" #include "ui/wrap/vertical_layout.h" #include "ui/widgets/labels.h" @@ -27,6 +28,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "lang/lang_keys.h" #include "mainwindow.h" #include "main/main_session.h" +#include "main/main_domain.h" #include "styles/style_layers.h" #include "styles/style_settings.h" @@ -195,6 +197,12 @@ void FillMenu( tr::lng_settings_bg_theme_create(tr::now), [=] { window->show(Box(Window::Theme::CreateBox, window)); }); } else { + const auto &list = Core::App().domain().accounts(); + if (list.size() < ::Main::Domain::kMaxAccounts) { + addAction(tr::lng_menu_add_account(tr::now), [=] { + Core::App().domain().addActivated(MTP::Environment{}); + }); + } if (!controller->session().supportMode()) { addAction( tr::lng_settings_information(tr::now), diff --git a/Telegram/SourceFiles/window/window_main_menu.cpp b/Telegram/SourceFiles/window/window_main_menu.cpp index a9f2e65a24..b4723b80c0 100644 --- a/Telegram/SourceFiles/window/window_main_menu.cpp +++ b/Telegram/SourceFiles/window/window_main_menu.cpp @@ -799,18 +799,7 @@ not_null*> MainMenu::setupAddAccount( }, button->lifetime()); const auto add = [=](MTP::Environment environment) { - auto &domain = Core::App().domain(); - if (domain.accounts().size() < Main::Domain::kMaxAccounts) { - domain.activate(domain.add(environment)); - } else { - for (auto &[index, account] : domain.accounts()) { - if (!account->sessionExists() - && account->mtp().environment() == environment) { - domain.activate(account.get()); - break; - } - } - } + Core::App().domain().addActivated(environment); }; button->setAcceptBoth(true);