From bcd1d8461fcdf245a059fa590e06d292837a6ff9 Mon Sep 17 00:00:00 2001 From: 23rd <23rd@vivaldi.net> Date: Fri, 20 Dec 2024 19:30:07 +0300 Subject: [PATCH] Added ability to open context menu for active account from main menu. --- .../settings/settings_information.cpp | 63 ++++++++++--------- 1 file changed, 35 insertions(+), 28 deletions(-) diff --git a/Telegram/SourceFiles/settings/settings_information.cpp b/Telegram/SourceFiles/settings/settings_information.cpp index c8c8fe4fc2..0bbd9a1bb1 100644 --- a/Telegram/SourceFiles/settings/settings_information.cpp +++ b/Telegram/SourceFiles/settings/settings_information.cpp @@ -746,19 +746,22 @@ void SetupAccountsWrap( } else if (which != Qt::RightButton) { return; } - if (session == &window->session() || state->menu) { + if (state->menu) { return; } + const auto isActive = session == &window->session(); state->menu = base::make_unique_q( raw, st::popupMenuExpandedSeparator); const auto addAction = Ui::Menu::CreateAddActionCallback( state->menu); - addAction(tr::lng_context_new_window(tr::now), [=] { - Ui::PreventDelayedActivation(); - callback(Qt::ControlModifier); - }, &st::menuIconNewWindow); - Window::AddSeparatorAndShiftUp(addAction); + if (!isActive) { + addAction(tr::lng_context_new_window(tr::now), [=] { + Ui::PreventDelayedActivation(); + callback(Qt::ControlModifier); + }, &st::menuIconNewWindow); + Window::AddSeparatorAndShiftUp(addAction); + } addAction(tr::lng_profile_copy_phone(tr::now), [=] { const auto phone = rpl::variable( @@ -767,35 +770,39 @@ void SetupAccountsWrap( }, &st::menuIconCopy); if (!locked) { - addAction(tr::lng_menu_activate(tr::now), [=] { - callback({}); - }, &st::menuIconProfile); + if (!isActive) { + addAction(tr::lng_menu_activate(tr::now), [=] { + callback({}); + }, &st::menuIconProfile); + } Window::MenuAddMarkAsReadAllChatsAction( session, window->uiShow(), addAction); } - auto logoutCallback = [=] { - const auto callback = [=](Fn &&close) { - close(); - Core::App().logoutWithChecks(&session->account()); + if (!isActive) { + auto logoutCallback = [=] { + const auto callback = [=](Fn &&close) { + close(); + Core::App().logoutWithChecks(&session->account()); + }; + window->show( + Ui::MakeConfirmBox({ + .text = tr::lng_sure_logout(), + .confirmed = crl::guard(session, callback), + .confirmText = tr::lng_settings_logout(), + .confirmStyle = &st::attentionBoxButton, + }), + Ui::LayerOption::CloseOther); }; - window->show( - Ui::MakeConfirmBox({ - .text = tr::lng_sure_logout(), - .confirmed = crl::guard(session, callback), - .confirmText = tr::lng_settings_logout(), - .confirmStyle = &st::attentionBoxButton, - }), - Ui::LayerOption::CloseOther); - }; - addAction({ - .text = tr::lng_settings_logout(tr::now), - .handler = std::move(logoutCallback), - .icon = &st::menuIconLeaveAttention, - .isAttention = true, - }); + addAction({ + .text = tr::lng_settings_logout(tr::now), + .handler = std::move(logoutCallback), + .icon = &st::menuIconLeaveAttention, + .isAttention = true, + }); + } state->menu->popup(QCursor::pos()); }, raw->lifetime());