Deskflow 1.24.0.365
Keyboard and mouse sharing utility
Loading...
Searching...
No Matches
App.h
Go to the documentation of this file.
1/*
2 * Deskflow -- mouse and keyboard sharing utility
3 * SPDX-FileCopyrightText: (C) 2012 - 2025 Symless Ltd.
4 * SPDX-FileCopyrightText: (C) 2002 Chris Schoeneman
5 * SPDX-License-Identifier: GPL-2.0-only WITH LicenseRef-OpenSSL-Exception
6 */
7
8#pragma once
9
10#include "base/EventQueue.h"
11#include "base/Log.h"
12#include "deskflow/IApp.h"
14
15#if SYSAPI_WIN32
17#elif SYSAPI_UNIX
19#endif
20
21#include <memory>
22#include <stdexcept>
23
24namespace deskflow {
25class Screen;
26}
27
29class IEventQueue;
31
32class App : public IApp
33{
34public:
35 class XNoEiSupport : public std::runtime_error
36 {
37 public:
38 XNoEiSupport() : std::runtime_error("libei is not supported")
39 {
40 // do nothing
41 }
42 };
43
44 App(IEventQueue *events, const QString &processName);
45 App(App const &) = delete;
46 App(App &&) = delete;
47 ~App() override;
48
49 App &operator=(App const &) = delete;
50 App &operator=(App &&) = delete;
51
52 virtual void parseArgs() = 0;
53 virtual void loadConfig() = 0;
54 virtual bool loadConfig(const std::string &pathname) = 0;
55 virtual const char *daemonInfo() const = 0;
56
57 void setByeFunc(void (*bye)(int)) override
58 {
59 m_bye = bye;
60 }
61 void bye(int error) override
62 {
63 m_bye(error);
64 }
65 IEventQueue *getEvents() const override
66 {
67 return m_events;
68 }
69
71 {
72 return m_appUtil;
73 }
74
75 int run();
76 int daemonMainLoop(int, const char **);
77 void setupFileLogging();
78 void loggingFilterWarning() const;
79 void initApp() override;
80
81 void setEvents(EventQueue &events)
82 {
83 m_events = &events;
84 }
85 void setSocketMultiplexer(std::unique_ptr<SocketMultiplexer> &&sm)
86 {
87 m_socketMultiplexer = std::move(sm);
88 }
89
91 {
92 return m_socketMultiplexer.get();
93 }
94
95 static App &instance()
96 {
97 assert(s_instance != nullptr);
98 return *s_instance;
99 }
100
101 QString processName() const
102 {
103 return m_pname;
104 }
105
106 void handleScreenError() const;
107
108protected:
109 void runEventsLoop(const void *);
110
111private:
112 void (*m_bye)(int);
113 IEventQueue *m_events = nullptr;
114 static App *s_instance;
115 FileLogOutputter *m_fileLog = nullptr;
116 ARCH_APP_UTIL m_appUtil;
117 std::unique_ptr<SocketMultiplexer> m_socketMultiplexer;
118 QString m_pname;
119};
120
121#if WINAPI_MSWINDOWS
122#define DAEMON_RUNNING(running_) ArchMiscWindows::daemonRunning(running_)
123#else
124#define DAEMON_RUNNING(running_)
125#endif
126
127#if !defined(WINAPI_LIBEI) && WINAPI_XWINDOWS
128constexpr static auto s_helpNoWayland = //
129 "\nYour Linux distribution does not support Wayland EI (emulated input)\n"
130 "which is required for Wayland support. Please use a Linux distribution\n"
131 "that supports Wayland EI.\n";
132
133#else
134constexpr static auto s_helpNoWayland = "";
135#endif
#define ARCH_APP_UTIL
Definition AppUtilUnix.h:12
static constexpr auto s_helpNoWayland
Definition App.h:134
static int(PASCAL FAR *bind_winsock)(SOCKET s
XNoEiSupport()
Definition App.h:38
Definition App.h:33
virtual bool loadConfig(const std::string &pathname)=0
IEventQueue * getEvents() const override
Definition App.h:65
virtual void loadConfig()=0
static App & instance()
Definition App.h:95
virtual const char * daemonInfo() const =0
App(App const &)=delete
SocketMultiplexer * getSocketMultiplexer() const
Definition App.h:90
App & operator=(App &&)=delete
void loggingFilterWarning() const
Definition App.cpp:122
App(IEventQueue *events, const QString &processName)
Definition App.cpp:42
void setupFileLogging()
Definition App.cpp:110
void setByeFunc(void(*bye)(int)) override
Definition App.h:57
void initApp() override
Definition App.cpp:132
int daemonMainLoop(int, const char **)
Definition App.cpp:104
int run()
Definition App.cpp:60
QString processName() const
Definition App.h:101
App(App &&)=delete
ARCH_APP_UTIL & appUtil()
Definition App.h:70
void runEventsLoop(const void *)
Definition App.cpp:159
virtual void parseArgs()=0
void bye(int error) override
Definition App.h:61
App & operator=(App const &)=delete
void setEvents(EventQueue &events)
Definition App.h:81
~App() override
Definition App.cpp:55
void setSocketMultiplexer(std::unique_ptr< SocketMultiplexer > &&sm)
Definition App.h:85
void handleScreenError() const
Definition App.cpp:153
Event queue.
Definition EventQueue.h:28
Write log to file.
Definition LogOutputters.h:57
Definition IApp.h:20
Event queue interface.
Definition IEventQueue.h:29
Socket multiplexer.
Definition SocketMultiplexer.h:24
Platform independent screen.
Definition Screen.h:30
Definition EventTypes.h:11
Definition Config.h:28