diff --git a/Telegram/SourceFiles/settings/settings_information.cpp b/Telegram/SourceFiles/settings/settings_information.cpp index 204cd73b8..7a001d74d 100644 --- a/Telegram/SourceFiles/settings/settings_information.cpp +++ b/Telegram/SourceFiles/settings/settings_information.cpp @@ -188,7 +188,7 @@ public: not_null container, not_null controller); - [[nodiscard]] rpl::producer<> currentAccountActivations() const; + [[nodiscard]] rpl::producer<> closeRequests() const; private: void setup(); @@ -209,7 +209,7 @@ private: std::unique_ptr _reorder; int _reordering = 0; - rpl::event_stream<> _currentAccountActivations; + rpl::event_stream<> _closeRequests; base::binary_guard _accountSwitchGuard; @@ -728,8 +728,8 @@ AccountsList::AccountsList( setup(); } -rpl::producer<> AccountsList::currentAccountActivations() const { - return _currentAccountActivations.events(); +rpl::producer<> AccountsList::closeRequests() const { + return _closeRequests.events(); } void AccountsList::setup() { @@ -887,25 +887,25 @@ void AccountsList::rebuild() { return; } if (account == &_controller->session().account()) { - _currentAccountActivations.fire({}); + _closeRequests.fire({}); return; } const auto newWindow = (modifiers & Qt::ControlModifier); auto activate = [=, guard = _accountSwitchGuard.make_guard()]{ if (guard) { _reorder->finishReordering(); + if (newWindow) { + _closeRequests.fire({}); + Core::App().ensureSeparateWindowForAccount( + account); + } + Core::App().domain().maybeActivate(account); } - if (newWindow) { - Core::App().ensureSeparateWindowForAccount( - account); - } - Core::App().domain().maybeActivate(account); }; - if (Core::App().separateWindowForAccount(account)) { - _currentAccountActivations.fire({}); - activate(); + if (const auto window = Core::App().separateWindowForAccount(account)) { + _closeRequests.fire({}); + window->activate(); } else { - _currentAccountActivations.fire({}); base::call_delayed( st::defaultRippleAnimation.hideDuration, account, @@ -968,7 +968,7 @@ AccountsEvents SetupAccounts( container, controller); return { - .currentAccountActivations = list->currentAccountActivations(), + .closeRequests = list->closeRequests(), }; } diff --git a/Telegram/SourceFiles/settings/settings_information.h b/Telegram/SourceFiles/settings/settings_information.h index 7ac2a9aaa..fa261df22 100644 --- a/Telegram/SourceFiles/settings/settings_information.h +++ b/Telegram/SourceFiles/settings/settings_information.h @@ -33,7 +33,7 @@ private: }; struct AccountsEvents { - rpl::producer<> currentAccountActivations; + rpl::producer<> closeRequests; }; AccountsEvents SetupAccounts( not_null container, diff --git a/Telegram/SourceFiles/window/window_main_menu.cpp b/Telegram/SourceFiles/window/window_main_menu.cpp index f85868c40..2feff047b 100644 --- a/Telegram/SourceFiles/window/window_main_menu.cpp +++ b/Telegram/SourceFiles/window/window_main_menu.cpp @@ -680,7 +680,7 @@ void MainMenu::setupAccounts() { inner->add(object_ptr(inner, st::mainMenuSkip)); std::move( - events.currentAccountActivations + events.closeRequests ) | rpl::start_with_next([=] { closeLayer(); }, inner->lifetime());