tdesktop/Telegram/SourceFiles/core/shortcuts.h

115 lines
2.1 KiB
C
Raw Normal View History

2018-11-16 12:15:14 +00:00
/*
This file is part of Telegram Desktop,
the official desktop application for the Telegram messaging service.
For license and copyright information please follow this link:
https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
*/
#pragma once
namespace Shortcuts {
enum class Command {
Close,
Lock,
Minimize,
Quit,
MediaPlay,
MediaPause,
MediaPlayPause,
MediaStop,
MediaPrevious,
MediaNext,
Search,
ChatPrevious,
ChatNext,
2018-11-16 13:36:42 +00:00
ChatFirst,
ChatLast,
ChatSelf,
ChatPinned1,
ChatPinned2,
ChatPinned3,
ChatPinned4,
ChatPinned5,
2018-11-16 13:36:42 +00:00
2020-03-30 19:34:07 +00:00
ShowAllChats,
ShowFolder1,
ShowFolder2,
ShowFolder3,
ShowFolder4,
ShowFolder5,
ShowFolder6,
2020-03-30 19:34:07 +00:00
ShowFolderLast,
FolderNext,
FolderPrevious,
2020-01-05 05:14:52 +00:00
ShowArchive,
ShowContacts,
2020-01-05 05:14:52 +00:00
2020-01-18 14:39:00 +00:00
JustSendMessage,
SendSilentMessage,
ScheduleMessage,
ReadChat,
2018-11-16 13:36:42 +00:00
SupportReloadTemplates,
SupportToggleMuted,
SupportScrollToCurrent,
SupportHistoryBack,
SupportHistoryForward,
2018-11-16 12:15:14 +00:00
};
[[maybe_unused]] constexpr auto kShowFolder = {
2020-03-30 19:34:07 +00:00
Command::ShowAllChats,
Command::ShowFolder1,
Command::ShowFolder2,
Command::ShowFolder3,
Command::ShowFolder4,
Command::ShowFolder5,
Command::ShowFolder6,
2020-03-30 19:34:07 +00:00
Command::ShowFolderLast,
};
2018-11-16 15:12:39 +00:00
[[nodiscard]] FnMut<bool()> RequestHandler(Command command);
2018-11-16 12:15:14 +00:00
class Request {
public:
bool check(Command command, int priority = 0);
bool handle(FnMut<bool()> handler);
private:
2020-03-30 19:34:07 +00:00
explicit Request(std::vector<Command> commands);
2018-11-16 12:15:14 +00:00
2020-03-30 19:34:07 +00:00
std::vector<Command> _commands;
2018-11-16 12:15:14 +00:00
int _handlerPriority = -1;
FnMut<bool()> _handler;
2020-03-30 19:34:07 +00:00
friend FnMut<bool()> RequestHandler(std::vector<Command> commands);
2018-11-16 12:15:14 +00:00
};
rpl::producer<not_null<Request*>> Requests();
void Start();
void Finish();
2018-11-16 15:12:39 +00:00
bool Launch(Command command);
2018-11-16 12:15:14 +00:00
bool HandleEvent(not_null<QShortcutEvent*> event);
const QStringList &Errors();
// Media shortcuts are not enabled by default, because other
// applications also use them. They are enabled only when
// the in-app player is active and disabled back after.
void ToggleMediaShortcuts(bool toggled);
// Support shortcuts are not enabled by default, because they
// have some conflicts with default input shortcuts, like Ctrl+Delete.
void ToggleSupportShortcuts(bool toggled);
2018-11-16 12:15:14 +00:00
} // namespace Shortcuts