Fix a regression in accounts switching.

This commit is contained in:
John Preston 2023-04-23 18:21:31 +04:00
parent 8fe2ec63b7
commit 1697e9e791
3 changed files with 17 additions and 17 deletions

View file

@ -188,7 +188,7 @@ public:
not_null<Ui::VerticalLayout*> container, not_null<Ui::VerticalLayout*> container,
not_null<Window::SessionController*> controller); not_null<Window::SessionController*> controller);
[[nodiscard]] rpl::producer<> currentAccountActivations() const; [[nodiscard]] rpl::producer<> closeRequests() const;
private: private:
void setup(); void setup();
@ -209,7 +209,7 @@ private:
std::unique_ptr<Ui::VerticalLayoutReorder> _reorder; std::unique_ptr<Ui::VerticalLayoutReorder> _reorder;
int _reordering = 0; int _reordering = 0;
rpl::event_stream<> _currentAccountActivations; rpl::event_stream<> _closeRequests;
base::binary_guard _accountSwitchGuard; base::binary_guard _accountSwitchGuard;
@ -728,8 +728,8 @@ AccountsList::AccountsList(
setup(); setup();
} }
rpl::producer<> AccountsList::currentAccountActivations() const { rpl::producer<> AccountsList::closeRequests() const {
return _currentAccountActivations.events(); return _closeRequests.events();
} }
void AccountsList::setup() { void AccountsList::setup() {
@ -887,25 +887,25 @@ void AccountsList::rebuild() {
return; return;
} }
if (account == &_controller->session().account()) { if (account == &_controller->session().account()) {
_currentAccountActivations.fire({}); _closeRequests.fire({});
return; return;
} }
const auto newWindow = (modifiers & Qt::ControlModifier); const auto newWindow = (modifiers & Qt::ControlModifier);
auto activate = [=, guard = _accountSwitchGuard.make_guard()]{ auto activate = [=, guard = _accountSwitchGuard.make_guard()]{
if (guard) { if (guard) {
_reorder->finishReordering(); _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)) { if (const auto window = Core::App().separateWindowForAccount(account)) {
_currentAccountActivations.fire({}); _closeRequests.fire({});
activate(); window->activate();
} else { } else {
_currentAccountActivations.fire({});
base::call_delayed( base::call_delayed(
st::defaultRippleAnimation.hideDuration, st::defaultRippleAnimation.hideDuration,
account, account,
@ -968,7 +968,7 @@ AccountsEvents SetupAccounts(
container, container,
controller); controller);
return { return {
.currentAccountActivations = list->currentAccountActivations(), .closeRequests = list->closeRequests(),
}; };
} }

View file

@ -33,7 +33,7 @@ private:
}; };
struct AccountsEvents { struct AccountsEvents {
rpl::producer<> currentAccountActivations; rpl::producer<> closeRequests;
}; };
AccountsEvents SetupAccounts( AccountsEvents SetupAccounts(
not_null<Ui::VerticalLayout*> container, not_null<Ui::VerticalLayout*> container,

View file

@ -680,7 +680,7 @@ void MainMenu::setupAccounts() {
inner->add(object_ptr<Ui::FixedHeightWidget>(inner, st::mainMenuSkip)); inner->add(object_ptr<Ui::FixedHeightWidget>(inner, st::mainMenuSkip));
std::move( std::move(
events.currentAccountActivations events.closeRequests
) | rpl::start_with_next([=] { ) | rpl::start_with_next([=] {
closeLayer(); closeLayer();
}, inner->lifetime()); }, inner->lifetime());