Deskflow 1.26.0.418
Keyboard and mouse sharing utility
Loading...
Searching...
No Matches
MainWindow.h
Go to the documentation of this file.
1/*
2 * Deskflow -- mouse and keyboard sharing utility
3 * SPDX-FileCopyrightText: (C) 2025 Deskflow Developers
4 * SPDX-FileCopyrightText: (C) 2024 - 2026 Chris Rizzitello <sithord48@gmail.com>
5 * SPDX-FileCopyrightText: (C) 2012 - 2024 Synergy App Ltd
6 * SPDX-FileCopyrightText: (C) 2008 Volker Lanz <vl@fidra.de>
7 * SPDX-License-Identifier: GPL-2.0-only WITH LicenseRef-OpenSSL-Exception
8 */
9
10#pragma once
11
12#include <QMainWindow>
13#include <QProcess>
14#include <QRegularExpression>
15#include <QSystemTrayIcon>
16#include <QUrl>
17
18#include "VersionChecker.h"
19#include "config/ServerConfig.h"
22#include "net/Fingerprint.h"
23
24#ifdef Q_OS_MACOS
25#include "gui/OSXHelpers.h"
26#endif
27
28class QAction;
29class QMenu;
30class QLocalServer;
31
32class DeskflowApplication;
33class LogDock;
34class StatusBar;
35
36namespace Ui {
37class MainWindow;
38}
39
40namespace deskflow::gui::ipc {
41class DaemonIpcClient;
42}
43
44class MainWindow : public QMainWindow
45{
46 using ConnectionState = deskflow::core::ConnectionState;
47 using CoreMode = Settings::CoreMode;
48 using CoreProcess = deskflow::gui::CoreProcess;
49 using NetworkMonitor = deskflow::gui::NetworkMonitor;
50 using ProcessState = deskflow::core::ProcessState;
51
52 Q_OBJECT
53
54public:
55 enum class LogLevel
56 {
58 Info
59 };
60
61public:
62 explicit MainWindow();
63 ~MainWindow() override;
64
65 [[nodiscard]] CoreMode coreMode() const
66 {
67 return m_coreProcess.mode();
68 }
69 void open();
71 {
72 return m_serverConfig;
73 }
74
75 void hide();
76
77protected:
78 void changeEvent(QEvent *e) override;
79 bool eventFilter(QObject *obj, QEvent *event) override;
80
81private:
85 void updateText();
86 void toggleLogVisible(bool visible);
87
88 void settingsChanged(const QString &key = QString());
89 void serverConfigSaving();
90 void coreProcessError(CoreProcess::Error error);
91 void coreConnectionStateChanged(ConnectionState state);
92 void coreProcessStateChanged(ProcessState state);
93
94 void trayIconActivated(QSystemTrayIcon::ActivationReason reason);
95 void serverConnectionConfigureClient(const QString &clientName);
96
97 void clearSettings();
98 void openAboutDialog();
99 void openGetNewVersionUrl() const;
100 void openSettings();
101 void startCore();
102 void stopCore();
103 bool saveServerConfig();
104 void resetCore();
105
106 void showMyFingerprint();
107 void updateSecurityIcon(bool visible);
108 void updateNetworkInfo();
109
110 void coreModeToggled(bool checked);
111 void updateModeControls();
112 void updateModeControlLabels();
113 std::unique_ptr<Ui::MainWindow> ui;
114
115 void createMenuBar();
116 void setupTrayIcon();
117 void applyConfig();
118 void setTrayIcon();
119 void handleUnrecognisedClient(const QString &clientName);
120 void handleConnectionRefused(deskflow::core::ConnectionRefusal reason);
121 void handlePeerFingerprint(const QString &fingerprint);
122 void handleMissingKeyboardLayouts(const QString &layouts);
123 void closeEvent(QCloseEvent *event) override;
124 bool maybeHideToTray();
125 void secureSocket(bool secureSocket);
126 void connectSlots();
127 void handleLogLine(const QString &line);
128 void updateFingerprintButton();
129 void updateScreenName();
130 void saveSettings() const;
131 void showConfigureServer(const QString &message);
132 void showConfigureClient();
133 void restoreWindow();
134 void setupControls();
135 void showFirstConnectedMessage();
136 void updateStatus();
137 void showAndActivate();
138 void showHostNameEditor();
139 void setHostName();
140 void daemonIpcClientConnectionFailed();
141 void toggleCanRunCore(bool enableButtons);
142 void remoteHostChanged(const QString &newRemoteHost);
143 void updateIpLabel(const QStringList &addresses);
144 void updateTimeoutDelay(int newDelay);
145 void setHelpFilePath();
146 void showHelpViewer() const;
147
148 bool canRunCore() const;
149
154 QString trustedFingerprintDatabase() const;
155
160 bool generateCertificate();
161
162 Fingerprint m_fingerprint;
163
164 void serverClientsChanged(const QStringList &clients);
165
166 inline static const auto m_guiSocketName = QStringLiteral("deskflow-gui");
167 inline static const auto m_nameRegEx = QRegularExpression(QStringLiteral("^[\\w\\-_\\.]{0,255}$"));
168
169 VersionChecker m_versionChecker;
170 bool m_secureSocket = false;
171 bool m_saveOnExit = true;
172 bool m_clientErrorVisible = false;
173 ServerConfig m_serverConfig;
174 deskflow::gui::CoreProcess m_coreProcess;
175 QSet<QString> m_ignoredClients;
176 bool m_newClientPromptShowing = false;
177 bool m_serverConfigDialogVisible = false;
178 QSize m_expandedSize = QSize();
179 QStringList m_checkedClients;
180 QStringList m_checkedServers;
181 QSystemTrayIcon *m_trayIcon = nullptr;
182 QLocalServer *m_guiDupeChecker = nullptr;
183 deskflow::gui::ipc::DaemonIpcClient *m_daemonIpcClient = nullptr;
184
185 LogDock *m_logDock;
186 StatusBar *m_statusBar = nullptr;
187
188 // Window Menu
189 QMenu *m_menuFile = nullptr;
190 QMenu *m_menuEdit = nullptr;
191 QMenu *m_menuView = nullptr;
192 QMenu *m_menuHelp = nullptr;
193
194 // Window Actions
195 QAction *m_actionAbout = nullptr;
196 QAction *m_actionMinimize = nullptr;
197 QAction *m_actionQuit = nullptr;
198 QAction *m_actionTrayQuit = nullptr;
199 QAction *m_actionRestore = nullptr;
200 QAction *m_actionSettings = nullptr;
201 QAction *m_actionStartCore = nullptr;
202 QAction *m_actionRestartCore = nullptr;
203 QAction *m_actionStopCore = nullptr;
204 QAction *m_actionShowHelp = nullptr;
205
206 // Network monitoring
207 NetworkMonitor *m_networkMonitor = nullptr;
208 QString m_currentIpAddress;
209
210 // Server IP strategy optimization
211 QStringList m_serverStartIPs;
212 QString m_serverStartSuggestedIP;
213 QUrl m_helpPath;
214};
deskflow::core::ConnectionState ConnectionState
Definition StatusBar.h:17
deskflow::core::ProcessState ProcessState
Definition StatusBar.h:16
Definition LogDock.h:17
Definition MainWindow.h:45
MainWindow()
Definition MainWindow.cpp:60
void hide()
Definition MainWindow.cpp:1008
void changeEvent(QEvent *e) override
Definition MainWindow.cpp:1019
CoreMode coreMode() const
Definition MainWindow.h:65
ServerConfig & serverConfig()
Definition MainWindow.h:70
void open()
Definition MainWindow.cpp:623
LogLevel
Definition MainWindow.h:56
bool eventFilter(QObject *obj, QEvent *event) override
Definition MainWindow.cpp:1036
Definition ServerConfig.h:25
CoreMode
Definition Settings.h:168
Definition StatusBar.h:20
Definition VersionChecker.h:16
Definition CoreProcess.h:28
Error
Definition CoreProcess.h:36
Monitor network activity changes and provide IP address updates.
Definition NetworkMonitor.h:23
Definition DaemonIpcClient.h:16
@ Error
Reception failed with error.
Definition ProtocolTypes.h:178
Definition AboutDialog.h:13
ConnectionState
Definition Enums.h:39
ProcessState
Definition Enums.h:29
ConnectionRefusal
Definition Enums.h:48
Definition CoreProcess.h:22
Definition Fingerprint.h:14