Deskflow 1.26.0.134
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 Symless 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
17#include "VersionChecker.h"
18#include "config/ServerConfig.h"
21#include "net/Fingerprint.h"
22
23#ifdef Q_OS_MACOS
24#include "gui/OSXHelpers.h"
25#endif
26
27class QAction;
28class QMenu;
29class QLocalServer;
30
31class DeskflowApplication;
32class LogDock;
33class StatusBar;
34
35namespace Ui {
36class MainWindow;
37}
38
39namespace deskflow::gui::ipc {
40class DaemonIpcClient;
41}
42
43class MainWindow : public QMainWindow
44{
45 using ConnectionState = deskflow::core::ConnectionState;
46 using CoreMode = Settings::CoreMode;
47 using CoreProcess = deskflow::gui::CoreProcess;
48 using NetworkMonitor = deskflow::gui::NetworkMonitor;
49 using ProcessState = deskflow::core::ProcessState;
50
51 Q_OBJECT
52
53public:
54 enum class LogLevel
55 {
58 };
59
60public:
61 explicit MainWindow();
62 ~MainWindow() override;
63
64 [[nodiscard]] CoreMode coreMode() const
65 {
66 return m_coreProcess.mode();
67 }
68 void open();
70 {
71 return m_serverConfig;
72 }
73
74 void hide();
75
76protected:
77 void changeEvent(QEvent *e) override;
78 bool eventFilter(QObject *obj, QEvent *event) override;
79
80private:
84 void updateText();
85 void toggleLogVisible(bool visible);
86
87 void settingsChanged(const QString &key = QString());
88 void serverConfigSaving();
89 void coreProcessError(CoreProcess::Error error);
90 void coreConnectionStateChanged(ConnectionState state);
91 void coreProcessStateChanged(ProcessState state);
92
93 void trayIconActivated(QSystemTrayIcon::ActivationReason reason);
94 void serverConnectionConfigureClient(const QString &clientName);
95
96 void clearSettings();
97 void openAboutDialog();
98 void openHelpUrl() const;
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 void secureSocket(bool secureSocket);
125 void connectSlots();
126 void handleLogLine(const QString &line);
127 void updateLocalFingerprint();
128 void updateScreenName();
129 void saveSettings() const;
130 void showConfigureServer(const QString &message);
131 void showConfigureClient();
132 void restoreWindow();
133 void setupControls();
134 void showFirstConnectedMessage();
135 void updateStatus();
136 void showAndActivate();
137 void showHostNameEditor();
138 void setHostName();
139 void daemonIpcClientConnectionFailed();
140 void toggleCanRunCore(bool enableButtons);
141 void remoteHostChanged(const QString &newRemoteHost);
142 void updateIpLabel(const QStringList &addresses);
143 void updateTimeoutDelay(int newDelay);
144
145 bool canRunCore() const;
146
151 QString trustedFingerprintDatabase() const;
152
157 bool generateCertificate();
158
159 Fingerprint m_fingerprint;
160
161 void serverClientsChanged(const QStringList &clients);
162
163 inline static const auto m_guiSocketName = QStringLiteral("deskflow-gui");
164 inline static const auto m_nameRegEx = QRegularExpression(QStringLiteral("^[\\w\\-_\\.]{0,255}$"));
165
166 VersionChecker m_versionChecker;
167 bool m_secureSocket = false;
168 bool m_saveOnExit = true;
169 bool m_clientErrorVisible = false;
170 ServerConfig m_serverConfig;
171 deskflow::gui::CoreProcess m_coreProcess;
172 QSet<QString> m_ignoredClients;
173 bool m_newClientPromptShowing = false;
174 bool m_serverConfigDialogVisible = false;
175 QSize m_expandedSize = QSize();
176 QStringList m_checkedClients;
177 QStringList m_checkedServers;
178 QSystemTrayIcon *m_trayIcon = nullptr;
179 QLocalServer *m_guiDupeChecker = nullptr;
180 deskflow::gui::ipc::DaemonIpcClient *m_daemonIpcClient = nullptr;
181
182 LogDock *m_logDock;
183 StatusBar *m_statusBar = nullptr;
184
185 // Window Menu
186 QMenu *m_menuFile = nullptr;
187 QMenu *m_menuEdit = nullptr;
188 QMenu *m_menuView = nullptr;
189 QMenu *m_menuHelp = nullptr;
190
191 // Window Actions
192 QAction *m_actionAbout = nullptr;
193 QAction *m_actionClearSettings = nullptr;
194 QAction *m_actionReportBug = nullptr;
195 QAction *m_actionMinimize = nullptr;
196 QAction *m_actionQuit = nullptr;
197 QAction *m_actionTrayQuit = nullptr;
198 QAction *m_actionRestore = nullptr;
199 QAction *m_actionSettings = nullptr;
200 QAction *m_actionStartCore = nullptr;
201 QAction *m_actionRestartCore = nullptr;
202 QAction *m_actionStopCore = nullptr;
203
204 // Network monitoring
205 NetworkMonitor *m_networkMonitor = nullptr;
206 QString m_currentIpAddress;
207
208 // Server IP strategy optimization
209 QStringList m_serverStartIPs;
210 QString m_serverStartSuggestedIP;
211};
int key
Definition KeySequence.cpp:15
deskflow::core::ConnectionState ConnectionState
Definition StatusBar.h:17
deskflow::core::ProcessState ProcessState
Definition StatusBar.h:16
Definition LogDock.h:17
~MainWindow() override
Definition MainWindow.cpp:161
MainWindow()
Definition MainWindow.cpp:59
void hide()
Definition MainWindow.cpp:985
void changeEvent(QEvent *e) override
Definition MainWindow.cpp:996
CoreMode coreMode() const
Definition MainWindow.h:64
ServerConfig & serverConfig()
Definition MainWindow.h:69
void open()
Definition MainWindow.cpp:607
LogLevel
Definition MainWindow.h:55
@ Info
Definition MainWindow.h:57
@ Error
Definition MainWindow.h:56
bool eventFilter(QObject *obj, QEvent *event) override
Definition MainWindow.cpp:1013
Definition ServerConfig.h:34
CoreMode
Definition Settings.h:125
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
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