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<Window::SessionController*> controller);
[[nodiscard]] rpl::producer<> currentAccountActivations() const;
[[nodiscard]] rpl::producer<> closeRequests() const;
private:
void setup();
@ -209,7 +209,7 @@ private:
std::unique_ptr<Ui::VerticalLayoutReorder> _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(),
};
}

View File

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

View File

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