From df4addae83734b50ef1aa7385ac7313995a2d2d4 Mon Sep 17 00:00:00 2001 From: RadRussianRus Date: Sun, 11 Sep 2022 03:40:43 +0300 Subject: [PATCH] [Improvement] Shortcuts to switch accounts --- Telegram/SourceFiles/core/shortcuts.cpp | 36 +++++++++++++++---- Telegram/SourceFiles/core/shortcuts.h | 8 +++++ .../dialogs/dialogs_inner_widget.cpp | 24 +++++++++++++ 3 files changed, 62 insertions(+), 6 deletions(-) diff --git a/Telegram/SourceFiles/core/shortcuts.cpp b/Telegram/SourceFiles/core/shortcuts.cpp index 5a064a033..71f5906c7 100644 --- a/Telegram/SourceFiles/core/shortcuts.cpp +++ b/Telegram/SourceFiles/core/shortcuts.cpp @@ -117,6 +117,17 @@ const auto CommandByName = base::flat_map{ { qsl("pinned_3") , Command::ChatPinned3 }, { qsl("pinned_4") , Command::ChatPinned4 }, { qsl("pinned_5") , Command::ChatPinned5 }, + + { qsl("account1") , Command::ShowAccount1 }, + { qsl("account2") , Command::ShowAccount2 }, + { qsl("account3") , Command::ShowAccount3 }, + { qsl("account4") , Command::ShowAccount4 }, + { qsl("account5") , Command::ShowAccount5 }, + { qsl("account6") , Command::ShowAccount6 }, + { qsl("account7") , Command::ShowAccount7 }, + { qsl("account8") , Command::ShowAccount8 }, + { qsl("account9") , Command::ShowAccount9 }, + { qsl("last_account") , Command::ShowAccountLast }, }; const auto CommandNames = base::flat_map{ @@ -175,6 +186,17 @@ const auto CommandNames = base::flat_map{ { Command::ChatPinned3 , u"pinned_3"_q }, { Command::ChatPinned4 , u"pinned_4"_q }, { Command::ChatPinned5 , u"pinned_5"_q }, + + { Command::ShowAccount1 , u"account1"_q }, + { Command::ShowAccount2 , u"account2"_q }, + { Command::ShowAccount3 , u"account3"_q }, + { Command::ShowAccount4 , u"account4"_q }, + { Command::ShowAccount5 , u"account5"_q }, + { Command::ShowAccount6 , u"account6"_q }, + { Command::ShowAccount7 , u"account7"_q }, + { Command::ShowAccount8 , u"account8"_q }, + { Command::ShowAccount9 , u"account9"_q }, + { Command::ShowAccountLast, u"last_account"_q }, }; class Manager { @@ -429,13 +451,15 @@ void Manager::fillDefaults() { set(u"%1+%2"_q.arg(ctrl).arg(index), command); } - //auto &&accounts = ranges::views::zip( - // kShowAccount, - // ranges::views::ints(1, ranges::unreachable)); + auto &&accounts = ranges::views::zip( + kShowAccount, + ranges::views::ints(1, ranges::unreachable)); - //for (const auto &[command, index] : accounts) { - // set(u"%1+shift+%2"_q.arg(ctrl).arg(index), command); - //} + for (const auto [command, index] : accounts) { + set(u"alt+%1"_q.arg(index), command); + } + + set(u"alt+0"_q, Command::ShowAccountLast); set(u"%1+shift+down"_q.arg(ctrl), Command::FolderNext); set(u"%1+shift+up"_q.arg(ctrl), Command::FolderPrevious); diff --git a/Telegram/SourceFiles/core/shortcuts.h b/Telegram/SourceFiles/core/shortcuts.h index d816b80b0..d3f61802b 100644 --- a/Telegram/SourceFiles/core/shortcuts.h +++ b/Telegram/SourceFiles/core/shortcuts.h @@ -44,6 +44,10 @@ enum class Command { ShowAccount4, ShowAccount5, ShowAccount6, + ShowAccount7, + ShowAccount8, + ShowAccount9, + ShowAccountLast, ShowAllChats, ShowFolder1, @@ -98,6 +102,10 @@ enum class Command { Command::ShowAccount4, Command::ShowAccount5, Command::ShowAccount6, + Command::ShowAccount7, + Command::ShowAccount8, + Command::ShowAccount9, + Command::ShowAccountLast, }; [[nodiscard]] FnMut RequestHandler(Command command); diff --git a/Telegram/SourceFiles/dialogs/dialogs_inner_widget.cpp b/Telegram/SourceFiles/dialogs/dialogs_inner_widget.cpp index 3047c27e2..c39559c4e 100644 --- a/Telegram/SourceFiles/dialogs/dialogs_inner_widget.cpp +++ b/Telegram/SourceFiles/dialogs/dialogs_inner_widget.cpp @@ -58,6 +58,8 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "apiwrap.h" #include "main/main_session.h" #include "main/main_session_settings.h" +#include "main/main_account.h" +#include "main/main_domain.h" #include "window/notifications_manager.h" #include "window/window_controller.h" #include "window/window_session_controller.h" @@ -3941,6 +3943,28 @@ void InnerWidget::setupShortcuts() { } } + const auto accounts = &Core::App().domain().accounts(); + if (const auto accountsCount = int(accounts->size())) { + auto &&accountShortcuts = ranges::views::zip( + Shortcuts::kShowAccount, + ranges::views::ints(0, ranges::unreachable)); + + for (const auto [command, index] : accountShortcuts) { + const auto select = (command == Command::ShowAccountLast) + ? accountsCount - 1 + : std::clamp(index, 0, accountsCount - 1); + request->check(command) && request->handle([=] { + if (select <= accountsCount) { + const auto account = (*accounts)[select].account.get(); + if (account != &Core::App().domain().active()) { + Core::App().domain().maybeActivate(account); + } + } + return true; + }); + } + } + static const auto kPinned = { Command::ChatPinned1, Command::ChatPinned2,