137 lines
		
	
	
	
		
			2.5 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			137 lines
		
	
	
	
		
			2.5 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| /*
 | |
| 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,
 | |
| 	ChatFirst,
 | |
| 	ChatLast,
 | |
| 	ChatSelf,
 | |
| 	ChatPinned1,
 | |
| 	ChatPinned2,
 | |
| 	ChatPinned3,
 | |
| 	ChatPinned4,
 | |
| 	ChatPinned5,
 | |
| 	ChatPinned6,
 | |
| 	ChatPinned7,
 | |
| 	ChatPinned8,
 | |
| 
 | |
| 	ShowAccount1,
 | |
| 	ShowAccount2,
 | |
| 	ShowAccount3,
 | |
| 	ShowAccount4,
 | |
| 	ShowAccount5,
 | |
| 	ShowAccount6,
 | |
| 
 | |
| 	ShowAllChats,
 | |
| 	ShowFolder1,
 | |
| 	ShowFolder2,
 | |
| 	ShowFolder3,
 | |
| 	ShowFolder4,
 | |
| 	ShowFolder5,
 | |
| 	ShowFolder6,
 | |
| 	ShowFolderLast,
 | |
| 
 | |
| 	FolderNext,
 | |
| 	FolderPrevious,
 | |
| 
 | |
| 	ShowArchive,
 | |
| 	ShowContacts,
 | |
| 
 | |
| 	JustSendMessage,
 | |
| 	SendSilentMessage,
 | |
| 	ScheduleMessage,
 | |
| 
 | |
| 	ReadChat,
 | |
| 
 | |
| 	MediaViewerFullscreen,
 | |
| 
 | |
| 	SupportReloadTemplates,
 | |
| 	SupportToggleMuted,
 | |
| 	SupportScrollToCurrent,
 | |
| 	SupportHistoryBack,
 | |
| 	SupportHistoryForward,
 | |
| };
 | |
| 
 | |
| [[maybe_unused]] constexpr auto kShowFolder = {
 | |
| 	Command::ShowAllChats,
 | |
| 	Command::ShowFolder1,
 | |
| 	Command::ShowFolder2,
 | |
| 	Command::ShowFolder3,
 | |
| 	Command::ShowFolder4,
 | |
| 	Command::ShowFolder5,
 | |
| 	Command::ShowFolder6,
 | |
| 	Command::ShowFolderLast,
 | |
| };
 | |
| 
 | |
| [[maybe_unused]] constexpr auto kShowAccount = {
 | |
| 	Command::ShowAccount1,
 | |
| 	Command::ShowAccount2,
 | |
| 	Command::ShowAccount3,
 | |
| 	Command::ShowAccount4,
 | |
| 	Command::ShowAccount5,
 | |
| 	Command::ShowAccount6,
 | |
| };
 | |
| 
 | |
| [[nodiscard]] FnMut<bool()> RequestHandler(Command command);
 | |
| 
 | |
| class Request {
 | |
| public:
 | |
| 	bool check(Command command, int priority = 0);
 | |
| 	bool handle(FnMut<bool()> handler);
 | |
| 
 | |
| private:
 | |
| 	explicit Request(std::vector<Command> commands);
 | |
| 
 | |
| 	std::vector<Command> _commands;
 | |
| 	int _handlerPriority = -1;
 | |
| 	FnMut<bool()> _handler;
 | |
| 
 | |
| 	friend FnMut<bool()> RequestHandler(std::vector<Command> commands);
 | |
| 
 | |
| };
 | |
| 
 | |
| rpl::producer<not_null<Request*>> Requests();
 | |
| 
 | |
| void Start();
 | |
| void Finish();
 | |
| 
 | |
| void Listen(not_null<QWidget*> widget);
 | |
| 
 | |
| bool Launch(Command command);
 | |
| bool HandleEvent(not_null<QObject*> object, 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);
 | |
| 
 | |
| } // namespace Shortcuts
 | 
