Commit graph

4476 commits

Author SHA1 Message Date
sithlord48
306259eb5b chore: remove unused NetworkProtocol methods for intConversion 2026-04-22 15:35:20 -04:00
sithlord48
77a97f815a refactor: move protocol from serverConfig => Settings::Server::Protocol 2026-04-22 15:35:20 -04:00
sithlord48
dff81e62fe chore: move base/NetworkProtocol -> common/NetworkProtocol 2026-04-22 15:35:20 -04:00
Daniel Albers
1890e7b297 fix: PacketStreamFilter socket leak on abrupt disconnect
This fix prevents TCP sockets from accumulating in CLOSE_WAIT following a
network interruption.

StreamInputShutdown ignored events that occurred while waiting for parts of a
partially received packet.
This could prevent the higher-level state machine from receiving the disconnect
signal and closing the socket.

The filter now correctly treats a stream closure during mid-packet reception as
a protocol error, ensuring the disconnect event is propagated, and proceeds with
the shutdown.
2026-04-22 07:12:02 -04:00
Daniel Albers
f9fd0e86b0 fix: Improve SecureSocket handshake and event handling
This fix addresses a busy-loop and stalled connection issue during the TLS
handshake. Previously, SecureSocket incorrectly managed its readiness flags
during negotiation, often polling for 'writability' when OpenSSL was actually
waiting for more 'read' data (or vice versa).

- Explicitly maps SSL_ERROR_WANT_READ and SSL_ERROR_WANT_WRITE to
  socket multiplexer events.
- Resets readiness flags before each handshake attempt to ensure the
  multiplexer receives the most accurate requirements from OpenSSL.
- Restores readability/writability flags upon a successful handshake
  to allow subsequent application-layer protocol exchange.
- Removes inefficient busy-wait sleeps that were masking the loop
  and slowing down handshakes.
2026-04-22 07:12:02 -04:00
Daniel Albers
7d78e55fcc fix: Enable TCP keepalive by default
Deskflow previously lacked support for TCP keepalive, which meant that
dead connections (such as those resulting from a terminated SSH tunnel
or an ungraceful network interruption) could remain in the system's
connection table indefinitely.

This commit adds the setKeepAliveOnSocket method to the IArchNetwork
abstraction and implements it for both BSD/Unix and Winsock/Windows
backends. Keepalive is now enabled by default in TCPSocket::init,
allowing the operating system to eventually detect and clean up
stale connections.
2026-04-22 07:12:02 -04:00
sithlord48
acd02a01e6 fix: use Maximum for the high of the mode selection to prevent being cut off 2026-04-21 07:36:48 -04:00
Luiz Sardinha
5a028c12d4 fix(mac): quit core if accessibility permissions are revoked 2026-04-21 06:54:05 -04:00
Luiz Sardinha
9025ab8fb7 refactor: allow exit event to provide an exit code 2026-04-21 06:54:05 -04:00
Luiz Sardinha
71c25b3ab9 refactor: bringing error code from the application thread to the main thread (and using its exit code to exit) 2026-04-21 06:54:05 -04:00
Luiz Sardinha
1854e469f4 refactor: making core a QApplication (so it runs cocoa loop on macOS) 2026-04-21 06:54:05 -04:00
alizane
42b824a8db fix: enforce C locale in LogTests for decimal formatting
fixes: #7466
2026-04-17 12:12:47 -04:00
sithlord48
1c81886643 fix: clipboard buffer overrun using propose solution from kitknox 2026-04-16 08:03:06 -04:00
sithlord48
c8e0feab4e build(arch): remove ArchDaemonNone and do not subclass Arch from ARCH_DAEMON on unix 2026-04-13 09:48:12 +01:00
sithlord48
e33bef1b95 build(arch): remove unneeded links to ${libs} 2026-04-13 09:48:12 +01:00
sithlord48
d6a935b5e9 build(common): expose the include dirs from the common library as public 2026-04-13 09:48:12 +01:00
sithlord48
1922f916af refactor: Move -> deskflow/languages/LanguageManager -> deskflow/KeyboardLayoutManager
rename methods to relfect its use for keyboard layouts not languages
2026-04-08 09:47:23 +01:00
sithlord48
e293d4eb8c refactor(ipc): add missing use of at for lists 2026-04-08 09:47:23 +01:00
sithlord48
d1074f64ae refactor(ipc): use more QStringLiterals 2026-04-08 09:47:23 +01:00
sithlord48
bdb7309778 refactor(ipcClient): declare values in if statement where possible 2026-04-08 09:47:23 +01:00
Nick Bolton
7c30add2a1 feat(ipc): Error handling for missing version in IPC handshake 2026-04-07 13:09:29 +01:00
Nick Bolton
77bee2ddf3 feat(ipc): Log more detail on IPC error handling 2026-04-07 13:09:29 +01:00
Nick Bolton
25f3eb3f22 feat(ipc): Differentiate between Daemon and Core IPC logs 2026-04-07 13:09:29 +01:00
Nick Bolton
682966fec0 feat(ipc): Handle missing keyboard layouts with IPC 2026-04-07 13:09:29 +01:00
Nick Bolton
59a4747113 feat(ipc): Unrecognised IPC client, retry messages, and TLS fingerprint
Also adds version checking for IPC server and client
2026-04-07 13:09:29 +01:00
Nick Bolton
66c9b6607c feat(ipc): Messaging for connection states via IPC (async client) 2026-04-07 13:09:29 +01:00
Nick Bolton
62ccb543dc feat(ipc): Core IPC server and connected client 2026-04-07 13:09:29 +01:00
Nick Bolton
1ec36645e1 refactor(ipc): Abstract IPC client logic 2026-04-07 13:09:29 +01:00
Nick Bolton
2e13074580 refactor(ipc): Abstract IPC server logic 2026-04-07 13:09:29 +01:00
Nick Bolton
e4bafaf88f refactor(win32): More consistent Windows desk switch log line 2026-04-07 13:09:29 +01:00
Nick Bolton
eebe5fd55f refactor(win32): Rename Windows thread finding methods for consistency 2026-04-07 13:09:29 +01:00
Nick Bolton
b0985a2740 fix(unix): Add foreign Qt threds in legacy POSIX thread impl 2026-04-07 13:09:29 +01:00
Nick Bolton
aaef600ffa fix(mac): Remove Cocoa app loop and fix macOS event tap for Qt threading 2026-04-07 13:09:29 +01:00
Nick Bolton
29352d97b3 fix(core): Destroy temporary QCoreApplication before creating the real one 2026-04-07 13:09:29 +01:00
Nick Bolton
8a77e5f130 refactor(core): Convert app to Qt app 2026-04-07 13:09:29 +01:00
sithlord48
d8e9ac27f5 refactor: Messages::showNewClientPrompt check if server auth is needed when the message is shown not in the signal 2026-04-07 11:09:58 +01:00
sithlord48
047451696a refactor: Messages::showFirstConnectionMessage check the settings for the values 2026-04-07 11:09:58 +01:00
sithlord48
632b64f12f chore: MainWindow remove unused forward declariations 2026-04-07 11:09:58 +01:00
sithlord48
6a1e8f3edb chore: remove unused QMessageBox includes and Foward Declaration 2026-04-07 11:09:58 +01:00
sithlord48
5536f98da3 fix(LogDock): Scroll the log widget to the bottom if the log is visible and the find widget is not expanded when appending new log lines
fixes: #9622
2026-04-02 12:26:13 +01:00
sithlord48
b17883618c feat(LogWidget): new scrollToBottom method to scroll the log to to the bottom 2026-04-02 12:26:13 +01:00
sithlord48
4f377d97ff feat(SearchWidget): new isExpanded method true when widget is showing the find line 2026-04-02 12:26:13 +01:00
sithlord48
41fcc1e815 refactor: add [[no_unique_address]] hint for XWindowsScreen::m_powerManager 2026-03-30 10:36:15 +01:00
sithlord48
15bae79bf4 refactor: correctly use [[maybe_unused]] 2026-03-30 10:36:15 +01:00
sithlord48
ca6220ad30 refactor: remove redundant c_str when setting logError 2026-03-30 10:36:15 +01:00
sithlord48
bcc5a12d37 chore: remove unused Unicode::decode32 method 2026-03-30 10:36:15 +01:00
sithlord48
06d7f91551 refactor: add explicit fallthrough for fall through cases in unicode 2026-03-30 10:36:15 +01:00
Artturi Alm
469a238b04 fix: AltGr for clients w/windows+finnish-layout. 2026-03-26 10:52:45 +00:00
sithlord48
1565971479 feat: show connection retry status in status area 2026-03-26 06:25:22 -04:00
sithlord48
468c3b76de feat: backoff retry after number of retries 2026-03-26 06:25:22 -04:00
sithlord48
ebab0eb62e chore: remove unused ScreenException methods for reconnect timer 2026-03-25 14:54:57 +00:00
sithlord48
7c00299b11 chore: remove unused retryTime in ServerApp::initServer 2026-03-25 14:54:57 +00:00
sithlord48
b72719f821 refactor: fix comment typo 2026-03-25 14:54:57 +00:00
sithlord48
868b421671 refactor: port simpler KeyStateTest to QTest 2026-03-20 21:54:09 +00:00
Luiz Sardinha
abfcc59f22 fix: prevent daemon ipc client from sending multiple messages at the same time 2026-03-20 13:01:47 +00:00
Jason Mitchell
c6544dd4eb fix: plus key as hotkey support 2026-03-20 12:37:03 +00:00
sithlord48
abaf233a07 fix: adjust command line size to allow expanding 2026-03-19 10:41:22 +00:00
Nick Bolton
b251c98a4e fix: kill core orphan on gui death (linux) 2026-03-16 09:38:14 -04:00
sithlord48
23c8496e24 feat: allow users to run a script on entry or exit of a screen 2026-03-16 12:33:45 +00:00
Tomaz Canabrava
18220a7847 chore: Fix Typo 2026-03-16 12:33:45 +00:00
UberKitten
ac8cc42b7a fix: retry OpenClipboard() on Windows
OpenClipboard() can fail transiently when another process holds the
clipboard mutex. Add a retry loop (5 attempts, 5ms delay) so that
Deskflow handles brief contention gracefully instead of immediately
failing.
2026-03-12 08:19:43 -04:00
sithlord48
7126f31d3f fix: do not reset network if old interface is missing
fixes: #9552
2026-03-12 10:24:20 +00:00
sithlord48
11871d343d refactor: check for not mac not win in placeof x or wayland in some cases 2026-03-06 08:57:31 -05:00
sithlord48
12cf55d4fc build: Replace WINAPI_CARBON with Q_OS_MAC 2026-03-06 08:57:31 -05:00
sithlord48
e4cf1392c9 build: Replace WINAPI_MSWINDOWS with Q_OS_WIN 2026-03-06 08:57:31 -05:00
sithlord48
f2a54f4af0 buid: replace NIH SYSAPI_WIN32 with Q_OS_WIN 2026-03-06 08:57:31 -05:00
sithlord48
fce1a37e97 build: remove SYSAPI_UNIX define 2026-03-06 08:57:31 -05:00
sithlord48
90e79dad75 refactor: SettingsDialog update ux for initial window state 2026-03-06 13:38:30 +00:00
sithlord48
8f8874370e refactor: SettingsDialog adjust wording of close to tray option 2026-03-06 13:38:30 +00:00
sithlord48
3d67865ffc refactor: SettingsDialog, new Window Behavior tab 2026-03-06 13:38:30 +00:00
sithlord48
22a303842e refactor: Settings Dialog Vertically center contents 2026-03-06 13:38:30 +00:00
Luiz Sardinha
c20671f1db build: ensuring macOS codesign is triggered for changes in core 2026-03-05 15:22:46 -05:00
sithlord48
2b379b31cd refactor: SettingsDialog adjust tab layout to have consistant top and bottom margins 2026-03-02 06:31:21 -05:00
sithlord48
8bb23179c4 refactor: SettingsDialog, adjust tray icon style layout 2026-03-02 06:31:21 -05:00
sithlord48
a8588ab507 refactor: SettingsDialog, Fix missing spacing in language combobox with some widget sets 2026-03-02 06:31:21 -05:00
Luiz Sardinha
c80cd56f27 fix: properly handling infinite timeout for macOS on EventQueue 2026-02-27 19:47:59 -05:00
Luiz Sardinha
7743d9008d refactor: checking for server config files read permissions upon start 2026-02-27 16:21:40 -05:00
Luiz Sardinha
2ecf91e50a refactor: adding function to check if server config file have the needed read permissions 2026-02-27 16:21:40 -05:00
Luiz Sardinha
d8c7367900 fix: visual error if core start emit errors that modify start/restart visibility 2026-02-27 16:21:40 -05:00
sithlord48
fc1f3b0142 fix: macOS flicker when menu is first clicked if the app is set to autohide on startup
fixes: #9523
2026-02-27 12:25:14 +00:00
sithlord48
814d63af28 refactor: MainWindow::EvenFilter set keyEvent in if only 2026-02-27 12:25:14 +00:00
sithlord48
a9bfcf3c81 refactor: SettingsDialog remove minimum size from vertial spacer on network page 2026-02-26 13:10:24 +00:00
sithlord48
fb8104ff86 fix: security icon not being set for clients
fixes: #9524
2026-02-26 13:10:24 +00:00
sithlord48
a0a28e7a94 chore: remove untriggerable wayland warnings 2026-02-26 12:52:03 +00:00
sithlord48
9188d4b1c1 build: require libportal 0.9.1 2026-02-26 12:52:03 +00:00
Luiz Sardinha
d392547fd8 fix: ClientProxyUnknownFailure should also remove its client socket 2026-02-26 12:02:28 +00:00
Luiz Sardinha
220bf3178c fix: correctly deletes sockets that failed to become clients 2026-02-26 12:02:28 +00:00
sithlord48
c0692b6fc7 refactor: remove messages::showClientError, fix mainwindow calling showandactive for non error messages 2026-02-24 17:06:17 +00:00
sithlord48
47ed13868f refactor: ScreenSetupView remove unneeded include 2026-02-24 16:10:01 +00:00
sithlord48
09d4b1a27a refactor: Forward Declare more in gui/validators classes 2026-02-24 16:10:01 +00:00
sithlord48
4e641adae9 refactor: ComputerNameValidator define regex static where used 2026-02-24 16:10:01 +00:00
sithlord48
568f5c7fc5 refactor: SpacesValidator, use QChar::Space 2026-02-24 16:10:01 +00:00
sithlord48
a0ac24a42c refactor: NewScreenWidget::mousePressEvent remove remove unused arg 2026-02-24 16:10:01 +00:00
sithlord48
f69bd5601c refactor: make NetworkMonitor::validAddresses static 2026-02-24 16:10:01 +00:00
sithlord48
37728cc7a3 refactor: Settings::cleanComputerName do not store empty QString for nothing 2026-02-24 16:10:01 +00:00
sithlord48
b4dbce385c refactor: Mainwindow: prevent core from running while editing the host name 2026-02-24 15:57:22 +00:00
sithlord48
9aeb04b4a6 refactor: MainWindow do not allow the computer name to be edited if the core is running 2026-02-24 15:57:22 +00:00
sithlord48
3db4c60155 refactor: MainWindow add canRunCore method 2026-02-24 15:57:22 +00:00
sithlord48
5ea8874583 refactor: move all status bar items to new status bar widget 2026-02-23 21:48:17 +00:00
sithlord48
07de9efe7c refactor: CoreProcess add signal for when the security level text changes 2026-02-23 21:48:17 +00:00
sithlord48
c791135160 refactor: move CoreProcess::ProcessState => common/Enums deskflow::core::ProcessState 2026-02-23 21:48:17 +00:00
sithlord48
79fdf3a1f6 refactor: mv CoreProcess::ConnectionState -> common/Enums deskflow::core::ConnectionState 2026-02-23 21:48:17 +00:00
sithlord48
76353eceb3 refactor: NetworkMonitor::validAddresses filter our based on humanreadable and add vEth for windows wsl to ignore list 2026-02-23 21:24:56 +00:00
sithlord48
fb60189078 feat: NetworkMointor::validAddresses, return the useable ip4 and ip6 address 2026-02-23 21:24:56 +00:00
sithlord48
3c140ed479 chore: rename NetworkMonitor::getAvalibleIpv4Addresses => NetworkMonitor::validAddresses 2026-02-23 21:24:56 +00:00
sithlord48
033e5530c3 refactor: remove the generic connection and hostname failures dialog
this dialog has been the cause of alot of confusion,
it will almost always show up incorrectly at least once when connecting a new client
if you accept the client side dialog before adding the screen to the server
fixes: #9497
2026-02-23 21:03:48 +00:00
Luiz Sardinha
727d6ff166 refactor: moving ServerApp::currentConfig to Settings::serverConfigFile 2026-02-23 07:15:49 -05:00
Luiz Sardinha
aa54bd329f fix: add Daemon::LogLevel to the list of valid config keys 2026-02-23 07:15:49 -05:00
sithlord48
692f43d8af refactor: SettingsDialog hide Advanced tab for portable version on windows 2026-02-21 07:56:47 +00:00
sithlord48
263a23fcaa fix: Settings dialog blocking return to Automatic
fixes:# 9501
2026-02-21 07:56:47 +00:00
sithlord48
4c7f546c60 fix: XWindowScreen, do not send a scroll delta for 0
fixes: #9477
2026-02-18 18:11:38 +00:00
sithlord48
1ca8695659 fix: Read fingerprint data before applying the initial config to prevent the fingerprint from being empty making the button hidden
fixes: #9483
2026-02-18 15:26:17 +00:00
sithlord48
6ccef50b7c refactor: SettingsDialog, hide advanced tab when running on macos 2026-02-17 13:41:47 +00:00
sithlord48
d7fb9bc6d2 refactor: SettingsDialog, move language to General 2026-02-17 13:41:47 +00:00
sithlord48
41197334f0 refactor: SettingsDialog move network items to own tab 2026-02-17 13:41:47 +00:00
sithlord48
74c25fdff6 refactor: SettingsDialog rename regular tab to general 2026-02-17 13:41:47 +00:00
sithlord48
f6348736e8 refactor: SettingsDialog, move Log settings to own tab 2026-02-17 13:41:47 +00:00
sithlord48
208556b5aa refactor: SettingsDialog, add reset to default button 2026-02-17 13:41:47 +00:00
sithlord48
58963de10f refactor: SettingsDialog add a reset button for settings, and tooltips for the buttonbox buttons 2026-02-17 13:41:47 +00:00
sithlord48
457c31fbaf refactor: SettingsDialog only allow save if modified 2026-02-17 13:41:47 +00:00
sithlord48
690d6a67ef refactor: SettingsDialog, no longer need coreProccess in the settings dialog 2026-02-17 13:41:47 +00:00
sithlord48
042abd699d feat: support horizontal scroll modifiers 2026-02-16 12:45:03 +00:00
sithlord48
f6b1546f8b refactor: use a client config dialog for client options 2026-02-16 12:45:03 +00:00
sithlord48
2cc19c9f1e refactor: rename Settings::Client::InvertScrollDirection -> Settings::Client::InvertYScroll 2026-02-16 12:45:03 +00:00
sithlord48
329cf07275 chore: MainWindow use Connect to to label the client host text entry 2026-02-16 12:45:03 +00:00
Luiz Sardinha
99da66dbf7 fix: using a proper std::string to store KeyInfo buffers 2026-02-16 12:13:58 +00:00
sithlord48
3c6aa9999b refactor: MainWindow updateModeControls no longer takes a bool just check the process mode 2026-02-16 11:40:08 +00:00
sithlord48
19724e3b69 fix: enable m_actionStopCore based on cores state 2026-02-16 11:40:08 +00:00
sithlord48
b96619d726 refactor: prevent modecontrols from being updated twice on startup.
Apply config should toggle the core mode to ensure the labels and mode is set correctly post config
2026-02-16 11:40:08 +00:00
sithlord48
c9aaeaee2a refactor: MainWindow::CoreModeToggle set the new core mode here not updateModeControls 2026-02-16 11:40:08 +00:00
sithlord48
1b6def23d8 refactor: MainWindow::CoreModeToggle, use CoreMode type internally 2026-02-16 11:40:08 +00:00
sithlord48
c1172ab8b5 refactor: MainWindow only act on when the rb for mode is Checked, this prevents doing the full coreModeToggled twice when changing modes 2026-02-16 11:40:08 +00:00
sithlord48
611a3300ba refactor: do not return true when checking physical ip is private or not return if a was private 2026-02-12 17:16:32 +00:00
sithlord48
64c104a5c2 refactor: include a point 2 point check when checking if an interface is virtual 2026-02-12 17:16:32 +00:00
sithlord48
f9857e102a fix: NetworkMonitor virtual sorting
fixes: #9459
make NetworkMonitor::isVirtualInterface a static member of NetworkMonitor
write tests for NetworkMonitor
2026-02-12 17:16:32 +00:00
wake
e555b63931 fix: extra "a" with Rime and apply clang-format 2026-02-11 14:33:04 +00:00
sithlord48
a532f655c1 feat: support horizontal scrolling
fixes: #7220
based on 9f15b1bcf2
Co-authored-by: Evan Maddock <maddock.evan@vivaldi.net>
2026-02-11 11:59:28 +00:00
sithlord48
82588a7fc9 chore: remove unused privates from PlatformScreen 2026-02-11 11:59:28 +00:00
sithlord48
1f2d169b0d build: fix typo in daemonDepends
fixes: #9439
2026-02-09 12:45:51 +00:00
sithlord48
1c99736c16 refactor: SettingsDialog, scroll scale spinbox remove wraping and make step size .1 2026-02-09 09:02:21 +00:00
sithlord48
050cb649c2 refactor: use ScrollDelta for fakeMouseWheel 2026-02-09 09:02:21 +00:00
sithlord48
5612e99f1d refactor: Move the scrollModifiers to ISecondaryScreen 2026-02-09 09:02:21 +00:00
sithlord48
a520e3b2e9 refactor: check settigns for invertscroll in PlatformScreen 2026-02-06 12:51:39 +00:00
sithlord48
380f65954d chore: remove unused Settings::ScrollSpeed 2026-02-06 12:51:39 +00:00
sithlord48
0f6ec6c196 refactor: XWindowsScreen use a fixed minimum step value in place of the scroll speed setting 2026-02-06 12:51:39 +00:00
sithlord48
857326b274 refactor: rename PlatformScreen::mapClientScrollDirection -> PlatformScreen::applyClientScrollModifier
prepare for horizontal scroll support by having it handle pairs of x and y values
2026-02-06 12:51:39 +00:00
sithlord48
5e8a6f0bcb fix: vertical scroll scaling on all platforms
fixes: #9120
2026-02-06 12:51:39 +00:00
sithlord48
84e1e722c0 fix: Send extra mouse buttons on mac os servers to clients 2026-02-04 09:56:10 +00:00
sithlord48
4200de66ee fix: scroll Issue on X11 by not checking for wheel in mapButtonToX 2026-02-04 09:45:25 +00:00
sithlord48
be4e861604 feat: use Computer in settings to replace name
provide Settings::upgradeSettings to upgrade the screenName -> computerName
Make a note to remove "ScreenName" for 2.0
2026-02-03 18:55:17 +00:00