2
0
mirror of https://github.com/kotatogram/kotatogram-desktop synced 2025-08-30 06:07:45 +00:00

Add keyboard shortcuts to change accounts (#279)

This commit is contained in:
blank X 2021-12-26 22:25:15 +00:00 committed by GitHub
parent ca7ac81ef6
commit 9c3a3f65d6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 80 additions and 0 deletions

View File

@ -109,6 +109,17 @@ const auto CommandByName = base::flat_map<QString, Command>{
{ 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 },
// Kotatogram: legacy keys
{ qsl("folder_all") , Command::ShowAllChats },
{ qsl("folder_1") , Command::ShowFolder1 },
@ -171,6 +182,17 @@ const auto CommandNames = base::flat_map<Command, QString>{
{ Command::ChatPinned3 , qsl("pinned_3") },
{ Command::ChatPinned4 , qsl("pinned_4") },
{ Command::ChatPinned5 , qsl("pinned_5") },
{ Command::ShowAccount1 , qsl("account1") },
{ Command::ShowAccount2 , qsl("account2") },
{ Command::ShowAccount3 , qsl("account3") },
{ Command::ShowAccount4 , qsl("account4") },
{ Command::ShowAccount5 , qsl("account5") },
{ Command::ShowAccount6 , qsl("account6") },
{ Command::ShowAccount7 , qsl("account7") },
{ Command::ShowAccount8 , qsl("account8") },
{ Command::ShowAccount9 , qsl("account9") },
{ Command::ShowAccountLast, qsl("last_account") },
};
class Manager {
@ -414,6 +436,16 @@ void Manager::fillDefaults() {
set(qsl("%1+%2").arg(ctrl).arg(index), command);
}
auto &&accounts = ranges::views::zip(
kShowAccount,
ranges::views::ints(1, ranges::unreachable));
for (const auto [command, index] : accounts) {
set(qsl("alt+%1").arg(index), command);
}
set(qsl("alt+0"), Command::ShowAccountLast);
set(qsl("%1+shift+down").arg(ctrl), Command::FolderNext);
set(qsl("%1+shift+up").arg(ctrl), Command::FolderPrevious);

View File

@ -66,6 +66,17 @@ enum class Command {
JumpToDate,
ReloadLang,
Restart,
ShowAccount1,
ShowAccount2,
ShowAccount3,
ShowAccount4,
ShowAccount5,
ShowAccount6,
ShowAccount7,
ShowAccount8,
ShowAccount9,
ShowAccountLast,
};
[[maybe_unused]] constexpr auto kShowFolder = {
@ -79,6 +90,19 @@ enum class Command {
Command::ShowFolderLast,
};
[[maybe_unused]] constexpr auto kShowAccount = {
Command::ShowAccount1,
Command::ShowAccount2,
Command::ShowAccount3,
Command::ShowAccount4,
Command::ShowAccount5,
Command::ShowAccount6,
Command::ShowAccount7,
Command::ShowAccount8,
Command::ShowAccount9,
Command::ShowAccountLast,
};
[[nodiscard]] FnMut<bool()> RequestHandler(Command command);
class Request {

View File

@ -41,6 +41,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"
@ -3126,6 +3128,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,