1326 Commits

Author SHA1 Message Date
0096283779 chore: release 1.22.0
Some checks are pending
Continuous Integration / pr-comment-flags (push) Blocked by required conditions
Continuous Integration / ci-passed (push) Blocked by required conditions
Continuous Integration / test-results (push) Blocked by required conditions
Continuous Integration / reuse-lint (push) Waiting to run
Continuous Integration / lint-check (push) Blocked by required conditions
Continuous Integration / analyse-valgrind (push) Blocked by required conditions
Continuous Integration / analyse-sonarcloud (push) Blocked by required conditions
Continuous Integration / macos-14-arm64 (push) Blocked by required conditions
Continuous Integration / macos-13-x64 (push) Blocked by required conditions
Continuous Integration / archlinux-x86_84 (push) Blocked by required conditions
Continuous Integration / debian-13-arm64 (push) Blocked by required conditions
Continuous Integration / debian-13-x86_64 (push) Blocked by required conditions
Continuous Integration / fedora-40-arm64 (push) Blocked by required conditions
Continuous Integration / fedora-40-x86_84 (push) Blocked by required conditions
Continuous Integration / fedora-41-arm64 (push) Blocked by required conditions
Continuous Integration / fedora-41-x86_64 (push) Blocked by required conditions
Continuous Integration / fedora-42-arm64 (push) Blocked by required conditions
Continuous Integration / fedora-42-x86_64 (push) Blocked by required conditions
Continuous Integration / opensuse-arm64 (push) Blocked by required conditions
Continuous Integration / opensuse-x86_84 (push) Blocked by required conditions
Continuous Integration / ubuntu-25.04-arm64 (push) Blocked by required conditions
Continuous Integration / ubuntu-25.04-x86_64 (push) Blocked by required conditions
Continuous Integration / windows-2022-x64 (push) Blocked by required conditions
Continuous Integration / unix-freebsd (push) Blocked by required conditions
Continuous Integration / flatpak-aarch64 (push) Blocked by required conditions
Continuous Integration / flatpak-x86_64 (push) Blocked by required conditions
Continuous Integration / release (push) Blocked by required conditions
Continuous Integration / winget-publish (push) Blocked by required conditions
2025-05-29 06:27:33 -07:00
0751639f93 ci (flatpaK): bump to kde platform 6.9 2025-05-28 19:22:13 +01:00
d719df1642 ci: flatpak to use libei 1.4.1 2025-05-28 19:22:13 +01:00
7abaca76af chore: update CLI11 to v2.5.0 2025-05-28 19:22:13 +01:00
5ee3fc41bd chore: arch: Remove XArch exception class
XArch no longer contains any extra functionality in addition to what
std::runtime_error nor it signifies a particular type of error.
based-on: 5b991692af
ported-by: sithlord48
2025-05-28 14:00:18 +01:00
cab1eb9cee chore: arch: Derive XThread from std::exception
This is needed because by convention exceptions must derive from at
least std::exception.
ported from: 22aec16dc7
ported-by sithlord48
2025-05-28 14:00:18 +01:00
51db919d8f chore: arch, remove XARCH_SUBCLASS Macro
ported from: 1f3cd0dab3
ported-by sithlord48
2025-05-28 14:00:18 +01:00
314899ac7d chore: arch, Remove support for lazy error code to string evaluations
This functionality is not needed because in all code paths the error
code is immediately converted to string without actually using the lazy
evaluation functionality.

based-on: 53dff5b803
ported and expanded by sithlord48
2025-05-28 14:00:18 +01:00
632c3462ec fix: avoid leaking build paths in manpages 2025-05-28 05:46:27 -07:00
d6f8cdf51d build: Wix installer use set BUILD_ARCHITECTURE in reg key where to look for msvc redist version installed 2025-05-28 10:53:33 +01:00
59173d6405 build: add qt6-svg to arch package depends
ci: install qt6-svg when building on arch
2025-05-28 10:42:18 +01:00
d597d023b1 chore: use std::unique_ptr for eventQueueHandlers
ports input-leap/5044b79a4f98ea5da0b8cbe950123f061d4c1c5f
ported-by sithlord48
2025-05-28 09:54:04 +01:00
807e60ded2 chore: use std::unique_prt for EventQueue's Buffer
port input-leap/9dbfd551cda4367bdc8067b5c3ca9c4027494503
ported-by sithlord48
2025-05-28 09:54:04 +01:00
0b4a2e0e5b chore: use std::unique_ptr for IDataSocket
port-of input-leap/836e08b0642ad158ecedc44e59a3bd3c61b56141
ported-by sithlord48
2025-05-28 09:54:04 +01:00
9eabbb690c chore: MSWindows only items initilize members in header 2025-05-28 09:42:08 +01:00
3eb3969a01 chore: use final for overrides and remove virtual for non base classes 2025-05-28 09:42:08 +01:00
d2ac36f3ed chore: make more const methods 2025-05-28 09:42:08 +01:00
e6a374369b chore: use const for more local ref and pointer vars 2025-05-28 09:42:08 +01:00
9c56fa5dda chore: Combine unnessessary multi level if into less fewer checks 2025-05-28 09:42:08 +01:00
6875969255 chore: static_cast to replace reinterpret_cast where possible 2025-05-28 09:42:08 +01:00
aa1eaf601c chore: SecureUtils, do not use final for stringVar name 2025-05-28 09:42:08 +01:00
f77213af04 chore: ActionDialog, remove empty statement 2025-05-28 09:42:08 +01:00
a4f1a382d3 chore: use ranged for in ClientListener::cleanupClientSockets 2025-05-23 10:19:11 -07:00
647201cd37 refactor: server/Config to the variable initializer and condition part of the for loop when checking for a valid screen name 2025-05-23 10:19:11 -07:00
e24b1c4b68 chore: use a const Ref for ServerConnection client name check 2025-05-23 10:19:11 -07:00
475b895755 chore: initialize class vars using the order class define, initilizer list, constructor 2025-05-23 10:19:11 -07:00
593e53370a chore: rename a missed namespace from synergy::gui => deskflow::gui 2025-05-23 10:19:11 -07:00
be6a4f6b4d chore: ScreenSettingsDialog rename ui_ => ui 2025-05-23 10:19:11 -07:00
929131d10b refactor: Log Error stop the core process if unable to write to the required fingerprint database 2025-05-23 18:08:41 +01:00
767919b342 refactor: consolidate IArchString subclasses into ArchString 2025-05-23 17:58:36 +01:00
4224215991 chore: make IArchString::EWideCharEncoding a enum class 2025-05-23 17:58:36 +01:00
45090d6b85 chore: IArchString clean up remaing code smells 2025-05-23 17:58:36 +01:00
476f3ba243 refactor: remove Ifdef around iso_level5 2025-05-23 17:19:55 +01:00
a33574e1bd chore: use more ranged for loops 2025-05-22 20:46:41 +01:00
456afaa13e chore: use emplace_back where possible 2025-05-22 20:46:41 +01:00
17f12d8334 chore: ClientApp remove unused restartRetryTimer and nextRetryTimer, use RETRY_TIME directly in ClientApp instead 2025-05-22 20:46:41 +01:00
723671c2e5 chore: remove // from inside comment blocks 2025-05-22 20:46:41 +01:00
5a90b51e97 chore: use string_view in place of string where possible 2025-05-22 20:46:41 +01:00
fe12972e83 chore: use const pointer / ref where possible 2025-05-22 20:46:41 +01:00
9bdb4252e5 chore: remove goto in EventQueue, instead use a private processEvent method 2025-05-22 20:46:41 +01:00
c73729e72e chore: static number number of priorities 2025-05-22 20:46:41 +01:00
04805d9a7e chore: mark explicit methods 2025-05-22 20:46:41 +01:00
293c5e394c fix: broken link "built it" in README 2025-05-22 09:53:48 -07:00
3cf0fb89ef chore: add comment to empty methods 2025-05-20 16:20:07 +01:00
52b0c1f061 chore: use auto or (const auto) where possible 2025-05-20 16:20:07 +01:00
c224cd4661 chore: declare const methods recommened by sonar 2025-05-20 16:20:07 +01:00
635962618f chore: define only one variable per line 2025-05-20 16:20:07 +01:00
0ff72441e6 chore: use c++17 style if,switch init-initilizer where possible
chore: correct spelling of "colon" in NetworkAddresses variables
chore: correct some multi line defines near needed init-initilizers
2025-05-20 16:20:07 +01:00
bdffda9a2f chore: replace typedef with using 2025-05-20 16:20:07 +01:00
cac63937ff chore: cleansmells in ArchDaemon 2025-05-20 16:20:07 +01:00
12fbc2fd57 ci: do not run the Install Depends step of the Install Dependencies action on windows since it does nothing anyway 2025-05-20 15:01:18 +01:00
06324a941a ci: do not install ninja or cmake for mac os runners, they are now part of the runner 2025-05-20 15:01:18 +01:00
8dd9e17e72 ci: remove install ninja action ninja is included on the runner 2025-05-20 15:01:18 +01:00
a5e5bbc2e4 fix: race case if first run message is up and a client connects 2025-05-20 12:12:54 +01:00
34f6186941 fix: Disable the save button when config not writable 2025-05-19 22:10:41 +01:00
486b5a491f chore: LogOutputers add comments to empty overrides 2025-05-19 21:48:27 +01:00
037fee0e59 refactor: remove archConsole use its only implemented method directly in logOutputters 2025-05-19 21:48:27 +01:00
a9e0c62c24 refactor: link mt to base 2025-05-19 21:35:08 +01:00
43a51434ce chore: remove unused MinimalApp Class 2025-05-19 21:35:08 +01:00
eaa4c71d6e fix: Show first server start message only in server mode 2025-05-15 17:40:17 +01:00
393a006773 fix settings modifiers initilization, move initization to header
fixes: #8587
2025-05-15 17:25:08 +01:00
332e6c4a4d refactor: do not write sha1 to localdb and no longer send sha1 as part of comparison 2025-05-15 15:46:16 +01:00
63e87c16d1 refactor: port ServerAppTests to QtTests 2025-05-14 19:41:22 +01:00
14cb921d4c Resolve deprecated-enum-float-conversion compiler warnings
- Observed on macOS Monterey 12.7.6 with cmake version 4.0.1, Homebrew clang version 20.1.4, Target: x86_64-apple-darwin21.6.0
2025-05-14 11:05:41 -04:00
de583145d0 chore: remove unused deskflow::string methods toHex, fromHex, uppercase, fromHexChar 2025-05-13 11:32:02 -04:00
0309d35aef feat: port fingerprint info into Qt
mv FingerprintData -> Fingerprint
2025-05-13 11:32:02 -04:00
c4704649ea refactor: make sure settings dialog pushes all options to the top 2025-05-13 15:48:33 +01:00
e4e332c13f chore: simplify test includes 2025-05-12 13:48:21 +01:00
33edb6ce01 refactor: simplify wayland warnings remove waylandwarnigns dialog test 2025-05-12 13:48:21 +01:00
49173b11b9 ci: enable coverage for Qt Tests 2025-05-12 13:48:21 +01:00
81392fe758 build: move old tests to unittests/legacytests 2025-05-12 13:48:21 +01:00
3ae2b3a571 build: rename old tests binary to legacytests
ci: run-tests action, split legacy and new unit tests into two steps
2025-05-12 13:48:21 +01:00
2aee6d8812 build: correct language manager test binary name 2025-05-12 13:48:21 +01:00
db3b18b36d build: Add new SKIP_BUILD_TESTS option to allow the build time test to be skipped and run later on
ci: run and check Qt Tests post build
2025-05-12 13:48:21 +01:00
89c199b630 build: leave Qt Tests in place do not move them to CMAKE_BUILD_DIR/bin 2025-05-12 13:48:21 +01:00
d023c8ef77 ci: sync depends of arch package template to those used on arch 2025-05-09 07:40:38 -04:00
af383decca chore: Type fixes / Const correctness 2025-05-09 12:27:56 +01:00
8526facbe9 refactor: Fixes, Use enum instead of cast to int 2025-05-09 12:27:56 +01:00
2b3ecd39c6 refactor: ScreenCorners, Use enum instead of cast to int 2025-05-09 12:27:56 +01:00
49589ae4aa refactor, Modifiers, Use enum instead of cast to int 2025-05-09 12:27:56 +01:00
8ce6a07d18 refactor: Simplify Mainwindow, autoAddScreen also Removes warning 2025-05-09 12:27:56 +01:00
a8eb772b68 chore: Mainwindow, Send const-ref 2025-05-09 12:27:56 +01:00
0916009601 chore: Add nodiscard to methods 2025-05-09 12:27:56 +01:00
f5cb636b31 chore: MainWindow, Remove unimplemented methods 2025-05-09 12:27:56 +01:00
7ced794317 refactor: Screen, Mark methods as no discard, remove uneeded method 2025-05-09 12:27:56 +01:00
7c279ec72d refactor: No else after return 2025-05-09 12:27:56 +01:00
83a8d1c4ac refactor: Screen, simplify init call 2025-05-09 12:27:56 +01:00
84a9367124 refactor: Screen, remove uneeded constructor 2025-05-09 12:27:56 +01:00
aaeef7905a refactor: Initialize value on constructor 2025-05-09 12:27:56 +01:00
a0d0936433 refactor: Use smaller integers on enums
We do not have > 255 values here.
2025-05-09 12:27:56 +01:00
8f53b88bb6 chore: remove unused tests
Remove Unused Mocks
Remove remaing uses of TEST_ENV and its guarded items
2025-05-08 15:26:44 +01:00
d8b4fab9a3 refactor: move OSXKeyStateTest => QtTests 2025-05-08 15:26:44 +01:00
9d867f6146 refactor: port deskflow/keyMapTest to QtTests
remove TEST_ENV items from KeyMap
KeyMap and KeyMapTests are friends
2025-05-08 15:26:44 +01:00
632be4b240 refactor: port gui/ScreenTest to QtTests
remove TEST_ENV items from Screen
2025-05-08 15:26:44 +01:00
b8c6d1b58f refactor: port OSXClipboardTests to QtTests 2025-05-08 15:26:44 +01:00
139dbf61f3 refactor: remove broken OSXScreenTest 2025-05-08 15:26:44 +01:00
e512125595 refactor: port net/SecureUtilsTest to QtTests 2025-05-08 15:26:44 +01:00
ae37543a37 refactor: port gui/LoggerTests to QtTests 2025-05-08 15:26:44 +01:00
8a80c52208 refactor: port net/FingerprintDatabaseTest to QtTests 2025-05-08 15:26:44 +01:00
38dc845c72 refactor: port serverConfigTests to QtTests
remove TEST_ENV items from server/Config
2025-05-08 15:26:44 +01:00
b56a282a9c refactor: port ServerTests to QtTests
remove TEST_ENV items from Server
2025-05-08 15:26:44 +01:00
d742901775 refactor: port XWindowsClipboardTests to QtTests 2025-05-08 15:26:44 +01:00
287d70a138 refactor: port IKeyStateTest to QtTests 2025-05-08 15:26:44 +01:00
6c0843d088 refactor: port ClipboardTests to QtTests 2025-05-08 15:26:44 +01:00
cbcaafe764 refactor: port deskflow/ClipboardChunkTests to QtTests 2025-05-08 15:26:44 +01:00
29a86cfbac refactor: port GenericArgsTests to QtTests 2025-05-08 15:26:44 +01:00
d7506697c8 refactor: port ServerArgsTests to QtTests 2025-05-08 15:26:44 +01:00
6c2457d60b refactor: port ClientArgsTests to QtTests 2025-05-08 15:26:44 +01:00
30d9034a0f refactor: port DeprecatedArgsTests to QtTests 2025-05-08 15:26:44 +01:00
a2acfb0678 refactor: port ArgParserTests to QtTests 2025-05-08 15:26:44 +01:00
7fa326234e refactor: port X11LayoutParserTests to QtTests 2025-05-08 15:26:44 +01:00
baaa02cda2 refactor: port deskflow/LanguageMangerTests to QtTests 2025-05-08 15:26:44 +01:00
231e5c0bc5 refactor: port base/XBaseTests to QtTests 2025-05-08 15:26:44 +01:00
78cbe4b775 refactor: port base/UnicodeTest to QtTests 2025-05-08 15:26:44 +01:00
a1a7c8f3ff refactor: port base/StringTests to QtTests 2025-05-08 15:26:44 +01:00
501726d471 refactor: port base/pathTest to QtTests 2025-05-08 15:26:44 +01:00
b51dec01ad refactor: port arch/IArchStringTests to QtTests 2025-05-08 15:26:44 +01:00
1c907991af build: remove unused integtests 2025-05-08 15:26:44 +01:00
0c3c913989 chore: remove unused MainWindowTest 2025-05-08 15:26:44 +01:00
4479b90d37 refactor: port Platform/MSWindowsClipboardTests to QtTests 2025-05-08 15:26:44 +01:00
8a139f0e3d refactor: port CommandProcessTests to QtTests 2025-05-08 15:26:44 +01:00
810322623b refactor: port ConfigTests to QtTest 2025-05-08 15:26:44 +01:00
245f9db5c8 refactor: port DotEnvTests to QTests 2025-05-08 15:26:44 +01:00
807f32975a feat: add Initial Qt Tests items
create a new SettingsTests Test
2025-05-08 15:26:44 +01:00
5365e34f08 feat: remove drag and drop support, its broken on all platforms 2025-05-08 09:47:41 -04:00
55a7fa3266 Port simplified EventTypes from 8b23570379 2025-05-05 17:17:01 -04:00
118f867fd1 refactor: Remove unused IEventQueue::getRegisteredType()
ported from a5b6017235
2025-05-05 17:17:01 -04:00
13dc055405 build: better detect windows Arm64 on both CI and locally 2025-05-05 21:28:06 +01:00
99dae58fd3 chore: clean up macos code smell missed by sonarscan 2025-05-03 21:23:15 +01:00
e9ccd513f7 chore: clean up windows code smells missed by sonarscan 2025-05-03 21:13:09 +01:00
903401796e refactor: Remove use of DESKFLOW_RESET_ALL and all users to pass --reset switch to deskflow-gui instead 2025-05-03 21:09:41 +01:00
97863bda7c ci: use sithlord48/vcpkg-action@v7 2025-05-02 11:45:55 -07:00
0c94adf03c docs: Improve readability of readme
- Condensed and deduped the Synergy sponsor text
- Add more headings to make sections clearer
- Add rewarded bounty badge
2025-05-02 12:21:31 +01:00
d643e4b189 chore: PrimaryClient, use default for deconstructors / constructors 2025-05-02 12:12:17 +01:00
c8734755c5 chore: InputFilter, use default for deconstructors / constructors 2025-05-02 12:12:17 +01:00
edea3b0df1 chore: server/Config use default for deconstructors 2025-05-02 12:12:17 +01:00
f4264d71a1 chore: ClientProxy1_6 use default for deconstructor 2025-05-02 12:12:17 +01:00
6ffd0eb471 chore: ClientProxy1_4 use default for deconstructor 2025-05-02 12:12:17 +01:00
7619928d56 chore: ClientProxy1_3 use override where possible 2025-05-02 12:12:17 +01:00
d70c7fe720 chore: ClientProxy1_2 use default for deconstructor 2025-05-02 12:12:17 +01:00
b26ca77ff1 chore: ClientProxy1_1 use default for deconstructor 2025-05-02 12:12:17 +01:00
68db2c3484 chore: BaseClientProxy use default for deconstructor 2025-05-02 12:12:17 +01:00
81c19c6ee8 chore: XClipboardUTF8Converter use default for deconstructor 2025-05-02 12:12:17 +01:00
1276a4a29c chore: XClipboardUCS2Converter use default for deconstructor 2025-05-02 12:12:17 +01:00
d97f4d87ad chore: XClipboardTextConverter use default for deconstructor 2025-05-02 12:12:17 +01:00
d5cbd002a9 chore: XClipboardHTMLConverter use default for deconstructor 2025-05-02 12:12:17 +01:00
31a6fd23e7 chore: XClipboardBMPConverter use default for deconstructor 2025-05-02 12:12:17 +01:00
f6c6d4e3a7 chore: XClipboardAnyBitmapConverter use default for constructor / deconstructor 2025-05-02 12:12:17 +01:00
5801b92636 chore: XSocket use default for deconstructor 2025-05-02 12:12:17 +01:00
b427ac91c2 chore: TCPSocketFactory use default for deconstructor 2025-05-02 12:12:17 +01:00
e87c596fbe chore: SecureSocket, add missing nullptr replacement 2025-05-02 12:12:17 +01:00
35b4749627 chore: XThread use default for deconstructor 2025-05-02 12:12:17 +01:00
6b2a28600a chore: CondVar, use default for deconstructor 2025-05-02 12:12:17 +01:00
600378b72d chore: StreamBuffer, use default for deconstructor 2025-05-02 12:12:17 +01:00
8e24689f72 chore: IStream, use default for deconstructor 2025-05-02 12:12:17 +01:00
07f9c4ba47 chore: AddClientDialog, add missing nullptr replacement 2025-05-02 12:12:17 +01:00
9d476e143e chore: KeySequence, add missing nullptr replacement 2025-05-02 12:12:17 +01:00
6bcdd4ebe7 chore: DataDownloader, use default for deconstructor, add missing nullptr replacement 2025-05-02 12:12:17 +01:00
9085468d1c chore: AppUtilUnix, use default for deconstructors 2025-05-02 12:12:17 +01:00
7bace4d36d chore: XScreen, use default for deconstructors 2025-05-02 12:12:17 +01:00
ca0d095283 chore: XDeskflow, use default for deconstructors 2025-05-02 12:12:17 +01:00
ace5b54912 chore: ServerArgs, use default for deconstructor 2025-05-02 12:12:17 +01:00
c99767c8b7 chore: ServerApp, use default for deconstructor 2025-05-02 12:12:17 +01:00
297b781578 chore: PlatformScreen, use default for deconstructor 2025-05-02 12:12:17 +01:00
8c4dc001bf chore: PacketStreamFilter, use default for deconstructor 2025-05-02 12:12:17 +01:00
9ca13a65d1 chore: keystate: using nullptr 2025-05-02 12:12:17 +01:00
73566c061d chore: Keymap, use default for deconstructor 2025-05-02 12:12:17 +01:00
ed3118b81a chore: DragInformation, use default for deconstructor 2025-05-02 12:12:17 +01:00
cc209b9b1f chore: Clipboard, use default for deconstructor 2025-05-02 12:12:17 +01:00
ee22c31f32 chore: ClientArgs, use default for deconstructor 2025-05-02 12:12:17 +01:00
f376b049e4 chore: ClientApp, use default for deconstructor 2025-05-02 12:12:17 +01:00
57e3ff1fab chore: ArgBase, use default for deconstructor 2025-05-02 12:12:17 +01:00
c39f69b64d chore: AppUtil use default for deconstructor 2025-05-02 12:12:17 +01:00
218a506970 chore: MinimalApp, use default for deconstructor 2025-05-02 12:12:17 +01:00
57cb7227a4 chore: Interface.h, use default for deconstructor 2025-05-02 12:12:17 +01:00
6aabb1e858 chore: XBase, use default for deconstructor 2025-05-02 12:12:17 +01:00
9aec1ad479 chore: TMethodEventJob, use default for deconstructor 2025-05-02 12:12:17 +01:00
c8d4a2186a chore: TMethodJob use default for deconstructor 2025-05-02 12:12:17 +01:00
f68744a36d chore: Stopwatch, use default for deconstructor and explicit constructor 2025-05-02 12:12:17 +01:00
183d660186 chore: PriorityQueue, use default for deconstructor / constructors 2025-05-02 12:12:17 +01:00
e20ef3ae55 chore: LogOutputters, use default for deconstructor / constructors 2025-05-02 12:12:17 +01:00
0bfb95996a chore: FunctionJob, use default for deconstructor 2025-05-02 12:12:17 +01:00
7d27031723 chore: FunctionEventJob, use default for deconstructor 2025-05-02 12:12:17 +01:00
ada495c681 chore: FinalAction, use default for constructor and explicit 2025-05-02 12:12:17 +01:00
e91b9867e0 chore: EventQueue, use default for deconstructor 2025-05-02 12:12:17 +01:00
d483dc38bd chore: unix/XArchUnix, use default for constructor and deconstructor, explicit constructor with no except deconstructor 2025-05-02 12:12:17 +01:00
56dd5492b4 chore: unix/ArchTimeUnix, use default for constructor and deconstructor 2025-05-02 12:12:17 +01:00
67c7ba6dae chore: unix/ArchStringUnix, use default for constructor and deconstructor 2025-05-02 12:12:17 +01:00
1138e3b1fb chore: unix/ArchLogUnix, use default for constructor / deconstructor 2025-05-02 12:12:17 +01:00
6523911e4d chore: unix/ArchSleepUnix, use default for constructor and deconstructor 2025-05-02 12:12:17 +01:00
a52552b821 chore: unix/ArchDaemonUnix, use default for constructor and deconstructor 2025-05-02 12:12:17 +01:00
bd2188beb1 chore: unix/ArchConsoleUnix, use default for constructor and deconstructor 2025-05-02 12:12:17 +01:00
edc0c0d7a0 chore: XArch, use default for constructors / deconstrucor
use noexecpt for virtual deconstctor
use explicit for constructors
2025-05-02 12:12:17 +01:00
95586c88fd chore: ArchDaemonNone, use deault for empty deconstructor
use default for empty constructor
add comment for empty overrides from base class
2025-05-02 12:12:17 +01:00
d7174a3a2f chore: ArchConsoleStd, use default for empty deconstructor
use default for empty constructor
add comment to empty impl on base methods
2025-05-02 12:12:17 +01:00
2289ed5845 chore: Arch use default for empty deconstructor
use explicit for constuctors
2025-05-02 12:12:17 +01:00
2192636d2b fix(wayland): release portal input capture when EI_EVENT_DISCONNECT is encountered, refactoring
Fixes #8005.
2025-05-01 12:35:00 +01:00
6194868e89 chore(wayland): add debug logline in EiScreen::handle_portal_session_closed 2025-05-01 12:35:00 +01:00
00f53c1aac fix(ei): Drain all events sitting in our pipe
If we're starved for resources, we may end up with more than 64
notifications in our pipe before we get to actually read them.
Those notifications are just that though, so let's drain them.
2025-05-01 10:04:28 +01:00
59df2db7b7 chore: Silence two compiler signedness warnings
Both trigger:
  warning: comparison of integer expressions of different signedness: ‘int’ and ‘size_t’ {aka ‘long unsigned int’} [-Wsign-compare]

In the first hunk we already checked for i < 0 so casting to size_t is
fine. In the second hunk we don't use i so we can pick the right type.
2025-04-30 12:04:43 +01:00
35f0e9e6e4 feat(gui): Retry mechanism for Windows Daemon IPC client 2025-04-29 13:13:07 +01:00
3b3d9e14fd fix(daemon): Log responses for 'hello' and 'noop' 2025-04-29 13:13:07 +01:00
b3f179a08a chore: Server, use auto where possible 2025-04-28 13:50:43 +01:00
f3fca87e19 chore: InputFilter, use auto where possible 2025-04-28 13:50:43 +01:00
a3093fa046 chore: Config, use auto where possible 2025-04-28 13:50:43 +01:00
c00ebbd6c1 chore: ClientProxy1_6, use auto where possible 2025-04-28 13:50:43 +01:00
09457793b4 chore: ClientProxy1_0, use auto where possible 2025-04-28 13:50:43 +01:00
d436aa3001 chore: ClientListener, use auto where possible 2025-04-28 13:50:43 +01:00
ec4851d326 chore: XWindowsUtil, use auto where possible 2025-04-28 13:50:43 +01:00
f338e5e7a8 chore: XWindowScreenSave, use auto where possible 2025-04-28 13:50:43 +01:00
55b48a5db7 chore: XWindowsScreen, use auto where possible 2025-04-28 13:50:43 +01:00
352a871729 chore: XWindowsKeyState, use auto where possible 2025-04-28 13:50:43 +01:00
b103f28202 chore: XWindowsClipboardBMPConverter, use auto where possible 2025-04-28 13:50:43 +01:00
39b49acb56 chore: XWindowsClipboardAnyBitmapConvertor, use auto where possible 2025-04-28 13:50:43 +01:00
5d4fbc8ea6 chore: XWindowClipboard, use auto where possible 2025-04-28 13:50:43 +01:00
3dfa3d5069 chore: EiScreen, use auto where possible 2025-04-28 13:50:43 +01:00
6d9c66b03f chore: EiKeyState, use auto where possible 2025-04-28 13:50:43 +01:00
02b2b82c7f chore: TCPSocketFactory, use auto where possible 2025-04-28 13:50:43 +01:00
aac086ad2a chore: TCPSocket, use auto where possible 2025-04-28 13:50:43 +01:00
0d3f7248ed chore: SecureSocket, use auto where possible 2025-04-28 13:50:43 +01:00
da6e110b69 chore: Thread, use auto where possible 2025-04-28 13:50:43 +01:00
a298cc84ad chore: SocketMultiplexer, Use auto where possible 2025-04-28 13:50:43 +01:00
d8348152ec chore: StreamBuffer, use auto where possible 2025-04-28 13:50:43 +01:00
572953d5ba chore: ScreenSetupView, use auto where possible 2025-04-28 13:50:43 +01:00
a23856ee09 chore: NewScreenWidget, use auto where possible 2025-04-28 13:50:43 +01:00
637adc60b2 chore: SettingsDialog, use auto where possible 2025-04-28 13:50:43 +01:00
0ca847334e chore: ServerConfigDialog, use auto where possible 2025-04-28 13:50:43 +01:00
d06d6a5003 chore: Screen, use auto where possible 2025-04-28 13:50:43 +01:00
6d856b674b chore: ScreenSetupModel, use auto where possible 2025-04-28 13:50:43 +01:00
bcfc121c37 chore: Action, use auto where possible 2025-04-28 13:50:43 +01:00
b2ec2f1a34 chore: StramChunker, use auto where possible 2025-04-28 13:50:43 +01:00
df9d5ded1c chore: ServerApp, use auto where possible 2025-04-28 13:50:43 +01:00
f11dae97d4 chore: ProtocolUtil, use auto where possible 2025-04-28 13:50:43 +01:00
3fdc5288eb chore: KeyState, use auto where possible 2025-04-28 13:50:43 +01:00
955f9652fb chore: KeyMap, use auto where possible 2025-04-28 13:50:43 +01:00
9dedf25ecc chore: IPrimaryScreen, use auto where possible 2025-04-28 13:50:43 +01:00
ee3dffc4f8 chore: IKeyState, use auto where possible 2025-04-28 13:50:43 +01:00
8123166e66 chore: IClipboard, use auto where possible 2025-04-28 13:50:43 +01:00
29626d6694 chore: FileChunk, use auto where possible 2025-04-28 13:50:43 +01:00
996af86b9b chore: DragInformation, use auto where possible 2025-04-28 13:50:43 +01:00
84fbe48d35 chore: ClipboardChunk, use auto where possible 2025-04-28 13:50:43 +01:00
11423ef5a1 chore: ClientApp, use auto where possible 2025-04-28 13:50:43 +01:00
7cc108d87c chore: ArgParse, use auto where possible 2025-04-28 13:50:43 +01:00
af70ff98b7 chore: Client, Use auto where possible 2025-04-28 13:50:43 +01:00
b6f7497c44 chore: Unicode, Use auto where possible 2025-04-28 13:50:43 +01:00
f6602baa36 chore: String, Use auto where possible 2025-04-28 13:50:43 +01:00
72091c6ac4 chore: Log, use auto where possible 2025-04-28 13:50:43 +01:00
fb5f80857b chore: EventQueue, Use auto where possible 2025-04-28 13:50:43 +01:00
6c7bdf3e07 chore: ArchNetworkBSD, Use auto where possible 2025-04-28 13:50:43 +01:00
1df01d3cf1 chore: ArchMuitiThreadPosix, Use auto where possible 2025-04-28 13:50:43 +01:00
2bebdbaf4d chore: DeskflowGui, Use auto where possible 2025-04-28 13:50:43 +01:00
63d65bb47b chore: use nullptr where possible in place of NULL 2025-04-28 13:08:40 +01:00
60dc4c0cd8 chore: remove unneed mac os version checks 2025-04-28 12:52:55 +01:00
78d1c5222f chore: Replace old required mac os version checks with if WINAPI_CARBON 2025-04-28 12:52:55 +01:00
6e3426855d ci: use normal built in vcpkg cache 2025-04-28 04:29:51 -07:00
f49f5f790c chore: Remove unused CONFIG_NAME var in ServerApp 2025-04-28 04:25:02 -07:00
4eaf6fda62 refactor: correct includes in ServerApp 2025-04-28 04:25:02 -07:00
ebc6186fe7 refactor: remove auto fallback paths for server binary
they are not correct in the help and its dynamic based on the first found Deskflow.conf file. The gui sets this manually and users running the cli should too
2025-04-28 04:25:02 -07:00
48f824ca31 chore: Server, default should be first or last case for switches 2025-04-28 11:47:04 +01:00
d6ace78a58 chore: XWindowUtils, default should be first or last case for switches 2025-04-28 11:47:04 +01:00
41fda741b3 chore: Use override for override methods 2025-04-28 11:27:33 +01:00
793ea5f81c fix: make sure client, server and core init a qApp for Setting's to find the app path with
fixes #8534
2025-04-25 17:27:05 +01:00
285abc7bb7 fix: add reuse info to **/*.md by default 2025-04-25 06:08:11 -07:00
d6c9897748 docs: Create CONTRIBUTING.md
Adds a CONTRIBUTING.md file to the project root. I totally understand the preference to keep the root directory clean and normally I'd agree. However, GitHub requires CONTRIBUTING.md to be in the root in order to automatically show a “Contribute” prompt when someone opens a new issue or PR.

It also means we can be recognized by platforms like goodfirstissue.dev (https://github.com/DeepSourceCorp/good-first-issue?tab=readme-ov-file#adding-a-new-project:~:text=project%2C%20and%20a-,CONTRIBUTING.md,-with%20guidelines%20for), which requires the file to be in the root to detect a repo as contributor-friendly

The file itself is very lightweight, just a short intro and a link to our full guide on the wiki:
https://github.com/deskflow/deskflow/wiki/Contributing

This keeps the root file tidy while still meeting the visibility requirements for tools and new contributors.

Let me know if you'd prefer any tweaks to keep it as non-intrusive as possible.
2025-04-25 05:53:27 -07:00
ed4ecc2d81 docs(readme): Add contrib link and badges to README.md
The 'good first issue' label curates easy pickings and helps people make their first contribution to open-source.
2025-04-25 05:53:02 -07:00
794017402d chore: remove unused TLSCertificate::getCertificatePath 2025-04-25 09:58:49 +01:00
4034302bfb build: Replace CMAKE_SYSTEM_PROCESSOR with BUILD_ARCHITECTURE, on windows CMAKE_SYSTEM_PROCESSOR is flawed so when possible use the vcpkg info or default to x64 Adjust the vcruntime check to use the BUILD_ARCHITECTURE to check the proper version is installed for the architecture the app is build for 2025-04-25 09:20:08 +01:00
eab87e3869 chore: Increase log level for noisy empty lang code log line
It seems that `layoutLangCode.empty()` is true on my GNOME Wayland server every time I press a key. I don't know why, but it probably means something. Client doesn't seem to matter; happens for all client OS.
2025-04-23 04:50:04 -07:00
294348b42b fix: fixes #8522 by disconnecting firstShown after the first show event 2025-04-23 10:01:02 +01:00
71b6f07220 feat: remove stopOnDeskSwitch, its broken 2025-04-22 10:00:45 +01:00
9addada64c fixes #8517 , save the host name if the lineEdit is not empty, instaed of only if the value of the setting is not empty 2025-04-22 09:42:47 +01:00
b6196f147a ci: chore: remove unused arch var for macos-14 2025-04-22 09:26:18 +01:00
2c4a68ebcf ci: add osxSysroot to mac os14 job 2025-04-22 09:26:18 +01:00
d8f480b981 ci: Adjust back to main flatpak builder
see: https://github.com/flathub-infra/flatpak-github-actions/issues/17
2025-04-21 15:19:40 -07:00
80afb92af1 chore: remove more code for inverse connection
related: https://github.com/deskflow/deskflow/pull/8240
2025-04-21 22:39:28 +01:00
f5f3bc0475 chore: remove unused old test mocks 2025-04-21 22:16:05 +01:00
17c7b0f8bf fix: user can not start in client mode without a remote host
do not auto start the client if the remote host is empty
fixes #8478
2025-04-21 22:01:31 +01:00
fcaadc2cd4 ci: add fedora 42 2025-04-21 09:55:45 -07:00
e3642f0955 refactor: do not save empty RemoteHost line 2025-04-17 15:57:29 +01:00
07d837a39b build(qt): Update Qt mirror to https://qt.mirror.constant.com 2025-04-17 13:05:02 +01:00
1202145bb8 fix(daemon): Use scheduled state when start is scheduled 2025-04-16 05:28:23 -07:00
abc963f886 fix(daemon): Only log XArchEvalWindows result when GetExitCodeProcess fails 2025-04-16 05:28:23 -07:00
4988196c47 fix(daemon): Use missing %s when logging XArchEvalWindows result 2025-04-16 05:28:23 -07:00
8a2b6bd688 fix(daemon): Validate process handle and ID before shutdown 2025-04-16 05:28:23 -07:00
901dacf593 feat(daemon): Friendly message on daemon connection error 2025-04-16 05:12:33 -07:00
c62b4ec068 fix: Use QTextStream to write to stdout and stderr
Only use `Qt::endl` when writing to the output stream; `Q_EMIT newLine` should not include a trailing newline because `appendPlainText` doesn't expect one.
2025-04-15 05:02:25 -07:00
c8408c4823 fix: Default external server config name should be *-server.conf 2025-04-14 10:05:20 +01:00
8657532ca2 feat: add logging to clipboard 2025-04-11 10:07:57 +01:00
64b277a5df refactor: deskflow/Clipboard, do not assert instead handle the cases where we would have asserted to fail safely 2025-04-11 10:07:57 +01:00
cd7d53d2bd fix: Add missing menu accelerators
fixes #8470
2025-04-10 12:27:49 +01:00
d740574bd4 fix: Remove unnecessary log line endings and trimming 2025-04-10 12:16:42 +01:00
84ae597d69 fixes #8463 do not assume C for root 2025-04-10 11:57:05 +01:00
16ef088c27 fix: Show first server start message only when start was successful 2025-04-09 07:43:59 -07:00
7e4b6b82f4 ci: force osxSysroot for osx13 builds 2025-04-09 13:53:18 +01:00
daa095461d Release 1.21.2
Some checks are pending
Continuous Integration / pr-comment-flags (push) Blocked by required conditions
Continuous Integration / ci-passed (push) Blocked by required conditions
Continuous Integration / test-results (push) Blocked by required conditions
Continuous Integration / reuse-lint (push) Waiting to run
Continuous Integration / lint-check (push) Blocked by required conditions
Continuous Integration / analyse-valgrind (push) Blocked by required conditions
Continuous Integration / analyse-sonarcloud (push) Blocked by required conditions
Continuous Integration / macos-14-arm64 (push) Blocked by required conditions
Continuous Integration / macos-13-x64 (push) Blocked by required conditions
Continuous Integration / archlinux-x86_84 (push) Blocked by required conditions
Continuous Integration / debian-13-arm64 (push) Blocked by required conditions
Continuous Integration / debian-13-x86_64 (push) Blocked by required conditions
Continuous Integration / fedora-40-arm64 (push) Blocked by required conditions
Continuous Integration / fedora-40-x86_84 (push) Blocked by required conditions
Continuous Integration / fedora-41-arm64 (push) Blocked by required conditions
Continuous Integration / fedora-41-x86_64 (push) Blocked by required conditions
Continuous Integration / opensuse-arm64 (push) Blocked by required conditions
Continuous Integration / opensuse-x86_84 (push) Blocked by required conditions
Continuous Integration / ubuntu-25.04-arm64 (push) Blocked by required conditions
Continuous Integration / ubuntu-25.04-x86_64 (push) Blocked by required conditions
Continuous Integration / windows-2022-x64 (push) Blocked by required conditions
Continuous Integration / unix-freebsd (push) Blocked by required conditions
Continuous Integration / flatpak-aarch64 (push) Blocked by required conditions
Continuous Integration / flatpak-x86_64 (push) Blocked by required conditions
Continuous Integration / release (push) Blocked by required conditions
Continuous Integration / winget-publish (push) Blocked by required conditions
2025-04-07 05:24:27 -07:00
fde880fb6f chore: add default case for EI_EVENT handling 2025-04-07 11:23:28 +01:00
a04568b25f refactor: remove unneeded using ProcessState in coreprocess::startprocess 2025-04-07 03:09:30 -07:00
6e6892b6e7 refactor: use checkbox for elevate remove Settings::Core::ElevateMode and use Daemon::Elevate to hold the value 2025-04-07 03:09:30 -07:00
5ad2c9283d refactor: add a check box to enable stop on desk switch 2025-04-07 03:09:30 -07:00
487030aade refactor: settings gui, use the service group as a checkbox for enable service 2025-04-07 03:09:30 -07:00
1ace03d4b5 feat: add help and version to gui,
move no-reset to the QCommandLineProcessor
2025-04-06 06:41:25 -07:00
5df333fae9 refactor: change project description to 'Keyboard and mouse sharing utility' 2025-04-06 06:41:25 -07:00
3b4306183c chore: deskflow-gui remove fallback for pre mavricks mac os accessibility prompt 2025-04-06 06:41:25 -07:00
4203f42363 chore: remove workaround for Qt-43022 2025-04-06 06:41:25 -07:00
7e4ac48476 chore: df-gui remove unused QThredImpl class 2025-04-06 06:41:25 -07:00
0b05b0e71d chore: deskflow-gui remove unused includes 2025-04-06 06:41:25 -07:00
cos
ebb63d8113 build: add manpages
Manual pages got removed from synergy in #7361. This commit brings them
back. They are rudimentary and autogenerated using `help2man`, with only
a message about finding the documentation at the wiki page added. Not
much, but a lot better than nothing.

Package names added to Continuous Integration are based on these web pages:

    https://archlinux.org/packages/extra/x86_64/help2man/
    https://packages.debian.org/help2man
    https://packages.fedoraproject.org/pkgs/help2man/help2man/
    https://software.opensuse.org/package/help2man
2025-04-06 06:07:52 -07:00
c1f1734943 ci: bump windows / mac builds to Qt 6.9.0 2025-04-05 13:28:27 -07:00
12bcc1a4d6 fix: build issue on Qt 6.9 2025-04-05 13:28:27 -07:00
84283a1b13 ci: correctly install depends for freebsd 2025-04-05 13:08:25 -07:00
0a33e20723 refactor: remove unused --host arg from deskflow-client 2025-04-05 12:05:23 -07:00
d4f916c365 chore: remove unused --no-wayland-ei
fixes #7680
2025-04-05 12:05:23 -07:00
6df96d4a56 refactor: Don't show drag and drop as an option on linux 2025-04-05 12:05:23 -07:00
e617e4b537 chore: deskflow-client, remove from help --use-x-window, options was unused and should not be reported as an option 2025-04-05 12:05:23 -07:00
ca5cc8211b chore: lib/deskflow/ServerApp remove duplicate print of HELP_COMMON_INFO_2 2025-04-05 12:05:23 -07:00
f01b592dad build: a windows portable package 2025-04-03 17:07:42 +01:00
46c6275c43 feature: make sure when portable settings are cleared a new blank file is created 2025-04-02 12:39:54 +01:00
b3fb8959a3 refactor: SettingsDialog, Hide the service if its not able to be enabled 2025-04-02 12:39:54 +01:00
8354a81706 refactor: Settings set default elevateMode based on settings type, for registry we use Always, ini mode uses Never 2025-04-02 12:39:54 +01:00
d9807a2693 refactor: Set default process Mode based on Settings type if we are INI Type we in desktop mode if Native (only on windows) we default to Service 2025-04-02 12:39:54 +01:00
1b8067797e refactor: settings for windows try to use registry unless portable install
new Settings::isUsingRegistry() true when using the registry
          move daemon log back to config dir
2025-04-02 12:39:54 +01:00
cf4fe32aab refactor: allow proxy to load from registry if no file is provided 2025-04-02 12:39:54 +01:00
6bbebe75f9 fixes #8423, set unit test to force external config on for server tests 2025-04-02 11:12:12 +01:00
0b9ecbc2f4 chore: move unused integtests Network tests to test/unittests 2025-04-01 13:12:40 +01:00
fc36cf6be8 refactor: move remaining platform tests to test/unittests 2025-04-01 13:12:40 +01:00
b7b295aeb6 refactor: combine XWindowsClipboards tests into one unittest 2025-04-01 13:12:40 +01:00
00b5c32fc9 refactor: combine all OSXKeyStateTests into one unittest 2025-04-01 13:12:40 +01:00
5355e84b63 Release 1.21.1
Some checks are pending
Continuous Integration / pr-comment-flags (push) Blocked by required conditions
Continuous Integration / ci-passed (push) Blocked by required conditions
Continuous Integration / test-results (push) Blocked by required conditions
Continuous Integration / reuse-lint (push) Waiting to run
Continuous Integration / lint-check (push) Blocked by required conditions
Continuous Integration / analyse-valgrind (push) Blocked by required conditions
Continuous Integration / analyse-sonarcloud (push) Blocked by required conditions
Continuous Integration / macos-14-arm64 (push) Blocked by required conditions
Continuous Integration / macos-13-x64 (push) Blocked by required conditions
Continuous Integration / archlinux-x86_84 (push) Blocked by required conditions
Continuous Integration / debian-13-arm64 (push) Blocked by required conditions
Continuous Integration / debian-13-x86_64 (push) Blocked by required conditions
Continuous Integration / fedora-40-arm64 (push) Blocked by required conditions
Continuous Integration / fedora-40-x86_84 (push) Blocked by required conditions
Continuous Integration / fedora-41-arm64 (push) Blocked by required conditions
Continuous Integration / fedora-41-x86_64 (push) Blocked by required conditions
Continuous Integration / opensuse-arm64 (push) Blocked by required conditions
Continuous Integration / opensuse-x86_84 (push) Blocked by required conditions
Continuous Integration / ubuntu-25.04-arm64 (push) Blocked by required conditions
Continuous Integration / ubuntu-25.04-x86_64 (push) Blocked by required conditions
Continuous Integration / windows-2022-x64 (push) Blocked by required conditions
Continuous Integration / unix-freebsd (push) Blocked by required conditions
Continuous Integration / flatpak-aarch64 (push) Blocked by required conditions
Continuous Integration / flatpak-x86_64 (push) Blocked by required conditions
Continuous Integration / release (push) Blocked by required conditions
Continuous Integration / winget-publish (push) Blocked by required conditions
2025-03-31 07:53:29 -07:00
8fbcf907b2 build: windows Installer runs Deskflow as a user not admin post install, after Finish 2025-03-31 06:12:46 -07:00
d2bf5e63e4 refactor: allow settings to use XDG_CONFIG_DIR if defined
fixes: #8421
2025-03-31 06:12:46 -07:00
3ed0915b57 refactor: settings for windows use Appdata/local, always save daemon log to app install path 2025-03-31 06:12:46 -07:00
01878b0522 refactor: settings, prefix portableSettingsFile with app dir at runtime 2025-03-31 06:12:46 -07:00
af6b42fe9e newMethod Settings::validKeys to return the known Settings keys 2025-03-31 06:12:46 -07:00
a0051ea0bc chore: lib/common/settings remove unused signal writableChanged 2025-03-31 06:12:46 -07:00
40c915f6bd chore: lib/common/settings remove unused signal scopeChanged 2025-03-31 06:12:46 -07:00
1cee520e2b chore: lib/common/settings remove unused private isPortableSettings 2025-03-31 06:12:46 -07:00
1dd5654af6 fix: Settings update checkbox was initilzed to autohide value
fixes #8418
2025-03-31 06:12:46 -07:00
2708fc96fe chore: use Type for templates 2025-03-30 21:14:57 +01:00
5cfaa4a4e0 refactor: move ALL gui parts to lib 2025-03-29 18:18:12 +00:00
a6453a6819 fix: local-fingerprint generation 2025-03-28 11:49:08 +00:00
f781ac9855 Release 1.21.0
Some checks are pending
Continuous Integration / pr-comment-flags (push) Blocked by required conditions
Continuous Integration / ci-passed (push) Blocked by required conditions
Continuous Integration / test-results (push) Blocked by required conditions
Continuous Integration / reuse-lint (push) Waiting to run
Continuous Integration / lint-check (push) Blocked by required conditions
Continuous Integration / analyse-valgrind (push) Blocked by required conditions
Continuous Integration / analyse-sonarcloud (push) Blocked by required conditions
Continuous Integration / macos-14-arm64 (push) Blocked by required conditions
Continuous Integration / macos-13-x64 (push) Blocked by required conditions
Continuous Integration / archlinux-x86_84 (push) Blocked by required conditions
Continuous Integration / debian-13-arm64 (push) Blocked by required conditions
Continuous Integration / debian-13-x86_64 (push) Blocked by required conditions
Continuous Integration / fedora-40-arm64 (push) Blocked by required conditions
Continuous Integration / fedora-40-x86_84 (push) Blocked by required conditions
Continuous Integration / fedora-41-arm64 (push) Blocked by required conditions
Continuous Integration / fedora-41-x86_64 (push) Blocked by required conditions
Continuous Integration / opensuse-arm64 (push) Blocked by required conditions
Continuous Integration / opensuse-x86_84 (push) Blocked by required conditions
Continuous Integration / ubuntu-25.04-arm64 (push) Blocked by required conditions
Continuous Integration / ubuntu-25.04-x86_64 (push) Blocked by required conditions
Continuous Integration / windows-2022-x64 (push) Blocked by required conditions
Continuous Integration / unix-freebsd (push) Blocked by required conditions
Continuous Integration / flatpak-aarch64 (push) Blocked by required conditions
Continuous Integration / flatpak-x86_64 (push) Blocked by required conditions
Continuous Integration / release (push) Blocked by required conditions
Continuous Integration / winget-publish (push) Blocked by required conditions
2025-03-27 13:47:16 +00:00
d6087cc5bd fix: Handle empty layout names and language codes in layout parser 2025-03-27 13:30:26 +00:00
6e9694b5d8 build: rm pkgconf from list of packges windows needs 2025-03-27 13:07:59 +00:00
201df59cb7 remove Use of libnotify and wintoast 2025-03-27 13:07:59 +00:00
bcfc77fde6 ci: flatpak remove pythong attars 2025-03-27 12:46:28 +00:00
245a522188 build: remove used gio library 2025-03-27 12:46:28 +00:00
fdf1df1a30 refactor: use QtXml in place of pugixml 2025-03-27 12:33:39 +00:00
84b433853a chore: remove unused define HAVE_GMTTIME_R 2025-03-26 09:23:16 +00:00
e225a357fd chore: remove unused define HAVE_GETPWUID_R 2025-03-26 09:23:16 +00:00
54fac87ed2 chore: remove unused define HAVE_WCHAR_H 2025-03-26 09:23:16 +00:00
56a665cd18 chore: remove unused define HAVE_SYS_UTSNAME_H 2025-03-26 09:23:16 +00:00
cb8c6fe9d9 chore: remove unused define HAVE_LOCALE_H 2025-03-26 09:23:16 +00:00
239a265e18 chore: remove unused HAVE_SSTREAM define 2025-03-26 09:23:16 +00:00
ee53d28af7 chore: remove unused HAVE_OSTREAM define 2025-03-26 09:23:16 +00:00
91fd139a49 chore: remove unused HAVE_ISTREAM define 2025-03-26 09:23:16 +00:00
7f1a234d06 refactor: remove unneed library gtkpixbuf 2025-03-26 09:13:13 +00:00
db20c4b0c7 chore: lib/base/PriorityQueue remove unused headers 2025-03-25 14:11:23 +00:00
7bd3fc1eb5 chore: lib/base/LogOutputters remove unused headers 2025-03-25 14:11:23 +00:00
8fde0d764e chore: lib/base/Log remove unused headers 2025-03-25 14:11:23 +00:00
e1eb4ebf98 chore: lib/base/FinalAction remove unused headers 2025-03-25 14:11:23 +00:00
4b06160f84 chore: lib/base/EventTypes remove unused headers 2025-03-25 14:11:23 +00:00
2160f7826f chore: lib/base/EventQueue remove unused headers 2025-03-25 14:11:23 +00:00
7f6a68bb2f chore: lib/base/Event remove unused headers 2025-03-25 14:11:23 +00:00
95521c53d6 chore: cleanup lib/base/Unicode includes 2025-03-25 14:11:23 +00:00
446847f4fb chore: remove unneeded includes in lib/base/XBase 2025-03-25 14:11:23 +00:00
37bc70896b chore: remove unneeded includes in lib/base/String 2025-03-25 14:11:23 +00:00
f9c8d08ff7 chore: remove unused string::splitString 2025-03-25 13:52:49 +00:00
55c611f754 chore: remove unused string::findReplaceAll 2025-03-25 13:52:49 +00:00
541e30f406 chore: remove unused string::removeFileExt 2025-03-25 13:52:49 +00:00
4b24b5b38d chore: remove unused string::removeChar 2025-03-25 13:52:49 +00:00
df8500178b chore: remove unused CaselessCmp::cmpEqual 2025-03-25 13:52:49 +00:00
378fdae140 feat: Handle empty response from update server 2025-03-25 11:13:48 +00:00
31e95ad2dc refactor: remove unused lib/arch/mulitbyte.h 2025-03-25 08:39:05 +00:00
8b5a61f07f refactor: remove ArchFile, move only use of getInstallDir to MSWindowsWatchdog 2025-03-25 08:39:05 +00:00
516f803eb4 refactor: remove ArchFile::getbasePath for QFileInfo::fileName 2025-03-25 08:39:05 +00:00
c1a7b836ce refactor: remove unused ArchMiscWindows::processDialog 2025-03-24 12:16:39 +00:00
9530b9c6ba refactor: remove unused ArchMiscWindows::s_dialog, ArchMiscWindows::cleanup 2025-03-24 12:16:39 +00:00
9df2a2c28d refactor: remove unused ArchMiscWindows::removeDialog 2025-03-24 12:16:39 +00:00
133545d03f refactor: remove unused ArchMiscWindows::addDialog 2025-03-24 12:16:39 +00:00
75e852d95f refactor: remove unused ArchMiscWindows::readValueBinary 2025-03-24 12:16:39 +00:00
9c44653fff refactor: remove unused ArchMiscWindows::setValueBinary 2025-03-24 12:16:39 +00:00
2adee7c460 refactor: remove unused ArchMiscWindows::deleteKeyTree 2025-03-24 12:16:39 +00:00
6f6e9cddb7 refactor: remove unused ArchMiscWindows::deleteValue 2025-03-24 12:16:39 +00:00
fdd9b1bb6d refactor: remove unused ArchMiscWindows::getIcons 2025-03-24 12:16:39 +00:00
b2ff6aa938 refactor: remove unused ArchMiscWindows::setIcons 2025-03-24 12:16:39 +00:00
5e4188b2fe refactor: remove unused ArchMiscWindows::hasValue 2025-03-24 12:16:39 +00:00
a3875bf71c fix: small leak on closing of mainwindow by not parenting the menus, found via valgrind 2025-03-24 12:06:29 +00:00
f3930d9520 chore: MainWindow: use Size instead of seperate Width/Height calls in update size 2025-03-24 12:06:29 +00:00
f66a50dab7 chore: MainWindow remove unused empty layout 2025-03-24 12:06:29 +00:00
68ebc88293 ci: Sync local flatpak depends to those on flathub 2025-03-24 11:57:37 +00:00
83c8d295d4 refactor: MainWindow remove test menu 2025-03-21 12:47:46 +00:00
07219ed431 refactor: use QVariant().toBool() in place of StringUtils::StrToBool, remove StringUtils 2025-03-21 12:47:46 +00:00
da5f3c0be1 refactor: remove StringUtils::trimEnd and just use QString::trimmed 2025-03-21 12:47:46 +00:00
a23e35c522 refactor: move lib/gui/Diagnostic => apps/deskflow-gui/Diagnostic 2025-03-21 12:47:46 +00:00
eb74d8ca99 refactor: replace EnvVars.h with a new item in settings Settings::Core::UpdateUrl 2025-03-21 12:47:46 +00:00
65b6fe7ca3 refactor: move lib/gui/Constants.h => lib/common/UrlConstants.h 2025-03-21 12:47:46 +00:00
9b6615328b refactor: move lib/gui/StyleUtils.h => apps/deskflow-gui/StyleUtils.h 2025-03-21 12:47:46 +00:00
7fb87b32f5 refactor: move lib/gui/validators => apps/deskflow-gui/validators 2025-03-21 12:47:46 +00:00
8508805f5d chore: remove unused apps/deskflow-gui/ProcessorArch.h 2025-03-21 11:42:32 +00:00
385a610da2 chore: remove unused apps/deskflow-gui/QUtility 2025-03-21 11:42:32 +00:00
e00058a332 chore: remove unused MacOSXPrecomp.h 2025-03-21 11:42:32 +00:00
45b6ff19e7 chore: remove StdExcept and include stdexcept directly where needed
remove _NOEXCEPT define and just use throw()
2025-03-21 11:42:32 +00:00
1798d7e4e6 chore: remove StdOStream and include ostream directly where needed 2025-03-21 11:42:32 +00:00
854787e6b3 chore: remove StdIStream and include istream directly where needed 2025-03-21 11:42:32 +00:00
498ffe85c3 chore: remove StdSet and include set directly where needed 2025-03-21 11:42:32 +00:00
cd3f9b2e7d chore: remove StdMap and include map directly where needed 2025-03-21 11:42:32 +00:00
42b16efdb9 chore: remove StdList and include list directly where needed 2025-03-21 11:42:32 +00:00
003f87db9e chore: remove StdVector and include vector directly where needed 2025-03-21 11:42:32 +00:00
86dca27e4c chore: remove StdDeque and include deque directly where needed 2025-03-21 11:42:32 +00:00
26fa6860e4 chore: Move used code from Win32Hook to MSWindowsHook and remove Win32Hook 2025-03-21 11:42:32 +00:00
d9798a9b2b chore: remove StdPost / StdPre 2025-03-21 11:42:32 +00:00
70a2554370 refactor: VersionChecker use its own QNetworkManager not a Proxy
remove lib/gui/proxy/QNetworkManagerProxy
2025-03-21 10:16:22 +00:00
13c325eb3f chore: rename lib/common/stdvector.h => lib/common/StdVector.h 2025-03-20 13:06:45 +00:00
a3ad66dfb0 chore: rename lib/common/stdset.h => lib/common/StdSet.h 2025-03-20 13:06:45 +00:00
c9d1a50bb0 chore: rename lib/common/stdpre.h => lib/common/StdPre.h 2025-03-20 13:06:45 +00:00
cb3e516206 chore: rename lib/common/stdpost.h => lib/common/StdPost.h 2025-03-20 13:06:45 +00:00
de2e3fb9ce chore: rename lib/common/stdostream.h => lib/common/StdOStream.h 2025-03-20 13:06:45 +00:00
3bad718bb7 chore: rename lib/common/stdmap.h => lib/common/StdMap.h 2025-03-20 13:06:45 +00:00
40c10766f3 chore: rename lib/common/stdlist.h => lib/common/StdList.h 2025-03-20 13:06:45 +00:00
bf09df835d chore: rename lib/common/stdistream.h => lib/common/StdIStream.h 2025-03-20 13:06:45 +00:00
4a16804d27 chore: rename lib/common/stdexcept.h => lib/common/StdExcept.h 2025-03-20 13:06:45 +00:00
5e1aa9eb5d chore: rename lib/common/stddeque.h => lib/common/StdDeque.h 2025-03-20 13:06:45 +00:00
3c86d9dc83 chore: rename lib/common/constants.h.in => lib/common/Constants.h.in 2025-03-20 13:06:45 +00:00
099262d8ce chore: rename lib/common/common.h => lib/common/Common.h 2025-03-20 13:06:45 +00:00
d9e6ec4b70 chore: rename lib/config.h.in => lib/Config.h.in 2025-03-20 13:06:45 +00:00
d7b20fad5c chore: rename lib/platform/wayland.h => lib/platform/Wayland.h 2025-03-20 13:06:45 +00:00
6e6a88af87 chore: rename lib/platform/dfwhook.h => lib/platform/Win32Hook.h 2025-03-20 13:06:45 +00:00
ce17167248 chore: rename lib/io/filesystem => lib/io/Filesystem 2025-03-20 13:06:45 +00:00
656ad6402b chore: rename lib/gui/styles.h => lib/gui/Styles.h 2025-03-20 13:06:45 +00:00
329742a411 chore: rename lib/gui/style_utils.h => lib/gui/StyleUtils.h 2025-03-20 13:06:45 +00:00
4df982dd6f chore: rename lib/gui/string_utils.h => lib/gui/StringUtils.h 2025-03-20 13:06:45 +00:00
b1010751ba chore: rename lib/gui/messages => lib/gui/Messages 2025-03-20 13:06:45 +00:00
4238441018 chore: rename lib/gui/env_vars.h => lib/gui/EnvVars.h 2025-03-20 13:06:45 +00:00
a13bd3d0bd chore: rename lib/gui/dot_env => lib/gui/DotEnv 2025-03-20 13:06:45 +00:00
516e612282 chore: rename lib/gui/diagnostic => lib/gui/Diagnostic 2025-03-20 13:06:45 +00:00
bfd4bbd8f4 chore: rename lib/gui/constants.h => lib/gui/Constants.h 2025-03-20 13:06:45 +00:00
1c4ec6ec41 chore: remove unused lib/gui/byte_utils 2025-03-20 13:06:45 +00:00
2ef23b8206 chore: rename lib/deskflow/protocol_types => lib/deskflow/ProtocolTypes 2025-03-20 13:06:45 +00:00
ecf70f09f3 chore: rename lib/deskflow/option_types => lib/deskflow/OptionTypes 2025-03-20 13:06:45 +00:00
397c652e1c chore: rename lib/deskflow/mouse_types => lib/deskflow/MouseTypes 2025-03-20 13:06:45 +00:00
1666a30b94 chore: rename lib/deskflow/clipboard_types => lib/deskflow/ClipboardTypes 2025-03-20 13:06:45 +00:00
827d020d16 chore: rename lib/deskflow/key_types => lib/deskflow/KeyTypes 2025-03-20 13:06:45 +00:00
0138372871 chore: rename lib/base/log_outputters => lib/base/LogOutputters 2025-03-20 13:06:45 +00:00
9e78cb55aa chore: rename lib/base/finally.h => lib/base/FinalAction.h 2025-03-20 13:06:45 +00:00
38cc678ad2 chore: Settings Dialog remove unused and not implimented updateTlsRegenerateButton method from header 2025-03-19 20:29:40 +00:00
e624e6f174 fix: SetttingsDialog KeySize Combobox does not set key length
fixes #8380
2025-03-19 20:29:40 +00:00
96b50b7d1c chore: remove unused action in MainWindow 2025-03-19 20:29:40 +00:00
ffbe2cf885 refactor: use Settings for secure connect certificate path 2025-03-19 20:01:01 +00:00
b1b8720781 refactor: remove unused ARCH::concatPath 2025-03-19 20:01:01 +00:00
8609cbc20a refactor: remove unused ARCH::getUserDirectory 2025-03-19 20:01:01 +00:00
7fe862b715 refactor: remove unused ARCH::getSystemDirectory 2025-03-19 20:01:01 +00:00
377272e917 refactor: remove unused arch profileDir 2025-03-19 20:01:01 +00:00
b051c5ae60 refactor: new Setting::tlsTrustedClientssDb() method to return trusted client fingerprint db 2025-03-19 20:01:01 +00:00
38f00da704 refactor: new Setting::tlsTrustedServersDb() method to return trusted server fingerprint db 2025-03-19 20:01:01 +00:00
dcd2c62880 refactor: new Setting::tlsLocalDb() method to return local fingerprint db 2025-03-19 20:01:01 +00:00
b7f29d76c3 refactor: use new Setting::tlsDir() method to return current tlsdir where needed 2025-03-19 20:01:01 +00:00
55601debe0 refactor: use Settings in SecureListenSocket for certificate path 2025-03-19 20:01:01 +00:00
6c8eca6c41 refactor: ServerApp begin to use Settings 2025-03-19 20:01:01 +00:00
6444e2c208 chore: remove unused ARCH::getLogDirectory 2025-03-19 20:01:01 +00:00
b3ce7c41d3 chore: remove unused ARCH::setPluginDirectory Arch::getPluginDirectory 2025-03-19 20:01:01 +00:00
6963c28219 fix: typo in settings checkPeerFingerprints 2025-03-17 13:01:51 -04:00
99ed548495 fix: typo in settings invertScrollDirection key 2025-03-17 13:01:51 -04:00
d37bda6edb fix: Use correct casing for RemoteHost value in Settings.h 2025-03-17 13:01:51 -04:00
73de5e964e chore: remove unused archsystem classes 2025-03-17 16:59:43 +00:00
27451d3425 refactor: move Screensaver inhibate call for xwindows from arch to platform 2025-03-17 16:59:43 +00:00
613f3651ea refactor: move daemon settings to Settings
fixes #8353
2025-03-17 16:59:43 +00:00
0e3cee6287 feat: handle scope automaticaly
fixes #8358
2025-03-17 13:58:28 +00:00
6056e5850b chore: remove unused ConfigScopes 2025-03-17 13:58:28 +00:00
1b01a010ed refactor: remove use of configScopes from mainwindow 2025-03-17 13:58:28 +00:00
7faf76c7df refactor: remove need for configScope in diagnostic 2025-03-17 13:58:28 +00:00
55f513941b chore: remove lib/gui/config/AppConfig class 2025-03-17 13:58:28 +00:00
9e74100960 chore: remove unused appconfig from mainwindow 2025-03-17 13:58:28 +00:00
531b988dd1 refacator: remove use of app config in server settings 2025-03-17 13:58:28 +00:00
5647121dd8 refacator: allow settings to expose a proxy and emit saving 2025-03-17 13:58:28 +00:00
c1af4c3b71 fix: windows looking in deskflow/deskflow for items
fixes #8371
2025-03-17 13:47:28 +00:00
dd895ed99f Fix typos Recieve in methods
...Recieve... =>
...Receive...

Signed-off-by: Kentaro Hayashi <kenhys@xdump.org>
2025-03-17 09:38:18 -04:00
7771dcd04c Fix typos
avilable =>
available

recieve =>
receive

Signed-off-by: Kentaro Hayashi <kenhys@xdump.org>
2025-03-17 09:38:18 -04:00
d537a23fda refactor: add configure icon for Configure server button 2025-03-17 11:18:27 +00:00
f7b98465fa refactor: mainwindow move save config to a button shown only in server mode 2025-03-17 11:18:27 +00:00
ed1bf01306 fix: log Resize update the timer to 15ms 2025-03-17 11:00:02 +00:00
80f814a2da refactor: unify Coredir to SettingsPath 2025-03-17 10:44:37 +00:00
5355c9080b fix: Parse only the patch number from version check result 2025-03-14 15:30:19 +00:00
16517ca541 refactor(daemon): More helpful and less noisy logging 2025-03-14 14:19:46 +00:00
e8ea9f53ee refactor(daemon): Separate arg parsing from program control flow 2025-03-14 14:19:46 +00:00
7da8c54924 refactor(daemon): Use functional type for daemonize func 2025-03-14 14:19:46 +00:00
3683db0db9 feat(daemon): Print warning when not elevated 2025-03-14 14:19:46 +00:00
cd0aa6496a refactor(daemon): Move file log init code to init functions 2025-03-14 14:19:46 +00:00
c583252b03 refactor(daemon): Move watchdog init to init function
This also improves some logging and adds discreet try-catch blocks for each function call which improves diagnostics
2025-03-14 14:19:46 +00:00
2c433eddd7 chore(daemon): Make function const and better string compare
- Make `clearSettings` const in daemon app
- Improve readability of empty command check
2025-03-14 14:19:46 +00:00
5ee39c9b00 refactor: Settings allow override file of settings/Deskflow.conf 2025-03-14 14:10:19 +00:00
c1642b8d9d refactor: Remove unused CoreTool 2025-03-14 14:10:19 +00:00
f2c16c4432 refactor: remove paths::coreProfileDir and its single use for Settings::settingsPath() 2025-03-14 14:10:19 +00:00
37b4e4b57f refactor: coretool remove getProfileDir 2025-03-14 14:10:19 +00:00
b502a6b848 refactor: remove coretool from coreProcess 2025-03-14 14:10:19 +00:00
fe0ddf85e4 refactor: remove coretool from path.h 2025-03-14 14:10:19 +00:00
6990477504 refactor: remove coretool use from tlsCertificate 2025-03-14 14:10:19 +00:00
e05b35dda4 refactor: remove coretool from mainwindow 2025-03-14 14:10:19 +00:00
f50e4e850b refactor: QSettingsProxy use Settings paths for user and system paths 2025-03-13 13:58:25 +00:00
3cd3d7b1ff refactor: mv lib/gui/proxy/QSettingsProxy => lib/common 2025-03-13 13:58:25 +00:00
5a7284fd6a refactor: appconfig is no longer a iAppConfig subclass 2025-03-13 13:58:25 +00:00
362b2e1477 chore: slim down appconfig to only have expose the settings proxies 2025-03-13 13:58:25 +00:00
7bf716b232 chore: appconfig remove unused m_logdir 2025-03-13 13:58:25 +00:00
554178b658 chore: appconfig remove unused useinternalconfig option 2025-03-13 13:58:25 +00:00
af17b14224 refactor: move serverconfigdialog visible to Settings 2025-03-13 13:58:25 +00:00
1e9f92c93f feat: serverConfigDialog, remove need for appConfig 2025-03-13 13:58:25 +00:00
8bb325a2d2 feat: settingsdialog remove need for appconfig 2025-03-13 13:58:25 +00:00
8606dc8618 refactor: move Coremode control to Settings
newKey core/coreMode <= General/serverGroupEnabled , Genaral/clientGroupEnabled
remove core mode items from appconfig
2025-03-13 13:58:25 +00:00
6362948e15 feat: CoreProcess no longer needs AppConfig 2025-03-13 13:58:25 +00:00
085a70d5a5 refactor: move elevateMode to Settings
newKey: core/elevateMode <= General/elevateMode + General/elevateModeEnum
Remove elevate mode from appConfig
2025-03-13 13:58:25 +00:00
93abf4217b refactor: move enableServer to Settings
General/enableServer is removed, service type stored in core/processMode set it now true when server mode
remove enableServer from appConfig
2025-03-13 13:58:25 +00:00
88b0a7d2e1 refactor: move serviceenabled to deskflow settings 2025-03-13 13:58:25 +00:00
5fa70d0d0a refactor: move ProcessMode to Settings
newKey core/processMode
remove processmode from app config
2025-03-13 13:58:25 +00:00
d01c07cab8 refactor: move screenName to Settings
newkey: core/screenName <= General/screenName
remove screenName from AppConfig
2025-03-13 13:58:25 +00:00
6834862413 refactor: move logFile to Settings
newKey log/file <= General/logFilename
remove logfilename from appConfig
2025-03-13 13:58:25 +00:00
4273fe2318 refactor: move logLevel and loglevelText to Settings
newKey: log/level <= General/logLevel2
remove logLevel from AppConfig
2025-03-13 13:58:25 +00:00
266a4a5edf refactor: move logToFile to Settings
newkey: log/logToFile <= General/logToFile
remove logToFile from AppConfig
2025-03-13 13:58:25 +00:00
5e6381c88a refactor: move port to Settigns
newkey: core/port <= General/port
remove port from AppConfig
2025-03-13 13:58:25 +00:00
9aa1d6b79d refactor: move networkinterface to Settings
newkey: core/interface <= General/interface
remove networkinterface from appconfig
2025-03-13 13:58:25 +00:00
d45d6baacb refactor: move langageSync to Settings
newkey: client/languageSync <= General/languageSync
removed languageSync from appconfig
2025-03-13 13:58:25 +00:00
a887ac066c refactor: move invertscrolling to Settings
newkey: client/invertscrolldirection <= General/invertScrollDirection
remove invertScrollDirection from AppConfig
2025-03-13 13:58:25 +00:00
787a48424e feat: remove need for AppConfig from serverConnection 2025-03-13 13:58:25 +00:00
b20d6361d6 refactor: move external configfile to Settings
newkey: server/externalConfigFile <= General/configFile
remove configFile from AppConfig
2025-03-13 13:58:25 +00:00
b833ca7a45 refactor: move appconfig useExternal config to Settings
newkey: server/externalConfig <= General/useExternalConfig
remove useExternalConfig from appConfig
2025-03-13 13:58:25 +00:00
43eab1f04c feat: remove need for AppConfig in Client Connection 2025-03-13 13:58:25 +00:00
dc9e104f8c refactor: move serverHostname to Settings
newKey: client/remoteHost <= General/serverHostName
remove serverHostname from AppConfig
2025-03-13 13:58:25 +00:00
f456aab196 refactor: move serverBinary to Settings
newkey: server/binary <= General/coreServerBinary
remove coreServer from AppConfig
2025-03-13 13:58:25 +00:00
de3b9d8e2e refactor: move clientBinary to Settings
newkey: client/binary <= General/coreClientBinary
remove coreBinary from AppConfig
2025-03-13 13:58:25 +00:00
b7960eecb4 refactor: move preventSleep to Settings
newkey: core/preventSleep <= General/preventSleep
remove prevent sleep from app config
2025-03-13 13:58:25 +00:00
03f142977f refactor: move lastVersion to Settings
newkey: core/lastVersion <= General/lastVersion
Remove from app config
2025-03-13 13:58:25 +00:00
5360fb3c89 refactor: move requirepeerchecking to Settings
newkey: security/checkpeerfingerprints <= General/requireClientCerts
remove requireClientCerts from appconfig
2025-03-13 13:58:25 +00:00
4eb7ea3491 feat: tlsUtility no longer needs AppConfig, tlsUtility takes a parent object 2025-03-13 13:58:25 +00:00
5642879a21 chore: connect up Settings changed signal to mainwindow 2025-03-13 13:58:25 +00:00
737328d7b0 refactor: move TlsCertPath to Settings
newkey: security/certPath <= General/tlsCertPath
remove tlsCertPath from appConfig
2025-03-13 13:58:25 +00:00
bee0f84556 refactor: move tlsKeyLength to Settings
newkey: security/keySize <= General/tlsKeyLength
removed tlsKeyLength from appconfig
2025-03-13 13:58:25 +00:00
2721de220a refactor: move tlsEnabled to Settings
newkey: security/tlsEnabled <= General/cryptoEnabled
remove tlsEnabled from appconfig
2025-03-13 13:58:25 +00:00
4c6195cc5d refactor: move windowgeometry to Settings
newkey: gui/windowGeometry <= General/mainWindowSize and General/mainWindowPosition
mainWindowSize and Position remove from `AppConfig`
2025-03-13 13:58:25 +00:00
1e46bd2727 refactor: move CloseReminder setting to Settings
newkeyL gui/closeReminder <= General/showCloseReminder
remove closeReminder from `AppConfig`
2025-03-13 13:58:25 +00:00
54ecdad101 refactor: move startedBefore settings to Settings
newkey core/startedBefore <= General/startedBefore
startedBefore has been removed from `AppConfig`
2025-03-13 13:58:25 +00:00
51a749b109 refactor: move closeToTray setting to Settings
newkey: gui/closeToTray <= General/closeToTray
remove closeToTray from `AppConfig`
2025-03-13 13:58:25 +00:00
788f6c3eb2 refactor: Move update check setting to Settings
newkey: gui/enableUpdateCheck <= General/enableUpdateCheck
remove update check from `AppConfig`
2025-03-13 13:58:25 +00:00
e01c595071 refactor move Tray icon setting to Settings
newKey: gui/symbolicTrayIcon <= General/colorfulIcon
the colorfulIcon settings has been removed from `AppConfig`
2025-03-13 13:58:25 +00:00
bcd90434a2 refactor: move autohide setting to Settings
newkey: gui/autoHide <= General/autoHide
auto hide has been removed from `AppConfig`
2025-03-13 13:58:25 +00:00
698fd3f83c refactor: move logExpanded to Settings
newkey: gui/logExpanded <= General/logExpanded
remove logExpanded AppConfig
2025-03-13 13:58:25 +00:00
2a53d4f187 refactor: unittest use Settings 2025-03-13 13:58:25 +00:00
53487e757b feat: New Settings class 2025-03-13 13:58:25 +00:00
ef315183f3 chore: rm unused ARCH:getPlatform 2025-03-13 12:25:25 +00:00
8b1e8dfd9f chore: rm unused CoreTool::getArch 2025-03-13 12:25:25 +00:00
b73aceee7d chore: remove unused Arch::isWOW64 method 2025-03-13 12:25:25 +00:00
3b811a1bd0 chore: remove unused Arch::getOsName 2025-03-13 12:25:25 +00:00
a099276e4e refactor: Move Windows SendSAS call to new thread
Moving the SAS event wait and SendSAS call prevents blocking the main thread allowing for more responsive watchdog (e.g. faster restart Core client/server on session switch).
2025-03-12 12:18:32 -04:00
38f8159e9d refactor: Update global event names to use project proper name 2025-03-12 12:18:32 -04:00
87fb06781c refactor: Change shutdownExistingProcesses to static in MSWindowsWatchdog 2025-03-12 12:18:32 -04:00
b9017de881 refactor: Use simpler lock_guard for Windows daemon set process config 2025-03-12 12:18:32 -04:00
24d1d4e620 refactor: Simplify lock_guard usage by removing explicit mutex type 2025-03-12 12:18:32 -04:00
3bcc1e11ed chore: Move Windows event constants to constants file 2025-03-12 12:18:32 -04:00
d26c75a784 refactor: Move Windows specific constants to #ifdef 2025-03-12 12:18:32 -04:00
5b091dee56 refactor: Rename SAS IPC event name to be more specific 2025-03-12 12:18:32 -04:00
3344644d2e chore: Remove old ctrl+alt+del PostMessage call (for Windows XP and below) 2025-03-12 12:18:32 -04:00
39e7f60c5a build: Get minor MSVC version from host registry 2025-03-12 08:04:16 -04:00
57d1e42eca feat: Check MSVC redist version in WiX installer 2025-03-12 08:04:16 -04:00
cd45164e40 chore: Clean up unused definitions and includes in ArchMiscWindows 2025-03-11 16:38:12 +00:00
0ed583a7fe refactor: Bootstrap logging for Windows runtime check 2025-03-11 16:38:12 +00:00
751c869435 feat: Use EnumProcessModules to search loaded modules) 2025-03-11 16:38:12 +00:00
4cfeadf0be fix: Remove redundant check in runtime DLL condition
For some reason `&& hModule` was added to the end of the condition, which totally breaks the logic for when the DLL is not found.
2025-03-11 16:38:12 +00:00
402baf3bde docs: Add doc comments for ArchMiscWindows 2025-03-11 16:38:12 +00:00
d199130b43 chore: Replace local include with standard library include for set 2025-03-11 16:38:12 +00:00
758c1044b5 ci: pin lint action to use clang-format 20.1.0 2025-03-11 10:57:51 -04:00
6e8952c8a0 chore: update formating for clang-format 20.1.0 2025-03-11 10:57:51 -04:00
bb38ad0766 chore: Rename TLS constants for consistency 2025-03-10 18:57:29 +00:00
bc96ddebdd Release v1.20.1
Some checks are pending
Continuous Integration / pr-comment-flags (push) Blocked by required conditions
Continuous Integration / ci-passed (push) Blocked by required conditions
Continuous Integration / test-results (push) Blocked by required conditions
Continuous Integration / reuse-lint (push) Waiting to run
Continuous Integration / lint-check (push) Blocked by required conditions
Continuous Integration / analyse-valgrind (push) Blocked by required conditions
Continuous Integration / analyse-sonarcloud (push) Blocked by required conditions
Continuous Integration / macos-14-arm64 (push) Blocked by required conditions
Continuous Integration / macos-13-x64 (push) Blocked by required conditions
Continuous Integration / archlinux-x86_84 (push) Blocked by required conditions
Continuous Integration / debian-13-arm64 (push) Blocked by required conditions
Continuous Integration / debian-13-x86_64 (push) Blocked by required conditions
Continuous Integration / fedora-40-arm64 (push) Blocked by required conditions
Continuous Integration / fedora-40-x86_84 (push) Blocked by required conditions
Continuous Integration / fedora-41-arm64 (push) Blocked by required conditions
Continuous Integration / fedora-41-x86_64 (push) Blocked by required conditions
Continuous Integration / opensuse-arm64 (push) Blocked by required conditions
Continuous Integration / opensuse-x86_84 (push) Blocked by required conditions
Continuous Integration / ubuntu-25.04-arm64 (push) Blocked by required conditions
Continuous Integration / ubuntu-25.04-x86_64 (push) Blocked by required conditions
Continuous Integration / windows-2022-x64 (push) Blocked by required conditions
Continuous Integration / unix-freebsd (push) Blocked by required conditions
Continuous Integration / flatpak-aarch64 (push) Blocked by required conditions
Continuous Integration / flatpak-x86_64 (push) Blocked by required conditions
Continuous Integration / release (push) Blocked by required conditions
Continuous Integration / winget-publish (push) Blocked by required conditions
2025-03-07 17:00:10 +00:00
80606ef040 fix: Add check for Visual C++ Redistributable installation in WiX patch 2025-03-07 16:14:49 +00:00
836d9b9a2b chore: Disable action on 3rd Windows daemon failure
Indefinitely restarting the daemon is annoying as it makes problems harder to diagnose.
2025-03-07 16:14:49 +00:00
f2063f9e05 fix: Allow compiling on VS2019 for contributors with old IDEs 2025-03-07 09:26:43 -05:00
a74d792b5b fix: mac os icon mask
fixes #8310
2025-03-07 13:30:18 +00:00
256ba2411b refactor: move qt automoc, uic and rcc to a single place in Librarires.cmake 2025-03-07 13:16:09 +00:00
0a23e62093 refactor: replace version.h with kDisplayVersion const 2025-03-07 13:16:09 +00:00
e38a8e6b15 build: build lib/common as static library 2025-03-07 13:16:09 +00:00
6f022ff700 chore: Format XML for better readability in wix-patch.xml 2025-03-07 07:39:36 -05:00
265c2c2a2c chore: Fixed Windows service description in wix-patch.xml 2025-03-07 07:39:36 -05:00
1594b8e760 docs: Make Windows MSVC redist requirement stand out 2025-03-07 07:16:46 -05:00
029cb8fc0b build: do not ship vc msm file, link the redist in the readme 2025-03-06 19:17:53 +00:00
8e236e7e5c build: win32 do not bind vc++ when building 2025-03-06 19:17:53 +00:00
38b2798bb7 chore: remove unused common/stdfstream 2025-03-06 19:17:53 +00:00
d580dfba57 chore: remove unused common/stdsstream 2025-03-06 19:17:53 +00:00
da4237f349 chore: rm unused common/stdbitset.h 2025-03-06 19:17:53 +00:00
a78d1acc71 chore: remove unset variable in arch lib linking 2025-03-06 19:17:53 +00:00
24d5b26da2 build: remove extra private link to openssl::applink 2025-03-06 19:17:53 +00:00
9c81f1c045 build: moving find_package for openssl to net/CMakeLists.txt 2025-03-06 19:17:53 +00:00
899a49d09a build: win32 Remove unneeded python dependency 2025-03-06 19:17:53 +00:00
3a4bf35e22 refactor: Remove unneeed find_packate calls for Qt Components. Qt is found by Libaraies.cmake and accesable to all items in the src folder 2025-03-06 19:17:53 +00:00
495331108b fix: Guard MSVC runtime version depending on compiler version 2025-03-06 10:45:57 -05:00
a7ce936d68 fix: Remove duplicate includes in deskflow-daemon.cpp 2025-03-05 13:59:26 -05:00
f6ccd2a25b feat: Show Git SHA in Windows daemon version number 2025-03-05 13:59:26 -05:00
5d310be807 chore: remove obsolete runWizard setting 2025-03-05 18:48:07 +00:00
bd674f546b fix: Show console on Windows for daemon -h and -f args 2025-03-05 18:04:07 +00:00
cc821f750d fix: Remove unnecessary private access modifier from DaemonApp.h 2025-03-05 18:04:07 +00:00
2485e993a4 chore: Improve bin RC and service description for Windows daemon 2025-03-04 13:36:47 +00:00
b5d12b8aa5 fix: Move version print line after file outputter is created 2025-03-04 13:36:47 +00:00
3ef5793beb Release 1.20.0
Some checks are pending
Continuous Integration / pr-comment-flags (push) Blocked by required conditions
Continuous Integration / ci-passed (push) Blocked by required conditions
Continuous Integration / test-results (push) Blocked by required conditions
Continuous Integration / reuse-lint (push) Waiting to run
Continuous Integration / lint-check (push) Blocked by required conditions
Continuous Integration / analyse-valgrind (push) Blocked by required conditions
Continuous Integration / analyse-sonarcloud (push) Blocked by required conditions
Continuous Integration / macos-14-arm64 (push) Blocked by required conditions
Continuous Integration / macos-13-x64 (push) Blocked by required conditions
Continuous Integration / archlinux-x86_84 (push) Blocked by required conditions
Continuous Integration / debian-13-arm64 (push) Blocked by required conditions
Continuous Integration / debian-13-x86_64 (push) Blocked by required conditions
Continuous Integration / fedora-40-arm64 (push) Blocked by required conditions
Continuous Integration / fedora-40-x86_84 (push) Blocked by required conditions
Continuous Integration / fedora-41-arm64 (push) Blocked by required conditions
Continuous Integration / fedora-41-x86_64 (push) Blocked by required conditions
Continuous Integration / opensuse-arm64 (push) Blocked by required conditions
Continuous Integration / opensuse-x86_84 (push) Blocked by required conditions
Continuous Integration / ubuntu-25.04-arm64 (push) Blocked by required conditions
Continuous Integration / ubuntu-25.04-x86_64 (push) Blocked by required conditions
Continuous Integration / windows-2022-x64 (push) Blocked by required conditions
Continuous Integration / unix-freebsd (push) Blocked by required conditions
Continuous Integration / flatpak-aarch64 (push) Blocked by required conditions
Continuous Integration / flatpak-x86_64 (push) Blocked by required conditions
Continuous Integration / release (push) Blocked by required conditions
Continuous Integration / winget-publish (push) Blocked by required conditions
2025-03-03 16:37:24 -05:00
b64942e3a3 fix: Delete HKEY_LOCAL_MACHINE\SOFTWARE\Deskflow when clearing settings 2025-03-03 15:05:09 -05:00
9de268d293 chore: Reduce noisy log lines related to fingerprints not required by GUI 2025-03-03 13:31:18 -05:00
1f08cafffe fix: Use string data instead of path data for fingerprint logging 2025-03-03 13:31:18 -05:00
9eeda33293 fix: do not reset screenCorners on startup
fixes #8276
2025-03-03 17:26:48 +00:00
17bedb1072 fix: Correct parsing of screen corners
fixes #8231
2025-03-03 17:26:48 +00:00
8cca8440b7 fixes #7695 adjust the serverconfig clipboard max size label 2025-03-03 17:16:24 +00:00
b2dadba6fa refactor: serverdialog, use maximum for spinbox horizontal sizepolicy 2025-03-03 17:16:24 +00:00
4f057d706f refactor: serverconfigdialog, use suffix for spinboxes 2025-03-03 17:16:24 +00:00
5e69657176 chore: update windows rc descriptions fixes #8270 2025-03-03 16:32:08 +00:00
2638cce0c0 fix: Do stop the client on fingerprint dialog
fixes #8267
2025-03-03 16:16:57 +00:00
5eac984757 chore: Add mutex for process state management in MSWindowsWatchdog 2025-03-03 14:33:46 +00:00
1bd3f5060e refactor: Add Doxygen comments for MSWindowsWatchdog member functions 2025-03-03 14:33:46 +00:00
55b4cffd3f chore: Remove unused setStartupInfo member function from MSWindowsWatchdog 2025-03-03 14:33:46 +00:00
51ec36f23d chore: Set default values for m_foreground and m_activeDesktop MSWindowsWatchdog 2025-03-03 14:33:46 +00:00
58cb2b76de chore: Remove unused include in MSWindowsWatchdog.h 2025-03-03 14:33:46 +00:00
8d4a715b1c chore: Make MSWindowsWatchdog constructor explicit 2025-03-03 14:33:46 +00:00
997d4a9473 chore: Move free functions to top of Windows watchdog source 2025-03-03 14:33:46 +00:00
0f11b61576 chore: Reduce complexity of outputLoop in Windows watchdog 2025-03-03 14:33:46 +00:00
98aba612c0 chore: Improve loop stop log line in Windows watchdog 2025-03-03 14:33:46 +00:00
b0547f6713 chore: Use ref to const for openProcessForKill arg in Windows watchdog 2025-03-03 14:33:46 +00:00
40fefb9369 chore: Use string_view for MSWindowsWatchdog::setProcessConfig 2025-03-03 14:33:46 +00:00
48e1c43a01 chore: Add cspell words for Windows watchdog 2025-03-03 14:33:46 +00:00
d8d022e9fe chore: Scope constants in Windows watchdog 2025-03-03 14:33:46 +00:00
84194cf5ef chore: Use default init instead of ctor init Windows watchdog 2025-03-03 14:33:46 +00:00
cd5ba1382d chore: Clean up shutdownExistingProcesses (unused var and use if-init) in Windows watchdog 2025-03-03 14:33:46 +00:00
c84b4e3f00 refactor: Reduce complexity of mainLoop in Windows watchdog 2025-03-03 14:33:46 +00:00
be8029deb6 chore: Remove unused g_activeDesktop from Windows watchdog 2025-03-03 14:33:46 +00:00
dbb9b3bf5a chore: Remove unused trimDesktopName from Windows watchdog 2025-03-03 14:33:46 +00:00
32bf9aa02a chore: Use const auto instead of enum for kOutputBufferSize in Windows watchdog 2025-03-03 14:33:46 +00:00
0891afdd63 chore: Use nullptr instead of NULL in Windows watchdog 2025-03-03 14:33:46 +00:00
f7ab6aba58 chore: Remove unused includes from Windows watchdog 2025-03-03 14:33:46 +00:00
74e8a63dcd chore: Remove unused getCommand from Windows watchdog 2025-03-03 14:33:46 +00:00
475172597a chore: Remove unused m_ready from Windows watchdog 2025-03-03 14:33:46 +00:00
8c30ed7a59 chore: Remove unused m_autoDetectCommand and ctor arg from Windows watchdog 2025-03-03 14:33:46 +00:00
44f72a29e9 refactor: Use state machine for Windows daemon watchdog 2025-03-03 14:33:46 +00:00
4db77ba2f7 chore: Improve function name for setting daemon process config 2025-03-03 14:33:46 +00:00
5e29fa93ac chore: Quieten noisy daemon IPC server read log messages 2025-03-03 14:33:46 +00:00
ce8c262a9c build: mac os rpath for client, server and core 2025-02-28 23:04:33 +00:00
3b30065ec3 chore: Prevent static analysis from complaining about new (idiomatic Qt) 2025-02-28 17:58:16 +00:00
54483f26ba refactor: Use member instead of passing param in daemon main loop 2025-02-28 17:58:16 +00:00
13ed447a93 chore: Move daemon constants to constants file 2025-02-28 17:58:16 +00:00
74812fbf75 chore: Remove dead code, function isServerCommandLine from daemon 2025-02-28 17:58:16 +00:00
bdf5a0f352 chore: Clearer naming for static daemon loop functions 2025-02-28 17:58:16 +00:00
b425b43801 fix: Use desktop process mode for core process tests rather than random value 2025-02-28 17:58:16 +00:00
f0c60f5ca9 chore: Improve logging for pipe readers in Windows watchdog 2025-02-28 17:58:16 +00:00
b2ca9bc17b chore: Remove dead code from --debug-service-wait arg 2025-02-28 17:58:16 +00:00
f46474c9f2 refactor: Use WaitForSingleObject instead of sleep for Windows process shutdown 2025-02-28 17:58:16 +00:00
a99d408be1 chore: Improve logging related to Windows daemon start/stop/install/uninstall 2025-02-28 17:58:16 +00:00
19c41e2ac5 fix: Improve Windows daemon stop speed by using non-blocking pipes and shorter sleep times 2025-02-28 17:58:16 +00:00
890fd61e6e refactor: Move ownership of Windows daemon file log outputter to Log 2025-02-28 17:58:16 +00:00
1c42552b3b refactor: Begin logging to file as soon as Windows daemon starts 2025-02-28 17:58:16 +00:00
a6956b9516 refactor: Improve Daemon uninstall exception flow 2025-02-28 17:58:16 +00:00
5a7f6bd1c0 refactor: Remove old Windows TCP IPC implementation (replaced by Qt equivalent) 2025-02-28 17:58:16 +00:00
a3b0ec28fc refactor: Improve logging message for process backoff and reset failure count when no command is set 2025-02-28 17:58:16 +00:00
fa1ab27ee9 refactor: Clear watchdog command setting to prevent persistence on daemon restart 2025-02-28 17:58:16 +00:00
e07a2efbcc refactor: Implement Windows event loop in AppUtilWindows for graceful shutdown handling 2025-02-28 17:58:16 +00:00
e967944c1e fix: Strip line endings for Windows daemon file logging
Windows file logger and `OutputDebugString` already add new lines, so remove the ones added by the Core.
2025-02-28 17:58:16 +00:00
389028ccf9 refactor: Connect socket events in ctor for daemon IPC client 2025-02-28 17:58:16 +00:00
dc6383d593 refactor: Properly disconnect and clean up previous daemon file tail on connection 2025-02-28 17:58:16 +00:00
1c7adf5add refactor: Allocate daemon app and it's thread on stack to reduce memory leak risk 2025-02-28 17:58:16 +00:00
5743db3040 feat: Apply log level on IPC connection 2025-02-28 17:58:16 +00:00
5733541b2a feat: Tail daemon log file instead of using IPC log outputter 2025-02-28 17:58:16 +00:00
5980fb741b refactor: Move daemon process stop command to new Qt IPC 2025-02-28 17:58:16 +00:00
7c672b06d8 refactor: Update IPC server to handle log level and elevate mode changes 2025-02-28 17:58:16 +00:00
53038760de refactor: Use core mode for daemon install on Windows 2025-02-28 17:58:16 +00:00
d6228416a1 refactor: Send log level to daemon over IPC instead of when sending command 2025-02-28 17:58:16 +00:00
80cc323f5a refactor: Improve logging and error handling for SendSAS function in Windows watchdog 2025-02-28 17:58:16 +00:00
90e63e2e9e refactor: Exclude current process when killing existing process from Windows daemon 2025-02-28 17:58:16 +00:00
24c57e46e2 refactor: Run legacy daemon loop in thread 2025-02-28 17:58:16 +00:00
e72faf1446 feat: Connect to daemon IPC on start request 2025-02-28 17:58:16 +00:00
c1d7474700 feat: Restart process from daemon through new Qt IPC impl 2025-02-28 17:58:16 +00:00
0d2d9f385d feat: Implement basic IPC connection between Daemon and GUI 2025-02-28 17:58:16 +00:00
c0094554b1 feat: Convert daemon to Qt app and introduce Qt local server 2025-02-28 17:58:16 +00:00
95603c82ec refactor: Improve logging and args for Windows daemon install/uninstall 2025-02-28 17:58:16 +00:00
8debc1ea7f chore: SettingsDialog remove set defaults from ui file 2025-02-28 16:51:33 +00:00
b4f703562d chore: Settings Dialog do not open with the checkbox for peer certificates having active focus 2025-02-28 16:51:33 +00:00
34b61cc8cd fix: #8259 track a client and server list
fixes 8259
2025-02-28 13:17:26 +00:00
551e0211ac ci: don't send temp screenshots to flathub, fix lint failure for not doing so 2025-02-28 13:06:32 +00:00
0fc5368253 fix: Prevent access violation by moving events, arch, and log objects to top of stack in Windows daemon
This is how we do it in the server/client apps, so it makes sense to mirror the same pattern.
2025-02-28 12:57:15 +00:00
383b39636e chore: Remove dead code; unused outputter param on runInner functions 2025-02-28 12:57:15 +00:00
f56a3ba305 refactor: Rename param for Log::insert to make adoption clearer 2025-02-28 12:57:15 +00:00
0bca094fce chore: Explain use of new for all log outputters 2025-02-28 12:57:15 +00:00
220711c2d7 fix: Only use MS debug outputter when the process is daemonized 2025-02-28 12:57:15 +00:00
66acf9038b fix: Solve double-free by letting Log adopt FileLogOutputter in Windows daemon 2025-02-28 12:57:15 +00:00
aa5a704131 chore: settings dialog remove unused includes 2025-02-27 15:17:13 +00:00
bae494476b refactor: Settings Dialog, update security layout 2025-02-27 15:17:13 +00:00
3ae2de52f4 refactor: SettingsDialog set icons in ui where possible 2025-02-27 15:17:13 +00:00
088d69fec8 refactor: SettingsDialog, use standard object names 2025-02-27 15:17:13 +00:00
63744ddbd6 refactor: settingsdialog, remove autoconnect slots 2025-02-27 15:17:13 +00:00
2d04e0be4d refactor: SettingDialog do not connect from inside the ui file 2025-02-27 15:17:13 +00:00
4f2ef7174a refactor: do not stop sever on new client fingerprint, track the last print we checked and if we are chekcing it do not show a new box 2025-02-27 15:07:50 +00:00
1003de21b5 refactor: do not show error if the fingerprint database is not created yet 2025-02-27 15:07:50 +00:00
b3866b69b2 chore: Fix order of MainWindow ctor init list to match header 2025-02-27 15:07:50 +00:00
9bd7fce45c refactor: MainWindow: Update name change 2025-02-27 13:41:55 +00:00
f0d33ce9de chore: aboutDialog remove unused static strings 2025-02-27 13:32:24 +00:00
07bf6de093 chore: add icon credit to about box 2025-02-27 13:32:24 +00:00
9c463a557a docs: Expand version field on bug_report.yml 2025-02-27 05:12:43 -08:00
566d716feb chore: Remove unused config lines from sonar-project.properties 2025-02-27 04:55:13 -08:00
e7e518d76e refactor: don't quote debug line 2025-02-26 11:52:03 +00:00
08be9fa33f chore: use a style for the flat buttons 2025-02-26 11:52:03 +00:00
72d27c70e0 refactor: gui::styles use QStringLiteral 2025-02-26 11:52:03 +00:00
6de1920d88 chore: remove bufferedLogView 2025-02-25 06:53:57 -08:00
2d3f64f662 chore: cleanup additional item missed in when removing the legacy tray icon 2025-02-25 06:53:57 -08:00
193c28af53 fix: settings dialog can have tls options enabled when they should not be leading to a case where tls gen fails as it not enabled fixes 7883 2025-02-25 06:34:47 -08:00
5b54849fd6 refactor: mainwindow simplify the mode selection UI 2025-02-25 14:18:32 +00:00
b7eb5c467b feat: Remove Inverse Connections Option 2025-02-25 14:18:32 +00:00
f9b6bcc950 refactor: mv net/InverseSockets/SslLogger => net/SslLogger 2025-02-25 14:18:32 +00:00
5d5e32a676 refactor: remove setupwizard 2025-02-25 13:21:39 +00:00
d52939a3fc fix: raise mainwindow on update check dialog
fixes #8234
2025-02-25 13:11:35 +00:00
173e521004 ci: Set timeout for windows job to 30 minutes 2025-02-25 04:07:10 -08:00
038c8af949 ci: use pkg list for vcpkg on ci builds 2025-02-25 04:07:10 -08:00
9f68514577 ci: use Qt install action for windows 2025-02-25 04:07:10 -08:00
d5624ba65e ci: use Qt 6.8.2 for Qt action installs
update vcpkg manifest to newest vcpkg release
2025-02-25 04:07:10 -08:00
d5ee57f349 build: vcpkg rm nolonger used openssl tools 2025-02-25 04:07:10 -08:00
6a08305338 fix: log expanded on start up and windows no resizeable 2025-02-20 22:26:21 +00:00
05ed47be2e fix: server resets to listing state with no clients connected 2025-02-20 21:16:48 +00:00
29d04ea8e0 chore: update lib/gui/constants to use QStringLiterals 2025-02-20 21:16:48 +00:00
ab118a3aa3 chore: remove unused style items 2025-02-20 21:16:48 +00:00
10e5a305bb refactor: remove redundant client / server staus labels, the status label provides this info already 2025-02-20 21:16:48 +00:00
e9c8965066 refactor: mainwindow move tls version to securty tooltip 2025-02-20 21:16:48 +00:00
53d2b3bd2e refactor: MainWindow move update info to status tray 2025-02-20 21:16:48 +00:00
d4cc66a9f9 refactor: move Tls Label to status bar 2025-02-20 21:16:48 +00:00
18cc8565f9 refactor: mainwindow use status bar for status items 2025-02-20 21:16:48 +00:00
caee2b149a chore: move version check log to debug, fixes #8224 2025-02-20 11:15:58 +00:00
e808eed413 refactor: Improve Windows daemon failure backoff for faster client restarts on first fail 2025-02-19 18:23:10 +00:00
16c57d7960 refactor: Improve log message related to desk switch on Windows 2025-02-19 18:23:10 +00:00
200d32db80 chore: Improve log message for leave screen warning on Windows 2025-02-19 18:23:10 +00:00
2322f312a9 refactor: Improve logging for errors when setting/getting cursor pos on Windows 2025-02-19 18:23:10 +00:00
09c157f9e1 fix: Remove --exit-pause to stop "press any key to exit..." showing when Windows daemon kills server/client 2025-02-19 18:23:10 +00:00
c9a360a144 fix: Restore active desktop name check in Windows daemon
- Use `PIPE_NOWAIT` to skip empty stderr output on process output reading from Windows daemon watchdog
- Use `CreateProcess` result to determine when to call `CloseHandle` in Windows daemon watchdog
- Trim output from active desktop process in Windows daemon watchdog
- Improve error logging in Windows daemon watchdog
2025-02-19 18:23:10 +00:00
3de2c1bcf0 fix: missing reuse info for SECURITY.md file 2025-02-18 08:04:26 -05:00
73292f05c8 docs: Create GitHub recommended security policy file 2025-02-18 07:57:08 -05:00
48407d7f8f refactor: simplify MainWindow::checkFingerprints 2025-02-18 12:12:41 +00:00
83c190c385 refactor: use better name to describe for the tlsEnabled var in messages , and correct the name in virtual method 2025-02-18 12:12:41 +00:00
ad79ba907d refactor: Mainwindow localFingerPrintDb => localFingerprintDb 2025-02-18 12:12:41 +00:00
9294f2a026 refactor: use a function to get the trustedFingerprintDb 2025-02-18 12:12:41 +00:00
bfb64f0653 fix: Generate TLS certificate before generating TLS fingerprint 2025-02-17 11:55:28 -05:00
6f66fe767f fix: inabliity to resize when first opening if log open on startup 2025-02-17 11:55:28 -05:00
63846292ff refactor: update tooltips for security icon
add check when appTls State Changes
2025-02-17 11:55:28 -05:00
2f8b78e2a6 refactor: new private MainWindow method localhostFingerprintDb 2025-02-17 11:55:28 -05:00
8d0491f1ad refactor: narrow use of stdString in mainwindow 2025-02-17 11:55:28 -05:00
79dc858446 chore: modify client trying to connect dialog to inform user the new client needs to be put in the layout when both tls is enabled and peer key checking is enabled , otherwise show the old dialog asking to allow the client to connect 2025-02-17 16:26:29 +00:00
0667f5de73 refactor: allow the fingerprint dialog to show local keys and remote if needed 2025-02-17 16:26:29 +00:00
e51956e2c7 feat: Client ID verification
based on barrier: 229abab
  Fixes: CVE-2021-42072, CVE-2021-42073
2025-02-17 16:26:29 +00:00
60c7e512f2 refactor: use enum for secure sockets
based on barrier: 57769cf
2025-02-17 16:26:29 +00:00
e996471e37 refactor: use enum for connections security level
based on barrier: 5c7d719
2025-02-17 16:26:29 +00:00
638349b48a feat: add config for client cert required
based on barrier: 8bc280e0
2025-02-17 16:26:29 +00:00
3e7b14cbd4 fix: Attempt to load SSL certs when connecting
based on barrier: c0ce8937, 4d73ed9f
2025-02-17 16:26:29 +00:00
3abf38aff9 ci: Improve flatpak builder to include arm flatpaks, linting and validation check 2025-02-17 15:38:19 +00:00
12a56f4df0 chore: add updated screenshots from deskflow.org 2025-02-17 15:38:19 +00:00
9bd5fe9afb chore: Replace deprecated developer_name tag with developer block 2025-02-17 15:38:19 +00:00
6ff5d2d5d3 fix: Update local fingerprint label after fingerprint regeneration 2025-02-14 09:42:47 -05:00
c04610c561 chore: use fancy-checkout v1 tag 2025-02-14 13:46:44 +00:00
67e2f56724 chore: update daemon description and icon 2025-02-14 12:44:29 +00:00
5288546231 refactor: use const for tlsDb expected size 2025-02-14 12:44:29 +00:00
d8e311fe59 fix: only regenerate the tls certificate if tls is enabled and we do not already have a certificate 2025-02-14 12:44:29 +00:00
500067a778 fix: generate cert if tls is on and its not found
fixes #8191
  fixes #8192
2025-02-14 12:44:29 +00:00
3c12915fd3 fix: Security icons showing with fresh install
fixes #8170
2025-02-14 12:20:48 +00:00
eb19547b45 refactor: mainwindow force regen of local prints if tls is enabled with a sha256 key 2025-02-12 13:41:45 +00:00
65eed64f04 refactor: new fingerprintdialog 2025-02-12 13:41:45 +00:00
fbaa0a8433 feat: use sha256
based-on: a428b61c7d
 based-on: b7757fbd68
 based-on: a238b27879
2025-02-12 13:41:45 +00:00
743c3feef3 refactor: use FingerprintData for fingerprints
based-on: 7cced74119
2025-02-12 13:41:45 +00:00
d0d5182425 refactor: use new Fingerprint database
based-on: 50534ecb43
   based-on: be8ba0d132
2025-02-12 13:41:45 +00:00
298b1047c4 refactor: add ssl consts into common/constansts 2025-02-12 13:41:45 +00:00
e257501072 chore: add Fingerprint Db Tests 2025-02-12 13:41:45 +00:00
aaa64e986e feat!: Add support for FingerPrintDatabase 2025-02-12 13:41:45 +00:00
7d79a4d729 chore: TlsCertificate, remove unused items 2025-02-12 13:41:45 +00:00
2058519e57 refactor: generate Certs using secureUtils method 2025-02-12 13:41:45 +00:00
5a71d63923 refactor: secureutils add pemFileCertFingerprint 2025-02-12 13:41:45 +00:00
fb32f141cc refactor: secureUtils fingerprint method
Signed-off-by: sithlord48 <sithlord48@gmail.com>
2025-02-12 13:41:45 +00:00
39da277ead refactor: use vector<uint8_t> for keys 2025-02-12 13:41:45 +00:00
a98f2d745e refactor: move SecureSocket::formatFingerprint -> SecureUtils std::string formatSSLFingerprint
based on 0e406d4918
         9d8e1faf59
         b793675ef8
2025-02-12 13:41:45 +00:00
524c3b0e7b refactor: Change log level for active desktop query to debug 2025-02-11 13:06:51 +00:00
e420b9b986 chore: small cmake cleanup
lib/platform: use the REQUIRED_QT_VERSION when looking for Qt Dbus module
  lib/deskflow: rm extra space in cmake file
2025-02-11 13:06:51 +00:00
cb14d158cc refactor: Cleanup core binary help text 2025-02-11 13:06:51 +00:00
ac6809d40f refactor: Rename core process start/stop function names 2025-02-11 13:06:51 +00:00
92603df93d fix: Out of order m_trayIcon in ctor init,
chore: remove unused m_btnCancel
2025-02-11 13:06:51 +00:00
a5f28616f4 chore: df-gui mainwindow directly connect more methods without intermediarty methods 2025-02-11 13:06:51 +00:00
cad1243d75 chore: windows, set icon for deskflow-core 2025-02-11 13:06:51 +00:00
610786ad2e chore: clean up extra empty lines 2025-02-11 13:06:51 +00:00
d093894743 fix: [test]fix #8174, create empty config file under HOME dir
The server always create an empty config file in user's home dir, set tmp config file path for the unittest in order to fix this issue.

Log: Fix unittest create empty config file.
2025-02-11 07:13:31 -05:00
942070950d refactor: MainWindow do not use onNames 2025-02-04 18:11:41 +00:00
ddc24ffb22 refactor: MainWindow don't use lambda where direct connect can happen 2025-02-04 18:11:41 +00:00
b14de6f9e2 refactor: MainWindow conform to naming standards 2025-02-04 18:11:41 +00:00
10c50c9740 docs: Link to the known wayland issues in the readme 2025-02-03 12:45:22 +00:00
60577f00dc chore: add Icons for list-add , list-remove and document-edit 2025-02-03 12:36:18 +00:00
fedd9d33c9 refactor: serverConfig finish renaming, improve logic 2025-02-03 12:36:18 +00:00
ae30237f90 refactor: ServerConfigDialog/tabAdvanced no autoconnections, use naming std 2025-02-03 12:36:18 +00:00
169422a0eb refactor: ServerConfigDialog hotkeyTab, no auto connections use naming std 2025-02-03 12:36:18 +00:00
76fd40a3ec refactor: ServerConfigDialog/tabComputers, no autoconnect slots, use new names 2025-02-03 12:36:18 +00:00
816d66b703 refactor: Don't use autoconnect slots for the button box 2025-02-03 12:36:18 +00:00
774f1fded9 fix: Add client dialog not showing for new clients 2025-02-03 12:36:18 +00:00
9365091c79 Release v1.19.0
Some checks are pending
Continuous Integration / pr-comment-flags (push) Blocked by required conditions
Continuous Integration / ci-passed (push) Blocked by required conditions
Continuous Integration / test-results (push) Blocked by required conditions
Continuous Integration / reuse-lint (push) Waiting to run
Continuous Integration / lint-check (push) Blocked by required conditions
Continuous Integration / analyse-valgrind (push) Blocked by required conditions
Continuous Integration / analyse-sonarcloud (push) Blocked by required conditions
Continuous Integration / macos-14-arm64 (push) Blocked by required conditions
Continuous Integration / macos-13-x64 (push) Blocked by required conditions
Continuous Integration / archlinux-x86_84 (push) Blocked by required conditions
Continuous Integration / debian-13-arm64 (push) Blocked by required conditions
Continuous Integration / debian-13-x86_64 (push) Blocked by required conditions
Continuous Integration / fedora-40-arm64 (push) Blocked by required conditions
Continuous Integration / fedora-40-x86_84 (push) Blocked by required conditions
Continuous Integration / fedora-41-arm64 (push) Blocked by required conditions
Continuous Integration / fedora-41-x86_64 (push) Blocked by required conditions
Continuous Integration / opensuse-arm64 (push) Blocked by required conditions
Continuous Integration / opensuse-x86_84 (push) Blocked by required conditions
Continuous Integration / ubuntu-25.04-arm64 (push) Blocked by required conditions
Continuous Integration / ubuntu-25.04-x86_64 (push) Blocked by required conditions
Continuous Integration / windows-2022-x64 (push) Blocked by required conditions
Continuous Integration / unix-freebsd (push) Blocked by required conditions
Continuous Integration / flatpak-x86_64 (push) Blocked by required conditions
Continuous Integration / release (push) Blocked by required conditions
Continuous Integration / winget-publish (push) Blocked by required conditions
2025-01-31 07:07:58 -05:00
9dcfb6cc9b fix: Wrong cb_activated signature in input-capture
The options argument was missing so the argument data wasn't the right
one and the method cb_disabled was actually called on a GVariant*
instead on a PortalInputCapture*
2025-01-30 14:50:08 -05:00
e2c3af4e5e fix: readd the newScreenWidget 2025-01-30 15:36:21 +00:00
26367635d9 refactor: QTextStream& screen::writeScreensSection(QTextStream&) -> QString Screen::screenSection()
refactor: QTextStream& screen::writeAliasSection(QTextStream&) -> QString Screen::aliasSection()
2025-01-30 15:36:21 +00:00
0ba35fca7a refactor: clean up data method of model 2025-01-30 15:36:21 +00:00
beb4069845 fix: Screen Missing Icons on server config
Fixes#8155
2025-01-30 15:36:21 +00:00
71b7e819a9 refactor: remove smaller security icons 2025-01-29 21:19:39 +00:00
55772e1133 chore: remove unused ARCH::vsnprintf 2025-01-29 21:07:31 +00:00
43c6bec790 Revert "feat!: Add support for FingerPrintDatabase"
This reverts commit 8f219b735e.
2025-01-28 19:31:03 -05:00
8f219b735e feat!: Add support for FingerPrintDatabase 2025-01-28 20:33:11 +00:00
59ebb6fde4 refactor: force mac os to use the larger security icon in the status area 2025-01-28 16:19:51 +00:00
30a37a8a50 chore: Switched event buffer from Carbon to GCD 2025-01-28 13:11:24 +00:00
415fc3ea63 docs: update openSSL exception link 2025-01-28 12:48:36 +00:00
7f6caec162 chore: reset screen xywh on update_shape
based on https://github.com/input-leap/input-leap/pull/2167
2025-01-28 11:33:55 +00:00
d61bce4534 ci: Add reuse compliance check 2025-01-27 17:05:47 -05:00
1085df54ed refactor: Reuse compliance
build files and documentation: MIT
  images / sources: GPL-2.0-only
  breeze icons: LGPL-2.0-only
  Microsoft MSM file, vc redist license
2025-01-27 17:05:47 -05:00
480776cb38 chore: remove extra gitignore files 2025-01-27 17:05:47 -05:00
2ca1c69335 refactor: move LICENSE_EXCEPTION info into to LICENSES folder 2025-01-27 17:05:47 -05:00
2c2045b6bb docs: Fixed incorrect link on README.md for rewarded bounties 2025-01-27 09:35:25 -05:00
9d3b32c824 Fix a typo in SettingsDialog
compatability =>
compatibility

Signed-off-by: Kentaro Hayashi <kenhys@xdump.org>
2025-01-27 08:29:43 -05:00
c2b3f551d2 chore: String update copyright 2025-01-25 15:43:44 +00:00
f255d77eee chore: add string::fromHex 2025-01-25 15:43:44 +00:00
3125eba014 chore: add string::fromHexChar 2025-01-25 15:43:44 +00:00
9b1489384c chore: String toHex should return a string not do inplace conversion 2025-01-25 15:43:44 +00:00
ac54a97a3f chore: rm use of "Arch" from "String" 2025-01-25 15:43:44 +00:00
0112a5eac8 docs: Update README.md to raise awareness of bounties
Right now we're only seeing bounty interest through Algora's network of developers.

We can increase the number of potential contributors aware of bounties by making this prominent on our README.
2025-01-24 09:22:38 -05:00
a7beed48f8 chore: remove unused placeholder.png file 2025-01-23 22:07:52 +00:00
cc4701a0c2 fix: Fix detect language
It perhaps no variant for a keyboard's layout, set a default value in order to continue detect local language.

Log: Fix detect language.
2025-01-23 16:54:14 -05:00
30263f3c70 ci:use -1.0 as tag for flatpak builder 2025-01-23 21:44:19 +00:00
4c3d6c7080 refactor: move rc_template.rc.in -> windows.rc.in
fixes: #8130
2025-01-23 21:28:57 +00:00
90661c9f13 chore: enable cpack as DEB for deepin|uos
The deepin and uos are debian liked OS, but they do define "ID_LIKE".

Log: enable cpack as DEB for deepin|uos.
2025-01-23 19:26:49 +00:00
2040df435f fix: #8107: Remove legacy tray code 2025-01-23 19:16:29 +00:00
62f53bbb92 fix: check bsdpath for evdev fixes #8112 2025-01-21 17:15:42 -05:00
f49f616ad6 fix: correctly mask symbolic icon on mac os 2025-01-21 17:15:18 -05:00
6eec07b6dc refactor: Use correct log level for failure messages
This change may help us turn up some everyday problems in the field that get missed due to not using debug log level.

This could also make the log a bit noisier, so at a later date we may need to downgrade anything that is not actually a failure/warning.
2025-01-21 16:46:34 -05:00
b65b3678c7 fix: #8119, covering all Unix-like OSes including BSD
Fixes #8119 (using platform variables)
2025-01-21 12:14:42 -05:00
1ec6d02339 refactor: use theme icons for on settings dialog and mac os tray 2025-01-21 11:22:11 -05:00
6b29e1c6ef ci: use qt 6.7.3 for mac os 2025-01-21 11:22:11 -05:00
b13afbbbb9 Properly seek to start of keymap descriptor 2025-01-21 12:07:54 +00:00
f969e0a03b ci: add builder for ubuntu 25.04, fixes https://github.com/deskflow/deskflow/issues/7884 2025-01-21 06:36:37 -05:00
ffe8153c35 build: remove unused TM_IN_SYS_TIME define 2025-01-21 06:27:36 -05:00
afc736e2c8 build: remove unused STDC_HEADERS 2025-01-21 06:27:36 -05:00
ae7e2f70ce build: remove unused PTHREAD_CREATE_JOINABLE 2025-01-21 06:27:36 -05:00
9a1cb5941b build: remove unused define HAVE_X11_XKBLIB_H 2025-01-21 06:27:36 -05:00
fa35d2913d build: remove HAVE_X11_EXTENSIONS_XKBSTR_H define 2025-01-21 06:27:36 -05:00
1115d3287e build: remove HAVE_SYS_STAT define 2025-01-21 06:27:36 -05:00
46cfb281af build: remove HAVE_STRING_H define 2025-01-21 06:27:36 -05:00
365d6f76c2 build: remove HAVE_STRINGS_H define 2025-01-21 06:27:36 -05:00
05275b303f build: remove HAVE_STRFTIME define 2025-01-21 06:27:36 -05:00
535d241f7b build: remove unused STDINT define 2025-01-21 06:27:36 -05:00
3e9289328a build: remove unused INTTYPES define 2025-01-21 06:27:36 -05:00
bac86455d2 build: remove unused HAVE_MEMORY_H 2025-01-21 06:27:36 -05:00
b394f32c01 build: remove unused CXX_STDLIB define 2025-01-21 06:27:36 -05:00
312347bc17 build: remove unused CXX_MUTABLE define 2025-01-21 06:27:36 -05:00
6541ce3f84 build: remove unused CXX_EXTENTION define 2025-01-21 06:27:36 -05:00
b4a5b580bd build: remove unused CXX_CASTS define 2025-01-21 06:27:36 -05:00
d72fd2b3d9 build: remove unused ACCEPT_TYPE_ARG3 2025-01-21 06:27:36 -05:00
5ce9aaea13 build: remove has_BOOL define 2025-01-21 06:27:36 -05:00
cc6bfcc1c2 build: remove unused SIZE defines 2025-01-21 06:27:36 -05:00
efca38babc build: remove size_t define 2025-01-21 06:27:36 -05:00
401326e9d7 build: use CMAKE_PROJECT_NAME and CMAKE_PROJECT_PROPER_NAME to set our kAppName and KAppId 2025-01-21 06:27:36 -05:00
09bd4006d1 refactor: MainWindow, use system-run for the start button and action 2025-01-21 11:16:53 +00:00
c84a8c20c1 refactor: MainWindow, use ProcessStop for the stop action and button 2025-01-21 11:16:53 +00:00
b91681a125 refactor: MainWindow, add help-about icon 2025-01-21 11:16:53 +00:00
f578da16c0 refactor: MainWindow, Icon for the clear settings action 2025-01-21 11:16:53 +00:00
c583ab7d2c refactor: MainWindow, add icons for configure 2025-01-21 11:16:53 +00:00
e6ae6bd0d1 refactor: MainWindow, add document-save-as icon 2025-01-21 11:16:53 +00:00
d51437b6a1 refactor: MainWindow, add view-refreshIcon 2025-01-21 11:16:53 +00:00
6954a4dfa3 refactor: SettingsDialog use security-type icons for key length selector 2025-01-21 11:16:53 +00:00
24b2d9b0c1 refactor: MainWindow add application-exit icon 2025-01-21 11:16:53 +00:00
0adef8d781 refactor: MainWindow, Add tools-report-bug icon 2025-01-21 11:16:53 +00:00
3cce11f9d9 fix: missing setting colorful icon 2025-01-21 11:16:53 +00:00
0f5bcd6d12 fixes 8106, by adjusting the spacing of the about dialog 2025-01-21 11:06:37 +00:00
2ccf0c6639 docs: Indicate S1/S3 compatibility
Synergy 3 uses mDNS which makes it incompatible for now.
2025-01-20 08:34:53 -05:00
6bb84309b7 feat: Build Arm packages using githubs new arm runners 2025-01-20 08:06:20 -05:00
89ec18a8e4 feat: bake in light and dark icon theme 2025-01-20 10:42:29 +00:00
067d6810f3 chore: gui lib, remove unused include dirs 2025-01-19 09:39:54 -05:00
19920801fa build: gui lib use explicit sources 2025-01-19 09:39:54 -05:00
08ad64eb4d chore: remove unused deskflow-gui/AppDelegate 2025-01-19 09:39:54 -05:00
dc5e971043 build: setup bundle plist only on macOS 2025-01-19 09:39:54 -05:00
e0017c1c31 build: deskflow gui explict sources 2025-01-19 09:39:54 -05:00
e58e5c420b refactor: move macOS icon to res folder 2025-01-19 09:39:54 -05:00
ca8c405b5e chore: deskflow-gui, remove unused include_dirs 2025-01-19 09:39:54 -05:00
aff25415ff build: consolidate cmake vars more
move most project defines needed in cmake to the main file
2025-01-19 09:39:54 -05:00
5be1e9f9b9 build: setup a cmake rc template for all apps 2025-01-19 09:39:54 -05:00
3f3116da05 build: simplify the version.rc.in vars
remove the special cmake define for msversion and make it once in the rc
remove duplicate version vars in the rc and use the singe one twice
2025-01-14 21:42:43 +00:00
16396bdbaa build: Unify copyright into one cmake var 2025-01-14 21:42:43 +00:00
660a50d0cf chore: remove unused logo images 2025-01-14 21:22:05 +00:00
93cd71d046 refactor: Adjust the About dialog UI 2025-01-14 21:22:05 +00:00
90c081c889 chore: remove unneeded setVisible override and the unused mac os old tray code within it 2025-01-14 21:00:20 +00:00
a08b0c41e0 fix: always show the hide / show option in the tray menu
Some DE's are like mac os and prevent the user from using click to restore / hide the window
2025-01-14 21:00:20 +00:00
793f40e582 chore: remove basic_types.h 2025-01-14 20:30:45 +00:00
96092df4fc refactor: replace UInt32 with uint32_t 2025-01-14 20:30:45 +00:00
27eb83c981 refactor: replace SInt32 with int32_t 2025-01-14 20:30:45 +00:00
7487eeaa3a refactor: replace UInt16 with uint16_t 2025-01-14 20:30:45 +00:00
1ed49e7487 refactor: replace SInt16 with int16_t 2025-01-14 20:30:45 +00:00
ba11eba91e refactor: replace UInt8 with uint8_t 2025-01-14 20:30:45 +00:00
8ea20cf6da refactor: replace SInt8 with int8_t 2025-01-14 20:30:45 +00:00
ab61fcc007 chore: update readme's linux support. Removes distros list and show the ei / portal needs 2025-01-14 17:01:33 +00:00
f71db61bd3 build: Arch,PKGBUILD: rm arm6h , add all conflicts , correct license 2025-01-14 17:01:33 +00:00
626ff0a5fa chore: remove unused GUI_HOOK 2025-01-14 14:29:39 +00:00
7a72658963 refactor: copy more info with the about dialog info's copy button 2025-01-10 17:05:13 -05:00
b8d12a0895 build: mac os add entitlements 2025-01-10 21:48:55 +00:00
692860f9e9 build: macos bundle plist add hint to tell mac os its not allowed to kill the process
based on https://github.com/input-leap/input-leap/pull/2115"
2025-01-10 21:48:55 +00:00
4b6d0059c5 build: Use custom plist template
Customize the cmake used template so we can generate the plist
using configure file this will allow us to add several additional
keys we would not be able to otherwise add to our plist file
"
2025-01-10 21:48:55 +00:00
1dadc2ddf4 refactor: ActionDialog, Only allow resize when the screen list is visible 2025-01-10 21:39:26 +00:00
328a719d49 refactor: Use Computer in place of Screen for user facing strings 2025-01-10 21:39:26 +00:00
a9f55f8dfc chore: ActionDialog, update UI file to Qt6 format and clean unneed keys 2025-01-10 21:39:26 +00:00
f6dd2881c8 refactor: ActionDialog: disable action saving while settings are invalid 2025-01-10 21:39:26 +00:00
7152119014 refactor: ActionDialog, Only show Action relevent options 2025-01-10 21:39:26 +00:00
29eaa19d95 refactor: ActionDialog, use checkable list for screen selection 2025-01-10 21:39:26 +00:00
4db2b80d4e refactor: ActionDialog, Use Combo for action selection 2025-01-10 21:39:26 +00:00
04f73cfcb7 refactor: ActionDialog, Use Combobox for action trigger 2025-01-10 21:39:26 +00:00
1386ac91dc refactor: ActionDialog, Simplify keySequenceChanged logic 2025-01-10 21:39:26 +00:00
4e913a90eb refactor: ActionDialog, make buttonbox connections in c++ 2025-01-10 21:39:26 +00:00
c36c0f2938 refactor: ActionDialog, Aaccess the keySequenceWidget only thru the ui member 2025-01-10 21:39:26 +00:00
0944d918b7 refactor: KeySequenceWidget, remove protected copy of public method 2025-01-10 21:39:26 +00:00
3572bd28b6 refactor: ActionDialog, Adjust private memberNames 2025-01-10 21:39:26 +00:00
c21595e598 refactor: ActionDialog, remove unneeed forward declare for QRadioButton 2025-01-10 21:39:26 +00:00
096ab3b8ed refactor: ActionDialog, set the current screen combo without the need to track how many items are in the combobox with an additional int variable 2025-01-10 21:39:26 +00:00
1129303254 refactor: ActionDialog, when filling the screen list continue sooner if screen is null 2025-01-10 21:39:26 +00:00
4b456bf835 refactor: ActionDialog, don't keep a copy of the server config 2025-01-10 21:39:26 +00:00
8533348c88 refactor: simplify updateSize 2025-01-10 10:36:19 +00:00
dd0812c201 fix: Mainwindow window size restore \n fixes https://github.com/deskflow/deskflow/issues/8056 2025-01-10 10:36:19 +00:00
9a3a89efab refactor: simplify windows size/pos saving 2025-01-10 10:36:19 +00:00
3875e41154 fix: Enter screen on mac os asap to ensure event hand off
based on https://github.com/input-leap/input-leap/pull/2116
2025-01-09 14:02:01 +00:00
74dcd9bd4e build: run macdeployqt on package 2025-01-08 13:30:52 +00:00
9501b59f81 fix: Save the try icon setting 2025-01-07 20:33:37 -05:00
6c95daf0a1 chore: remove stdstring.h use include <string> instead 2025-01-08 00:11:34 +00:00
3991e0c1a1 refactor: use std::string in place of String
basedon: https://github.com/debauchee/barrier/pull/709
2025-01-08 00:11:34 +00:00
42a17726d9 feat: Allow users to pick mono color (based on isDarkMode) or colorful icon 2025-01-07 23:51:34 +00:00
fc6d39ae6c refactor: Adjust the size of all the tray icons to use the same amount of canvas space" 2025-01-07 23:51:34 +00:00
5d41537505 refactor: remove macOS check for icon theme macOS 11+ uses a mask 2025-01-07 23:51:34 +00:00
f505bfd3e7 refactor: MainWindow setupTrayIcon in method
remove unused MainWindow::createStatusBar and MainWinow::createTrayIcon
2025-01-07 23:51:34 +00:00
d5e651bae9 refactor: MainWindow use QSystemTrayIcon in place of TrayIcon
removes the TrayIcon class
2025-01-07 23:51:34 +00:00
1a35a8bdf7 refactor: Action use QStringLists in place of char * arrays 2025-01-07 23:34:11 +00:00
261d85b423 refactor: Action remove pointless assert 2025-01-07 23:34:11 +00:00
fcc8c3d344 refactor: Action, dont use concatantaion, instead append 2025-01-07 23:34:11 +00:00
112c665480 refactor: Action: add SettingsKeys namespace to hold the settings keys 2025-01-07 23:34:11 +00:00
4c70f4fde5 refactor: Action: use m_foo style member names 2025-01-07 23:34:11 +00:00
665049b723 fix #8059 re add shortcut for quit on windows 2025-01-07 17:17:19 -05:00
13a3c2d281 Chore: rm unused DESKFLOW_GUI_HOOK Items 2025-01-07 17:15:48 -05:00
abdab2d06d feat: resolve #7975, allow only one instance of the gui 2025-01-07 16:54:47 -05:00
fd4ffb6f60 build: Prevent issue where build packages is off with version.rc not being generated 2025-01-07 16:37:04 -05:00
c165413e5b Revert "build: disable package for debug config"
This reverts commit 49622a24b2.
2025-01-07 16:37:04 -05:00
9f1c1da1aa build: unify finding of the qt deploy tool and detect if vcpkg for proper debug build call 2025-01-07 16:37:04 -05:00
a55fafb4fc fix: messages read into vector are cut off by 4 bytes 2025-01-07 21:09:03 +00:00
b0852bfda5 refactor: Hotkey, use internal actionlist in place of function call 2025-01-07 19:45:21 +00:00
9eb0371a92 refactor: Hotkey, use internal keySequence in place of function calls 2025-01-07 19:45:21 +00:00
ef0d929251 refactor: Hotkey outstream logic more Qt 2025-01-07 19:45:21 +00:00
20a5b8eb0b refactor: Hotkey use const for literals 2025-01-07 19:45:21 +00:00
404458aab0 fix: hotkeys w/ multi actions
based on adc49fa066
2025-01-07 19:45:21 +00:00
4702fa56d4 fix: use Fallback version if git found without tag info
fixes https://github.com/deskflow/deskflow/issues/8033
2025-01-07 11:56:32 -05:00
6f744d2278 fix: Version Checker use case insensitive compare in place of toLower() call 2025-01-07 11:54:30 -05:00
49622a24b2 build: disable package for debug config 2025-01-07 11:45:51 -05:00
329afb47be build: windeployqt only on package dir 2025-01-07 11:45:51 -05:00
d4addceb09 build: macos attempt local signing 2025-01-07 11:32:51 -05:00
ca5f41684f fix: MacOS Hide and Show from dock on window close / hide 2025-01-07 09:19:20 -05:00
9c3e08001e fix: mac os CI build by correctly setting INSTALL_RPATH for the gui as a property of its target 2025-01-03 20:02:19 -05:00
6bfde029fe fix: run MacDeployQt at install time on staged app only 2025-01-03 14:10:58 +00:00
351c5123ef fix: Mac Os use Native Hide Event 2025-01-03 13:56:39 +00:00
ba334d5411 refactor: MainWindow remove unneeded onAppAboutToQuit slot 2025-01-03 13:56:39 +00:00
08d4b348e0 fix: use the closeEvent to hide to tray and quit the application 2025-01-03 13:56:39 +00:00
58563d36ca fix: Stop core process when mode changes in gui 2025-01-03 13:32:13 +00:00
ce02bb85b3 chore: update gnome tray fix link to https://extensions.gnome.org/extension/615/appindicator-support/ 2025-01-02 13:44:06 +00:00
df089dab53 fix: Wayland Prompt starts under MainWindow 2025-01-02 13:12:09 +00:00
86ee88d17d feat: Show the TLS Enabled label no matter the selected mode 2025-01-02 13:02:51 +00:00
4f9494245f fix: The Tls Fingerprint label not being shown on start up 2025-01-02 13:02:51 +00:00
2294981525 fix: Unify both Quit actions to use the same function
Mac os tray quit not working
2024-12-30 11:07:34 +00:00
13b58f2f7a fix: 8017, move wayland error to debug context 2024-12-28 20:46:51 +00:00
2455e0e29f refactor: Copy the full version string on the about dialog 2024-12-28 20:36:35 +00:00
23c054661c Release v.18.0, with proper win package
Some checks are pending
Continuous Integration / pr-comment-flags (push) Blocked by required conditions
Continuous Integration / ci-passed (push) Blocked by required conditions
Continuous Integration / test-results (push) Blocked by required conditions
Continuous Integration / lint-check (push) Waiting to run
Continuous Integration / analyse-valgrind (push) Blocked by required conditions
Continuous Integration / analyse-sonarcloud (push) Blocked by required conditions
Continuous Integration / macos-14-arm64 (push) Blocked by required conditions
Continuous Integration / macos-13-x64 (push) Blocked by required conditions
Continuous Integration / archlinux-x86_84 (push) Blocked by required conditions
Continuous Integration / debian-13-x86_64 (push) Blocked by required conditions
Continuous Integration / fedora-40-x86_84 (push) Blocked by required conditions
Continuous Integration / fedora-41-x86_64 (push) Blocked by required conditions
Continuous Integration / opensuse-x86_84 (push) Blocked by required conditions
Continuous Integration / windows-2022-x64 (push) Blocked by required conditions
Continuous Integration / unix-freebsd (push) Blocked by required conditions
Continuous Integration / flatpak (push) Blocked by required conditions
Continuous Integration / release (push) Blocked by required conditions
Continuous Integration / winget-publish (push) Blocked by required conditions
2024-12-26 13:16:58 -05:00
098f56daee Release 1.18.0 2024-12-26 12:29:20 -05:00
ee8baeb1ff fix: qDebug doesn't work on Fedora 2024-12-26 16:48:39 +00:00
81d478632a fix: 8012 use 2/3 height on mac os for the log indicator 2024-12-26 16:32:11 +00:00
8e9925d6c8 fix: Mac os missing Quit from tray menu 2024-12-26 16:32:11 +00:00
368ccbbe4c fix: show normal mac os 2024-12-26 16:32:11 +00:00
a401c98bf6 build: fix mac os missing ; 2024-12-26 15:24:02 +00:00
f61fe00c33 ci: update lint action style 2024-12-26 15:24:02 +00:00
97890f86d3 chore: use static QApplication members where possible 2024-12-26 15:01:59 +00:00
638970d65e feat: Visiblity toggle for the log on the main window 2024-12-26 14:45:52 +00:00
98eb89255d refactor: move optional scripts to external repo 2024-12-26 14:29:25 +00:00
ccc60ff900 refactor: mv deskflow[s|c|d] to deskflow-server, deskflow-client and deskflow-deamon 2024-12-26 13:37:29 +00:00
db441eb5cf fix: win32 client taskbar remove duplicate state 2024-12-26 13:37:29 +00:00
21b345e9db fix: Create new Tray Icons for windows 2024-12-26 13:37:29 +00:00
9af37463fd refactor: single copy of app ico files for window now in src/apps/res 2024-12-26 13:37:29 +00:00
225ca23482 refactor: move all apps to one src/apps folder 2024-12-26 13:37:29 +00:00
9811586718 fixes: #7940 Use std::string insert to in place of arg sub for std::string static 2024-12-26 13:06:21 +00:00
858c41c946 fix: #7942, Correctly substitute config name part
fixes https://github.com/deskflow/deskflow/issues/7942
2024-12-26 12:28:19 +00:00
8b25e11f81 ci: combine lint-clang and lint-error into lint-check 2024-12-26 11:48:20 +00:00
d9727e60bc ci: remove unused init-python action 2024-12-26 11:48:20 +00:00
f8ddafe4a2 ci: use clang-format directly in lint-clang action 2024-12-26 11:48:20 +00:00
ab44559df6 fix(CVE-2021-42076): Enforce maximum message length to prevent memory exhaustion
based on barrier: debauchee/barrier@7ab8e01, debauchee/barrier@cc36982,
debauchee/barrier@e33c81b, debauchee/barrier@af90f39, debauchee/barrier@fd5295e
2024-12-26 10:45:21 +00:00
626e8c7364 fix(CVE-2021-42074): Handle SSL race conditions and segmentation fault
based on barrier: debauchee/barrier@8b937a4
2024-12-26 10:24:22 +00:00
041512b050 chore: remove unused scripts 2024-12-22 09:52:50 -05:00
cd0e98a480 build: remove post_config macros 2024-12-22 09:52:50 -05:00
802cfaa279 chore: removed unused scripts/daemon.py 2024-12-22 09:52:50 -05:00
aff3495e74 refactor: MainWindow clearer menu creation, remove private menu items 2024-12-22 12:39:59 +00:00
1ff7d5f4aa refactor: MainWindow remove need created / onCreated methods 2024-12-22 12:39:59 +00:00
784b2b2f6f fix: MainWindow, Use tr for use facing strings 2024-12-22 12:39:59 +00:00
927c8c146e refactor: MainWindow, use qDebug and friends correctly 2024-12-22 12:39:59 +00:00
94006f0bcd refactor: MainWindow, do not use autoconnections for the client / server radio butons 2024-12-22 12:39:59 +00:00
19c227b937 refactor: MainWindow, Do not use autoconnection for tls label 2024-12-22 12:39:59 +00:00
be5025b225 refactor: MainWindow, Do not use auto connection for the computer name label 2024-12-22 12:39:59 +00:00
4ee7d7b20f refactor: MainWindow, Do not auto connect the configure sever button 2024-12-22 12:39:59 +00:00
5032a5d275 refactor: MainWindow, no more auto connection for the host and client ip lines 2024-12-22 12:39:59 +00:00
d0dadf2112 refactor: MainWindow, better handle the toggleCore and ApplySettings buttons 2024-12-22 12:39:59 +00:00
2211caecb8 refactor: MainWindow, m_PButtonToggleStart -> btnToggleCore 2024-12-22 12:39:59 +00:00
5aa4840972 refactor: MainWindow, Create Actions in code 2024-12-22 12:39:59 +00:00
937ac053fe fix(CVE-2021-42075): Close connection on app-level handshake failure
based on barrier: debauchee/barrier@deefecc
2024-12-18 17:23:27 +00:00
cb638f4712 ci: bump mount wait time for macOS 2024-12-18 12:10:53 -05:00
751904f27c buid: add depends for deskflow core
fixes #7955
2024-12-18 12:10:53 -05:00
b9247b4c27 refactor: cleanup windows deploy files 2024-12-18 12:10:53 -05:00
cfd0bb9262 refactor: clean up mac os deploy files 2024-12-18 12:10:53 -05:00
d128623df3 refactor: clean up deploy for linux 2024-12-18 12:10:53 -05:00
b641a885d5 refactor: rm cmake/Packaging.cmake, instead do the config_linux_name macro in place 2024-12-18 12:10:53 -05:00
3817489097 chore: remove old wix building and build on ci with cpack 2024-12-18 12:10:53 -05:00
f06a789d25 build: wix generation for windows with cpack 2024-12-18 12:10:53 -05:00
b6d5095871 build: windows install step for deskflow gui 2024-12-18 12:10:53 -05:00
a06d65b1f9 build: windows, create install step for server 2024-12-18 12:10:53 -05:00
56ecd88945 build: windows, create install step for client 2024-12-18 12:10:53 -05:00
5a45e6d102 build: windows, create install step for daemon 2024-12-18 12:10:53 -05:00
e4ecbdae8a fix: macOS correctly restore window when hidden with command+H 2024-12-18 09:52:17 -05:00
bf4f513d7e chore: format *.m and *.mm files 2024-12-18 09:52:17 -05:00
af6dac9eee fix: Always show the tray menu entry for the restore action on macOS 2024-12-18 09:52:17 -05:00
ebad12a922 refactor: use QList for the tray's Action List 2024-12-18 09:52:17 -05:00
8aec0dd5bb fix: UTF-16 surrogate handling.
The data pointer needs to move before decoding the second
surrogate, and not after. The first surrogate was begin decoded
again, resulting in an invalid codepoint.

This affected clipboard operations originating on Windows machines,
where the text is encoded in UTF-16 and copying characters from a
high plane (like emojis) was broken.
2024-12-18 08:28:47 -05:00
ddb443b550 fix: Mainwindow can not start off screen
Fixes #7451
2024-12-18 07:59:56 -05:00
6a816350c1 mv .vscode to new repo github.com:deskflow/.vscode.git 2024-12-17 14:10:03 -05:00
0c26893706 fix: fixes #7949 Fixup groupboxes for settings dialog make settings dialog a fixed height 2024-12-17 09:29:09 -05:00
53b9c0908e fix: Windows, avoid encoding empty data to the clipboard
Do not attempt to convert null data to clipboard format and exit
early
2024-12-17 14:19:24 +00:00
252d11a316 feat: Windows, Use a clipboard format listener to monitor the clipboard
On Windows monitor the clipboard using a Clipboard format listener instead
of the legacy clipboard viewer chain, which was unreliable as it required
other programs to maintain the clipboard chain properly and couldn't
recover it any window in the clipboard viewer chain stopped responding
to messages.

Monitor the clipboard sequence number to not process the clipboard more
than once.
2024-12-17 14:19:24 +00:00
5026eea60a Fix: Use tray icon to hide and show from tray correctly
Remove show / hide from the tray menu
 Remove always disabled "show" action from window menu
2024-12-16 17:17:19 +00:00
482aa7a049 chore: Add minimum macOS version to readme 2024-12-16 08:59:33 -05:00
e12432d3d8 Update README.md 2024-12-06 07:40:05 -05:00
0349c06fed build: ReAdd NDEBUG define 2024-12-05 07:50:26 -05:00
6b7291f4b1 chore: src/lib/server/Config remove redundant c_str call 2024-12-04 10:40:58 -05:00
991293dd0c chore: src/gui/Action use default constructor 2024-12-04 10:40:58 -05:00
2349ce7f52 chore: replace simple cases of typedef with using 2024-12-04 10:40:58 -05:00
1d43e7c626 chore: src/gui/Action initilize items in class when possible 2024-12-04 10:40:58 -05:00
48e357f111 chore: IArchTrayBarReceiver subclass should override virtual methods not mark them virtual 2024-12-04 10:40:58 -05:00
d225be501e chore: IArchTaskBarReeiver subclasses should return nullptr for empty icon not NULL 2024-12-04 10:40:58 -05:00
37acc3b2fc chore: IArchTaskBarReciver subclasses Icon pointer should not be a const 2024-12-04 10:40:58 -05:00
b783f6e754 chore: scripts/package.py, remove unused vars in package method 2024-12-04 10:40:58 -05:00
6e01cc6ce5 ci: add config option for build step 2024-12-04 10:05:34 -05:00
6498fe5a6b refactor: use Qt Required Version rm configure_qt macro for its one use 2024-12-04 10:05:34 -05:00
4e23460c6f refactor: no configure_openssl macro 2024-12-04 10:05:34 -05:00
7ce2845c9b refactor: place simple macros where they are used 2024-12-04 10:05:34 -05:00
c8e1e4f38f refactor: rm unneed macro to flatten code coverage logic 2024-12-04 10:05:34 -05:00
922ad66aff refactor: options in place
remove use of env vars to set build options
 users should set these at cmake configure time
2024-12-04 10:05:34 -05:00
b0d22926f9 refactor: rm :cmake/Defines move last macro to Bulid.cmake 2024-12-04 10:05:34 -05:00
81631cac32 refactor: set test names directly and call only configure_options in main cmakelists.txt 2024-12-04 10:05:34 -05:00
1685c6e946 chore: rm unneeded debug define 2024-12-04 10:05:34 -05:00
1e8ff50d59 refactor: mv cmake policy settings to main CMakelists.txt 2024-12-04 10:05:34 -05:00
5d591e3518 build: rm unneeed configure_ninja steps 2024-12-04 10:05:34 -05:00
57f6248b6a build: rm configure_build macro set items in main CMakeLists.txt 2024-12-04 10:05:34 -05:00
d6c682a923 chore: rm unused src/lib/gui/gui_config.h 2024-12-04 10:05:34 -05:00
4f8ae57ffd build: always include headers 2024-12-04 10:05:34 -05:00
a92f5b0351 refactor: correct osx deployment target and move to main CMakeLists.txt 2024-12-04 10:05:34 -05:00
0f0846f011 build: mv CXX Options to the Main CMakeLists.txt 2024-12-04 10:05:34 -05:00
86cca8a0d1 refactor: don't use a macro for a single line 2024-12-04 10:05:34 -05:00
eb9e507a1f chore: rm Unused Build_Time macro and define 2024-12-04 10:05:34 -05:00
03f1408a98 refactor: mv src/lib/gui/VersionChecker => src/gui/src/ 2024-12-04 10:05:34 -05:00
7f9fd80f98 refactor: remove workarounds for unsupported ms vc versions 2024-12-04 10:05:34 -05:00
c5cfdc2b69 refactor: AboutDialog, show the version tweak only if its not 0, when showing the tweak also show the sha 2024-12-04 10:05:34 -05:00
7656b49f1b refactor: set GIT_SHA_SHORT with git command 2024-12-04 10:05:34 -05:00
c05a87b716 refactor: rm src/lib/common/copyright, add to src/lib/common/constants 2024-12-04 10:05:34 -05:00
4a83eb711f build: generate version info, use it for all sources of version 2024-12-04 10:05:34 -05:00
f321f6596b build: make an interface lib out of the common folder 2024-12-04 10:05:34 -05:00
18bc419b7a build: remove unused DESKFLOW_REVISION and DESKFLOW_VERSION_STAGE defines 2024-12-04 10:05:34 -05:00
25660049e4 Add windows requirement and flathub link to readme 2024-11-25 21:15:07 +00:00
9fcf261245 build: use CPACK_WIX_UPGRADE_GUID for wix GUID
Remove unuseable 32bit Parts
2024-11-25 20:50:58 +00:00
59d9454df1 build: install License files 2024-11-25 20:50:58 +00:00
14f66e2dee refactor: simplify linux os-release parsing 2024-11-25 20:50:58 +00:00
882b71ea84 ci: consistant upload name for flatpak fixes 7911 2024-11-25 19:37:13 +00:00
d26339d94a ci: remove unused test-actions workflow 2024-11-25 19:27:05 +00:00
079bfdc854 chore: update metadata long desc 2024-11-21 14:55:58 +00:00
3003670b94 ci: use x86_64 for job names 2024-11-21 14:55:58 +00:00
79c17e3564 ci: use master version of flatpak builder 2024-11-21 14:55:58 +00:00
397f9f0fac ci: add linux to flatpak bundle name 2024-11-21 14:55:58 +00:00
40ff14473d build: use linux for distro name is its no defined 2024-11-21 14:55:58 +00:00
b16a03c3ad fix: flatpak recipe should not clean up "lib/debug" 2024-11-21 14:55:58 +00:00
f11178327d chore: remove unused python parts 2024-11-21 14:27:01 +00:00
c6f352ac4a refactor: move most of the remaing packaging info into deploy 2024-11-21 14:27:01 +00:00
2cdbd8f491 build: use CPack for macOS to create dmg 2024-11-21 14:27:01 +00:00
a63435e64a build: use cmake to make the macOS bundle 2024-11-21 14:27:01 +00:00
9084a49034 Release 1.17.2
Some checks are pending
Continuous Integration / pr-comment-flags (push) Blocked by required conditions
Continuous Integration / ci-passed (push) Blocked by required conditions
Continuous Integration / test-results (push) Blocked by required conditions
Continuous Integration / lint-clang (push) Waiting to run
Continuous Integration / analyse-valgrind (push) Blocked by required conditions
Continuous Integration / analyse-sonarcloud (push) Blocked by required conditions
Continuous Integration / macos-14-arm64 (push) Blocked by required conditions
Continuous Integration / macos-13-x64 (push) Blocked by required conditions
Continuous Integration / archlinux-amd64 (push) Blocked by required conditions
Continuous Integration / debian-13-amd64 (push) Blocked by required conditions
Continuous Integration / fedora-40-amd64 (push) Blocked by required conditions
Continuous Integration / fedora-41-amd64 (push) Blocked by required conditions
Continuous Integration / opensuse-amd64 (push) Blocked by required conditions
Continuous Integration / windows-2022-x64 (push) Blocked by required conditions
Continuous Integration / unix-freebsd (push) Blocked by required conditions
Continuous Integration / flatpak (push) Blocked by required conditions
Continuous Integration / release (push) Blocked by required conditions
Continuous Integration / winget-publish (push) Blocked by required conditions
2024-11-20 08:24:13 -05:00
ceaeb7fef4 ci: build flatpaks 2024-11-20 08:47:13 +00:00
328ab0cc0c feat: fix flatpak recipe 2024-11-20 08:47:13 +00:00
11896e652f fix: single typo in README.md
`brew instal` works as intended, but only because Homebrew has aliases for a few common typos
2024-11-17 16:32:24 -05:00
147869e3a5 build: remove DESKFLOW_SHOW_DEV_THANKS define 2024-11-15 12:20:17 +00:00
25dd0ddfbc build: rm DAEMON_BINARY_NAME 2024-11-15 12:20:17 +00:00
45a61310a4 build: rm CORE_BINARY_NAME define 2024-11-15 12:20:17 +00:00
2213f3f746 build:rm CLIENT_BINARY_NAME define 2024-11-15 12:20:17 +00:00
e52ce58541 build: rm SERVER_BINARY_NAME define 2024-11-15 12:20:17 +00:00
078ec61e9a build: rm GUI_BINARY_NAME define 2024-11-15 12:20:17 +00:00
e446397740 build: rm DESKFLOW_MAC_BUNDLE_CODE 2024-11-15 12:20:17 +00:00
5a98245ddf build: rm DESKFLOW_RES_DIR define 2024-11-15 12:20:17 +00:00
366932a188 build: rm DESKFLOW_HELP_TEXT define 2024-11-15 12:20:17 +00:00
bdcf770de6 build: rm DESKFLOW_VERSION_URL define 2024-11-15 12:20:17 +00:00
e865397f12 build: rm DESKFLOW_WEBSITE_URL define 2024-11-15 12:20:17 +00:00
97ea628c14 build: rm DESKFLOW_MAINTAINER define 2024-11-15 12:20:17 +00:00
b5d0417714 build: rm DESKFLOW_AUTHOR_NAME define 2024-11-15 12:20:17 +00:00
403830ceea build: rm DESKFLOW_APP_NAME define
Unify Server APP USER_CONFIG_NAME and SYSTEM_CONFIG_NAME
 Some unix users may need to move their config to deskflow.conf from .deskflow.conf
2024-11-15 12:20:17 +00:00
9b59acdf26 build: rm DESKFLOW_DOMAIN define 2024-11-15 12:20:17 +00:00
46a6f74fb7 build: rm DESKFLOW_APP_ID define 2024-11-15 12:20:17 +00:00
937813cb2e fix: MainWindow not saving initial update flag 2024-11-14 08:19:13 -05:00
7bf474a54a feat: SettingsDialog, Allow user to toggle the check for updates settings
fixes: #7890
2024-11-14 08:19:13 -05:00
2990de322f fix: SettingsDialog ui generating nonsence alignment tags when edited 2024-11-14 08:19:13 -05:00
6dea7f3437 chore: adjust branding light / dark colors to dddddd / 555555 2024-11-14 11:00:27 +00:00
d141fce533 chore: update the deskflow shipped icon to have proper padding 2024-11-14 11:00:27 +00:00
ab244debed Rename CI badge to match new .yml filename 2024-11-12 16:17:22 -05:00
215706fa1e ci: rename ci.yml to => continuous-integration.yml 2024-11-12 14:10:03 +00:00
4e1fee92fd build: add metainfo 2024-11-12 14:00:59 +00:00
ee35f8d87d refactor: mv res/dist/wix => deploy/dist/wix 2024-11-12 14:00:59 +00:00
9b6c7f805f refactor: mv res/dist/mac => deploy/dist/mac 2024-11-12 14:00:59 +00:00
391df0bae0 refactor: mv res/dist/flatpak => deploy/res/flatpak 2024-11-12 14:00:59 +00:00
a64680c1fb chore: rm unneeded res/dist/flatpak/flatpak-desktop.patch 2024-11-12 14:00:59 +00:00
6e5c6bcf80 refactor: mv res/dist/arch => deploy/dist/arch 2024-11-12 14:00:59 +00:00
5ddc7f8b0c refactor: mv res/dist/linux/app.desktop.in => deploy/org.deskflow.deskflow.desktop 2024-11-12 14:00:59 +00:00
363fb5621d refactor: mv res/app.png and res/app.svg => deploy 2024-11-12 14:00:59 +00:00
e9749d8394 chore rm: unused app.svg 2024-11-12 14:00:59 +00:00
a53e289a45 refactor: mv res/win/version.rc.in => deploy/version.rc.in 2024-11-12 14:00:59 +00:00
e6fbf983e9 chore: alphabetize app.qrc resource file 2024-11-12 14:00:59 +00:00
a0666f0167 refactor mv: res/gui => src/gui/res 2024-11-12 14:00:59 +00:00
aba9c08352 refactor: use theme icon for document open fallback to the folder icon 2024-11-12 14:00:59 +00:00
4359075b06 feat: use platform native styles when possible
With Qt 6.7+ Light and Dark theme support is now provided by the mac os default theme
2024-11-12 14:00:59 +00:00
77c4707ec5 refactor: mv src/lib/gui/TrayIcon => src/gui/src/TrayIcon 2024-11-12 14:00:59 +00:00
18e66271ae refactor: mv res/app.ico src/gui/src/app.ico 2024-11-12 14:00:59 +00:00
031c393e0d refactor: mv res/gui/win/app.rc => src/gui/src/app.rc 2024-11-12 14:00:59 +00:00
c3cef678b0 chore: rm unused res/License.rtf 2024-11-12 14:00:59 +00:00
8ad06a8193 chore: rm unused res/License.tex 2024-11-12 14:00:59 +00:00
77f971ccb7 chore: rm unused res/doxygen.cfg.in 2024-11-12 14:00:59 +00:00
3815bc6f5c ci: update winget release for new filename scheme 2024-11-08 16:23:26 +00:00
944f68bf81 docs: Update readme to use latest for the stable link and continuous to continuous 2024-11-08 16:14:23 +00:00
a80cea3ca7 Release 1.17.1
Some checks are pending
CI / pr-comment-flags (push) Blocked by required conditions
CI / ci-passed (push) Blocked by required conditions
CI / test-results (push) Blocked by required conditions
CI / lint-clang (push) Waiting to run
CI / analyse-valgrind (push) Blocked by required conditions
CI / analyse-sonarcloud (push) Blocked by required conditions
CI / macos-14-arm64 (push) Blocked by required conditions
CI / macos-13-x64 (push) Blocked by required conditions
CI / archlinux-amd64 (push) Blocked by required conditions
CI / debian-13-amd64 (push) Blocked by required conditions
CI / fedora-40-amd64 (push) Blocked by required conditions
CI / fedora-41-amd64 (push) Blocked by required conditions
CI / opensuse-amd64 (push) Blocked by required conditions
CI / windows-2022-x64 (push) Blocked by required conditions
CI / unix-freebsd (push) Blocked by required conditions
CI / release (push) Blocked by required conditions
CI / winget-publish (push) Blocked by required conditions
2024-11-08 07:05:58 -05:00
9929b09088 refactor: mv src/gui/src/ScreenSetupView => src/gui/src/widgets/ScreenSetupView 2024-11-08 07:05:58 -05:00
226c835ee9 refactor: mv src/gui/src/KeySequenceWidget => src/gui/src/widgets/KeySwquenceWidget 2024-11-08 07:05:58 -05:00
fbda5b4053 refactor: mv src/gui/src/TrashScreenWidget => src/gui/src/widgets/TrashScreenWidget 2024-11-08 07:05:57 -05:00
f31cb26e0b refactor: mv src/lib/gui/widgets => src/gui/src/widgets 2024-11-08 07:05:57 -05:00
1bbc581037 refactor: mv src/gui/src/ServerConfigDialog => src/gui/src/dialogs/ServerConfigDialog 2024-11-08 07:05:57 -05:00
ce45d74806 refactor: mv src/gui/src/ScreenSettingsDialog => src/gui/src/dialogs/ScreenSettingsDialog 2024-11-08 07:05:57 -05:00
916f1e6144 refactor: mv src/gui/src/HotkeyDialog => src/gui/src/dialogs/HotkeyDialog 2024-11-08 07:05:57 -05:00
4f4261a237 refactor: mv src/gui/src/AddClientDialog => src/gui/src/dialog/AddClientDialog 2024-11-08 07:05:57 -05:00
e06741e62e refactor: mv src/gui/src/ActionDialog => src/gui/src/dialogs/ActionDialog 2024-11-08 07:05:57 -05:00
585a895b4a refactor: Settings Dialog rm ui as base class 2024-11-08 07:05:56 -05:00
dc5c2b9422 refactor: mv src/lib/gui/dialogs/SettingsDialog => src/gui/src/dialogs/SettingsDialpg 2024-11-08 07:05:54 -05:00
3822336db2 ci: release on master or tags/v 2024-11-08 10:02:21 +00:00
5ca9afc3f7 ci: get-version strip refs/tags/v from DESKFLOW_PACKAGE_VERSION" 2024-11-08 10:02:21 +00:00
8273c0e70b chore: Replace screen leave/enter asserts with warnings 2024-11-06 20:55:59 -05:00
fa9b2d91d5 ci: release a file with packages sums 'sums.txt' with releases 2024-11-06 15:41:37 -05:00
170b4251f3 build: align window mac names with community norms 2024-11-06 12:45:28 -05:00
ddf6450486 build: use PACKAGE_VERSION_LABEL to set generated package's name
If unset use CPACK_PACKAGE_VERSION when set only replaces the version in the package's filename
2024-11-06 11:49:31 -05:00
4a769e6a7f ci: get-version action new DESKFLOW_PACKAGE_VERSION returns "continuous" when not a v* tag otherwise the tag
DESKFLOW_VERSION is the version described by git
2024-11-06 11:32:50 -05:00
07fb3a9a7a chore: add homebrew tap info to readme 2024-11-06 14:51:46 +00:00
155e4d6b32 refactor: ui less aboutDialog 2024-11-06 14:50:39 +00:00
f87b4bc0c2 refactor: mv AboutDialog to gui/src/dialogs/ 2024-11-06 14:50:39 +00:00
f66a0219f6 fix: isDarkMode Check
while newer Qt does provide a method to check if dark mode
  Its not always correct the old method is
  Anytime the text is lighter then the window its dark mode.
2024-11-06 14:50:39 +00:00
3a53149a48 docs: contributors on readme 2024-11-06 14:11:15 +00:00
45f328cd80 fix: crash on --help arg 2024-11-05 13:26:00 -05:00
1e3d332002 chore: add project version for windows rc 2024-11-05 13:17:08 -05:00
3359a2a9d9 build: add deskflow devs to binary copyright 2024-11-05 13:17:08 -05:00
e369af9d74 chore: remove scripts/lib/github.py file 2024-11-05 14:33:23 +00:00
afab39e7f8 chore: remove unused scripts/tests.py 2024-11-05 14:33:23 +00:00
e33405bef8 chore: remove unused package parts, do not allow package via python on linux 2024-11-05 14:33:23 +00:00
9875bc6613 chore: Remove unused install deps scripts and related parts 2024-11-05 14:33:23 +00:00
16a1ba8f45 ci: adjust pacakge script to use the names we would like when in cpack 2024-11-01 12:02:00 +00:00
37889e5659 ci: git-version-action: Always report described version 2024-11-01 11:52:45 +00:00
1835a2cab6 ci: use pre-release for continuous to stop it from grabbing latest tag also 2024-11-01 10:16:24 +00:00
8c314ad82c ci: Use GITHUB_TOKEN in place of PAT 2024-10-31 12:39:39 +00:00
da64ca577c docs: Improve error messages around Doxygen 2024-10-31 12:38:44 +00:00
232e8fafee doc: correct target for documents 2024-10-31 11:57:16 +00:00
fb686ede21 refactor: remove desktop legacy 2024-10-30 20:04:55 +00:00
ce784ab383 refactor: CoreTool use arch classes directly 2024-10-30 20:04:55 +00:00
946a2b778e refactor: rm unused coreTool include in tlscert.h 2024-10-30 20:04:55 +00:00
45bde73810 chore: settingsDialog rm unused CoreTool include 2024-10-30 17:41:17 +00:00
8b62f5b083 docs: cmake to generate doxygen 2024-10-30 16:50:12 +00:00
f74cce32a4 doc: New document mainpage 2024-10-30 16:50:12 +00:00
170d6f4889 docs: Add new doc/configuration.md 2024-10-30 16:50:12 +00:00
48a8111fc5 docs: Remove BUILD.md 2024-10-30 16:50:12 +00:00
656601f2ba docs: rm CONTRIBUTING.md 2024-10-30 16:50:12 +00:00
1880a157b6 ci: added updated winget package submission 2024-10-30 13:28:38 +00:00
3cb1980af3 docs: Fixed sponsor link 2024-10-29 14:27:39 +00:00
c24444c77e docs: Update README.md to restore sponsor link 2024-10-29 12:56:45 +00:00
675e10d7b1 docs: readme add mac os xattr note
add a tip for mac users to run xattr -c on the app post download
2024-10-28 12:22:41 +00:00
915760b899 chore: add link to wayland discussion
added an additional link to the linux wayland question pointing to the discussion
2024-10-28 11:56:08 +00:00
077412f7ec build: update package names for linux to be more unified
We are not making offical packages
    we should not set a rpm or debian revision
    we should do not have to use 'correct' names for deb / rpm
2024-10-25 20:29:05 +01:00
968037b85b build(cmd/deskflow-core):Explicit Sources 2024-10-24 15:11:03 -04:00
08d3347740 build(cmd/deskflow-legacy): Explicit Sources 2024-10-24 15:11:03 -04:00
ad6551262c build(cmd/deskflows): Explicit Sources 2024-10-24 15:11:03 -04:00
337d236f54 build(cmd/deskflowd): Explicit Sources 2024-10-24 15:11:03 -04:00
04d6895990 build(cmd/deskflowc): Explicit Sources 2024-10-24 15:11:03 -04:00
1b13c843aa build(lib/server): Explict Sources 2024-10-24 15:11:03 -04:00
9e2880f714 build(lib/platform): Explicit Sources 2024-10-24 15:11:03 -04:00
e8010eea60 build(lib/net): Explicit sources 2024-10-24 15:11:03 -04:00
75c0b53113 build(lib/mt): Explicit Sources 2024-10-24 15:11:03 -04:00
bf96a641bf build(lib/ipc): Explicit Sources 2024-10-24 15:11:03 -04:00
7db781b9bf build(lib/io): Explicit Sources 2024-10-24 15:11:03 -04:00
8bfe0c18bc build(lib/app): Explicit Sources 2024-10-24 15:11:03 -04:00
10f7b05a73 build(lib/client): Explicit Sources 2024-10-24 15:11:03 -04:00
ba97d63403 build(lib/base): Explicit Sources 2024-10-24 15:11:03 -04:00
da4b85b3fb build(lib/arch): Explicit Sources 2024-10-24 15:11:03 -04:00
5657152c58 chore(gui): Add _what's this_ for Windows service setting 2024-10-24 14:29:13 +01:00
9b4635b6d2 docs: Remote build containers badge
The build containers badge now points at a nonexistent workflow.
2024-10-23 15:24:01 -04:00
1aa6e8c6bb ci: add fedora-41 2024-10-23 14:13:37 +01:00
6846a97eec ci: Drop Docker container builds (not enough time saved)
Add user 'build' for arch to make a package
2024-10-23 14:13:37 +01:00
f26581f20a build: remove python dependency for non windows 2024-10-23 14:13:37 +01:00
01565ba9a9 ci: make sure git is installed before calling fancy-checkout
When we want to use the base runners they do not have git
   Install devscripts for debian images that will make packages
2024-10-23 14:13:37 +01:00
32b84f0a4b docs: Remove confusing reference in readme 2024-10-23 08:30:36 -04:00
d5a8dd7927 ci: remove unused libportal check from Librarires.cmake 2024-10-23 13:15:03 +01:00
dfbd612e2f doc: clean up readme 2024-10-22 20:13:17 +01:00
a406b51f96 ci: one matrix to run them all 2024-10-22 12:29:17 -04:00
b2532c81b9 ci: Add install-dependencies action 2024-10-22 12:29:17 -04:00
a362174e73 ci: only do release job when run on master 2024-10-22 09:42:32 -04:00
7b7ff81a9f build: Require libei and libportal from the system on linux
Removing remaining meson parts
2024-10-22 09:42:32 -04:00
2136af68b5 build(win32): resolve #7763 working windows installer
use correct QT_PATH
  Force install of depends
2024-10-22 10:53:51 +01:00
df91d845f7 build(win32): Link wintoast correctly 2024-10-22 10:53:51 +01:00
f967b9ed46 ci: use fancy checkout action 2024-10-21 15:24:06 -04:00
5d183c98e9 ci: Bump containers for analyze workflows 2024-10-21 14:15:05 -04:00
f3657edc80 refactor: use Q_EMIT 2024-10-21 14:30:02 +01:00
2a8a43a689 refactor: remove unused strings 2024-10-21 14:30:02 +01:00
498e3aa015 refactor: use static regularexpressions and matches 2024-10-21 14:30:02 +01:00
58323f515f refactor: use multi arg were possible 2024-10-21 14:30:02 +01:00
560345cf4f refactor: add context object for lambdas 2024-10-21 14:30:02 +01:00
90d27a174d refactor: do not include full modules in qt files 2024-10-21 14:30:02 +01:00
8b54b84880 refactor: use const for ranged loops 2024-10-21 14:30:02 +01:00
45050d3d36 refactor: use modern range for loops in place of old foreach macro 2024-10-21 14:30:02 +01:00
f0a946a0f1 refactor(SettingsWizard): Ui Less 2024-10-20 21:55:44 +01:00
db6b6b9386 refactor(SetupWizard): Foward declare appconfig 2024-10-20 21:55:44 +01:00
b10eb3baa8 refactor(SetupWizard): Do not use auto connect name for slot 2024-10-20 21:55:44 +01:00
9ea143c1df ci: unify cmake config command into a base env.CMAKE_CONFIGURE 2024-10-20 21:46:36 +01:00
a6b5879df3 ci: new mac os ci 2024-10-20 21:46:36 +01:00
1b904e7c02 ci: Normalize CI step names, descriptions, etc
Also:
- Surfaced the comment about the Kitware repo so it's more visible
- Remove the hard-coded CMake version in comment which is likely to get out of sync and confuse someone
2024-10-20 02:01:58 +01:00
f7ca548ee2 build: remove stale meson parts for wintoast 2024-10-19 20:53:10 -04:00
7c74b90620 fix scan alert #559 2024-10-19 19:49:21 -04:00
46915bff94 fix:#7760 use a proper fedora package name 2024-10-19 19:34:37 -04:00
949e1c0d71 build: Use Fetch Content for Gtest
Use Fetch Content to get gtest and gmock
2024-10-19 19:17:19 -04:00
b1fa9eadd9 build: arch package requires tomlplusplus and cli11 2024-10-19 19:00:21 -04:00
a786cdf972 chore: Set default server protocol to "Barrier" (determined by community vote)
Vote: https://github.com/deskflow/deskflow/discussions/7742
2024-10-19 23:46:42 +01:00
a5cd0fab9e feat: Option to change server protocol in GUI 2024-10-19 23:46:42 +01:00
512faeea28 test: Modularize hello back logic and add tests 2024-10-19 23:46:42 +01:00
47366f1272 feat: Dynamic client Barrier/Synergy hello back response to server 2024-10-19 23:46:42 +01:00
199f682e27 refactor: setupwizard ui is not longer the base of the class 2024-10-19 23:18:26 +01:00
afff2eb6ac refactor: serverconfigdialog ui is no longer base for the class 2024-10-19 23:18:26 +01:00
9167bf04f6 refactor: hotkeydialog ui no longer base of the class 2024-10-19 23:18:26 +01:00
0298a132c1 refactor: addclientdialog ui no longer base for the class 2024-10-19 23:18:26 +01:00
7b3d8c3dc3 refactor: actiondialog to not have ui as base of the class 2024-10-19 23:18:26 +01:00
06aa41e8f5 refactor: mainwindow ui not the base of the class 2024-10-19 23:18:26 +01:00
bf4a762124 build: use vcpkg for all depends, vcpkg action on ci to cache 2024-10-19 03:07:13 -04:00
7199e5f170 docs: Checkbox for continuous build on bug template 2024-10-18 19:09:07 -04:00
3d2883ad02 fix: remove server config dialog custom show event
Fixes Crash with Qt 6.8
2024-10-18 18:19:16 -04:00
6395630964 ci: Make integtests optional on FreeBSD and reduce CMake arg dupe
- Integration tests are flakey by nature, make them optional.
- This also includes a mini refactor of `ci.yml` to reduce some duplication.
2024-10-18 21:11:56 +01:00
a32463586c ci: Catch std::exception on toml::parse_file 2024-10-18 21:01:39 +01:00
9c9feba565 build: use File to dl toml++ if not on system 2024-10-18 15:02:34 -04:00
37fcec2554 build: arch package won't install /bin 2024-10-18 14:50:28 -04:00
246f5d59ab ci: remove unused cache step 2024-10-18 13:57:11 -04:00
710c1dd353 build: get CLI11 via file download if not on system 2024-10-18 13:34:10 -04:00
add8d5370a ci: Remove CMake presets 2024-10-18 18:23:26 +01:00
33b14ccc5c ci: cache vcpkg
Fixes:7712
2024-10-18 17:29:54 +01:00
ba5eaa4c90 build: Require cmake 3.24
Fixes:#7739
2024-10-18 15:22:35 +01:00
4ce81b59fb ci: Use cmake instead of make directly for Arch package 2024-10-18 12:19:37 +01:00
71e74735c0 build: update required ssl to 3.0+ 2024-10-18 06:49:02 +01:00
99251ad867 chore: Update feature request template
For a feature request we only want to know about the proposed feature
2024-10-17 21:39:48 +01:00
9b9ecb0d05 chore: Adjust Clang-format linter rules
120 Column Lines
 Block Indent for Bracket Align
 Custom Line Break Rules
 No Single Line Functions
2024-10-17 21:38:29 +01:00
3f2bb2531a fix: Let users select version number and build in About Dialog
Fixes: #7722
2024-10-17 19:51:00 +01:00
01d67e4614 chore: resolve cmake cap nits
Fixes: #7727
2024-10-17 13:37:50 +01:00
219958898e chore: Replace assert with warning for screen boundary issue 2024-10-17 11:17:05 +01:00
ae3bcfc809 build: Fixed deskflow-server binary name for VS Code users 2024-10-17 11:16:40 +01:00
dc9a5c0f12 build: Add gtest-args for VS Code users 2024-10-17 11:16:40 +01:00
1dc449fe0a fix: Use OPENSSL_EXE_DIR instead of OPENSSL_ROOT_DIR on Windows 2024-10-16 20:17:53 -04:00
52f616a15d ci: vcpkg cache working 2024-10-16 20:58:42 +01:00
da6b3942ae build: Linux packages with proper names 2024-10-16 16:51:24 +01:00
9a5c1a3212 chore: Remove Wayland experimental pop 2024-10-16 14:00:10 +01:00
8424ffa438 ci: Ignore .editorconfig in workflows 2024-10-15 23:08:28 +01:00
e2a0a97705 docs: Add .editorconfig file 2024-10-15 23:08:28 +01:00
78d086369b ci: Always run PR comments job 2024-10-15 22:49:35 +01:00
5f78d175c9 ci: Ignore paths for CodeQL Analysis 2024-10-15 22:19:02 +01:00
2b930a7b03 ci: Remove cmake-format linter 2024-10-15 22:03:15 +01:00
28c8aae9af ci: More consistent code style in ci.yml 2024-10-15 19:14:06 +01:00
3cc43bf1ce docs: Add other build type to bug report template 2024-10-15 18:44:34 +01:00
c78dccca71 Force LF in gitattributes 2024-10-15 18:02:20 +01:00
0a6f79fb31 build: Arch package needs pubixml 2024-10-15 17:16:29 +01:00
5925d42dbd build: allow PKGBUILD to build for more then just x86 2024-10-15 17:16:29 +01:00
6af331bd93 ci: clearer and cleaner steps 2024-10-15 14:17:33 +01:00
87b4e3b7fe fix: Check for errors before reading version string 2024-10-15 07:57:53 -04:00
23c4cadf17 build: set project description 2024-10-15 09:27:00 +01:00
6dcfcd50a2 ci: Add src/gui to coverage exclusions 2024-10-15 07:23:38 +01:00
f70528d082 build: Clean up warning for new QCheckBox signals With 6.7+ 2024-10-15 07:23:38 +01:00
f2f75ae7b9 ci: Fixed error count logic for test summary 2024-10-14 18:06:36 +01:00
572cc80577 ci: Restore pull_request trigger for codeql-analysis.yml 2024-10-14 18:00:17 +01:00
636e3eab96 feat: Respect XDG_CONFIG_HOME in server/client 2024-10-14 17:43:30 +01:00
9c4f6e6d0b chore: Change TLS dir to same as Qt config 2024-10-14 17:43:30 +01:00
3525b8a686 docs: Fixed minor typos in the bug report template 2024-10-14 17:06:24 +01:00
9b7cd1e250 docs: Add leading edge philosophy to README.md
I think it's important to help people understand the difference between Deskflow and Input Leap. e.g. We don't support Qt5, but IL seem to want to support Qt5.
2024-10-14 16:52:21 +01:00
26926a4a6a ci: run on tags v* and not on cron or dispatch 2024-10-14 09:22:28 -04:00
3991fc0d25 ci: use git version for packages 2024-10-14 09:22:28 -04:00
5cff026d7e build: get verson from git 2024-10-14 09:22:28 -04:00
e4b348c183 ci: make sure checkouts fetch tags 2024-10-14 09:22:28 -04:00
24db09b023 fix: align --display explanation in help message
Broken "." position was fixed like this.

Before:

        --display <display>  when in X mode, connect to the X server
                               at <display>
  .      --no-xinitthreads    do not call XInitThreads()

After:

        --display <display>  when in X mode, connect to the X server
                               at <display>.
        --no-xinitthreads    do not call XInitThreads()

Signed-off-by: Kentaro Hayashi <kenhys@xdump.org>
2024-10-14 13:11:30 +01:00
181c34e662 ci: attempt releases 2024-10-13 17:51:18 -04:00
ccfff7015a ci: working vcpkg cache 2024-10-13 16:15:33 -04:00
6b641a432a ci: Remove dead test-dist-upload.yml file 2024-10-13 15:42:23 -04:00
10873eddcd ci: lint-clang as composite action 2024-10-13 20:13:04 +01:00
5b76982093 ci: lint-cmake as composite action 2024-10-13 20:13:04 +01:00
c498e148b8 ci: do not auto create version tags on push to master 2024-10-13 20:13:04 +01:00
abe8146631 ci: Run CI when landing to master branch
No longer run sonar or codeQL on push to master
    They are auto run by the CI job

s
2024-10-13 20:13:04 +01:00
c630ad0952 test: Coverage for AboutDialog.cpp 2024-10-13 19:52:09 +01:00
ce35234f18 chore: Add issue not about mac os signing 2024-10-13 14:02:34 -04:00
c5247a15c7 chore: add note about known wayland issues in bug_template 2024-10-13 14:01:05 -04:00
c03e3f56a7 chore: update mono tray icons 2024-10-13 13:54:15 -04:00
821a9599ba chore: keep only a single copy of the windows icon 2024-10-13 13:54:15 -04:00
0361f850eb chore: remove unused warning icon 2024-10-13 13:54:15 -04:00
c66d7a6942 chore: Update tray icon 2024-10-13 13:54:15 -04:00
8340f106e7 chore: Update Padlock icon 2024-10-13 13:54:15 -04:00
b3775eb6fd chore: add basic .gitattributes
Don't add the items below to "Source" exports
     .github*
     .gitattributes
     .gitignore
2024-10-13 13:39:59 -04:00
e940b8526b chore: add more user files to gitignore
Add Spdx License info
  Add Cmake user files to gitignore
2024-10-13 13:37:06 -04:00
9604a9e747 ci: test results skipped if dependant skipped 2024-10-13 11:49:56 -04:00
fe67b92cdc build: Drop warnings_as_errors
This should not be used

It results in build failures when using different environments/toolchains that produce new warnings

This can especially happen on compiler or dependency updates
2024-10-12 22:13:50 -04:00
4500e7a1aa build: use @only to configure config.h 2024-10-12 21:06:55 -04:00
78a8bba7a4 refactor: move res/config.h.in -> src/lib/config.h.in 2024-10-12 21:06:55 -04:00
14dfcb672d ci: Allow ci to skip running if only specific files are changed 2024-10-12 20:37:17 -04:00
6c3b2b3e6b ci: Linting must pass before other jobs are run 2024-10-12 20:37:17 -04:00
f6b9a5f204 build: Don't force CMAKE_INSTALL_PREFIX
This should only ever be set from the outside, not the project itself

Distribution build systems will set it to the right value

This breaks installing it to a custom if desired
2024-10-12 12:59:04 -04:00
38631193b5 feat: Use native style on KDE Plasma
On Plasma it is preferred to use the default Breeze style instead of Fusion

Breeze also has dark mode support out of the box, so no need to work around that
2024-10-12 12:31:37 -04:00
c959e641cb fix: Set correct QGuiApplication::desktopFileName
The implicity default doesn't match the actual name of the desktop file.

This fixes e.g. the application icon on Wayland
2024-10-12 12:08:16 -04:00
02c5418b9e build(cmake): Require SSL 1.1.1 or higher
Link using OpenSSL provided alises
  Remove Windows specifc check ssl macro for simpler check
2024-10-12 14:23:56 +01:00
eedb3ad1c3 chore: rm unused string_utils file 2024-10-11 17:10:50 +01:00
159f49c5ee chore: use modern connections 2024-10-11 16:56:46 +01:00
80503cd2c6 docs: Add discussion value to project values in README.md 2024-10-11 08:50:24 -04:00
132e1975d3 ci: Remove cache of Python .venv as it added complexity 2024-10-11 13:24:08 +01:00
932ca44d75 build: use pragma once not ifndef def pattern for headers 2024-10-08 06:52:41 -04:00
e3ed711b98 docs: Make README.md more relevant to current repo state 2024-10-03 13:38:45 +01:00
32d36ab0be build: Bump version to 1.18.0 2024-10-02 16:13:19 +01:00
0c28a38d90 docs: Update README.md with Matrix link 2024-10-02 09:37:30 -04:00
049e34f7a5 chore: Remove word 'beta' from Wayland message 2024-10-02 09:17:57 -04:00
1226 changed files with 42363 additions and 69283 deletions

View File

@ -13,16 +13,40 @@ BasedOnStyle: LLVM
# Turn off LLVM default alignment of params with the opening bracket,
# which can be less readable in some cases in our code base.
#
# Using `AlwaysBreak` will result in:
# Using `BlockIndent` will result in:
# void fooBarBazQuxHelloWorld(
# int a,
# int b);
# int b
# );
#
# Instead of:
# void fooBarBazQuxHelloWorld(int a,
# int b);
AlignAfterOpenBracket: AlwaysBreak
AlignAfterOpenBracket: BlockIndent
# Turn off LLVM default packing of ctor initializers.
# This makes it easier to see which members were initialized and in what order.
PackConstructorInitializers: CurrentLine
# up our limit to 120
ColumnLimit: 120
# Custom Breaking rules
BreakBeforeBraces: Custom
BraceWrapping:
AfterCaseLabel: false
AfterClass: true
AfterControlStatement: Never
AfterEnum: true
AfterFunction: true
AfterNamespace: false
AfterStruct: true
AfterUnion: true
AfterExternBlock: true
BeforeCatch: false
BeforeElse: false
BeforeLambdaBody: false
BeforeWhile: false
# no single line functions
AllowShortFunctionsOnASingleLine: None

9
.editorconfig Normal file
View File

@ -0,0 +1,9 @@
root = true
[*]
end_of_line = lf
insert_final_newline = true
[{*.yml,*.yaml,*.json,CMakeLists.txt,*.cmake}]
indent_style = space
indent_size = 2

View File

@ -1,65 +0,0 @@
#
# Usage: Copy this .env.example file to .env
#
#
# App
#
# Shows the test menu in the GUI (on by default in debug mode)
# DESKFLOW_TEST_MENU=true
# Version checker URL to use (useful for testing)
# DESKFLOW_VERSION_URL="https://api.deskflow.org/version?fake=1.100.0"
# Enable debug logging in the GUI (on by default in debug mode)
# DESKFLOW_GUI_DEBUG=true
# Enable verbose logging in the GUI (always off by default)
# DESKFLOW_GUI_VERBOSE=true
# Reset all settings and delete all data on startup
# DESKFLOW_RESET_ALL=true
#
# Build
#
# [Windows] The version of Qt to build against (overrides the value in the config.yml file)
# QT_VERSION=1.2.3
#
# Packaging (optional)
#
# [Linux] Build extra packages (self-extracting tar.gz and tar.gz)
# LINUX_EXTRA_PACKAGES=true
# [Linux] Run the package command as a different user (requires sudo)
# LINUX_PACKAGE_USER=build
# [Windows] Base64 encoded PFX code signing certificate
# WINDOWS_PFX_CERTIFICATE="very-long-base64-encoded-string"
# [Windows] Password for the PFX code signing certificate
# WINDOWS_PFX_PASSWORD="super-secret-password"
# [macOS] Certificate ID for the Developer ID Application code signing certificate
# APPLE_CODESIGN_ID="Developer ID Application: Acme Inc (ABC123XYZ9)"
# [macOS] Base64 encoded P12 code signing certificate
# APPLE_P12_CERTIFICATE="very-long-base64-encoded-string"
# [macOS] Password for the P12 code signing certificate
# APPLE_P12_PASSWORD="super-secret-password"
# [macOS] Apple Team ID
# https://developer.apple.com/account/#/membership
# APPLE_TEAM_ID="ABC123XYZ9"
# [macOS] Apple ID used to notarize the app
# APPLE_NOTARY_USER="example@example.com"
# [macOS] App-specific password for the Apple ID
# https://support.apple.com/en-gb/102654
# APPLE_NOTARY_PASSWORD="super-secret-password"

9
.gitattributes vendored Normal file
View File

@ -0,0 +1,9 @@
# SPDX-FileCopyrightText: Chris Rizzitello <sithlord48@gmail.com>
# SPDX-License-Identifier: MIT
#auto handle line feed
* text=auto eol=lf
.gitattributes export-ignore
.gitignore export-ignore
.github* export-ignore

View File

@ -1,6 +1,6 @@
name: Bug report
description: If you find a bug in Deskflow, please let us know so we can fix it.
labels: ["bug", "triage", "unanswered"]
type: "Triage [bug]"
body:
- type: markdown
attributes:
@ -22,12 +22,16 @@ body:
validations:
required: true
- type: input
- type: textarea
id: version
attributes:
label: Deskflow version number
description: You can find the Deskflow version number on the about screen.
placeholder: 1.2.3
label: Deskflow version info
description: You can find the Deskflow version number on the About screen.
placeholder: |
Deskflow: 1.2.3.4 (deadc0de)
Qt: 3.2.1
System: Hannah Montana Linux (Workstation Edition)
Session: Unity (Compiz)
validations:
required: true
@ -39,9 +43,10 @@ body:
options:
# Empty option to force selection
-
- Local developer build (built it yourself)
- Deskflow package (downloaded from Deskflow)
- Community package (apt, dnf, brew, etc.)
- Deskflow package (downloaded from us)
- Local developer build (built it myself)
- Other (please specify)
default: 0
validations:
required: true
@ -50,16 +55,44 @@ body:
id: os
attributes:
label: Operating systems (OS)
description: Which operating systems (OS) are you using?
description: Operating systems (OS) in use for all servers and clients
options:
- label: Windows
- label: macOS
- label: Linux
- label: Linux (X11)
- label: Linux (Wayland)
- label: BSD-derived
- label: Other
- label: Other (please specify)
validations:
required: true
- type: checkboxes
id: linux-wayland
attributes:
label: Wayland on Linux
description: If using Wayland on Linux, please review the [known issues](https://github.com/deskflow/deskflow/discussions/7499) before reporting.
options:
- label: I have reviewed the Wayland [known issues](https://github.com/deskflow/deskflow/discussions/7499) and my issue is new
- label: I am not using Wayland on Linux
- type: checkboxes
id: mac-signing
attributes:
label: Signing on macOS
description: If using macOS and the app crashes, try [Apple's solution](https://support.apple.com/guide/mac-help/open-a-mac-app-from-an-unknown-developer-mh40616/mac) before reporting.
options:
- label: I have authorized the app to run on my Mac
- label: I am not using macOS
- type: checkboxes
id: continuous-build
attributes:
label: Continuous build
description: Please try the latest [continuous build](https://github.com/deskflow/deskflow/releases) of Deskflow. It may have a fix for your issue.
options:
- label: I have tried the latest continuous build and the issue persists
- label: I am unable to try the latest continuous build
- type: textarea
id: os-version
attributes:
@ -81,29 +114,23 @@ body:
label: Deskflow configuration
description: |
Please provide a very brief description of your configuration.
Let us know the OS of the server/host/primary and the OS of the client/guest/secondary.
This will help us understand how you're using Deskflow.
Let us know what OS your server and client are running.
placeholder: |
- Windows 11 server, macOS 15 client
- Each computer has a single monitor
- Windows is on the left, macOS is on the right
validations:
required: true
- type: textarea
id: repro-steps
attributes:
label: What steps will reproduce the problem?
description: |
Please list the steps to reproduce the issue.
Please list the _numbered steps_ to reproduce the issue.
If you're not sure, please provide as much detail as possible.
This will help us understand the problem.
placeholder: |
1. Start Deskflow
2. Click 'Configure Server'
3. Click 'Apply'
validations:
required: true
- type: textarea
id: logs

View File

@ -1,90 +1,16 @@
name: Feature request
description: Had an idea how to improve Deskflow? Share it with us.
labels: ["enhancement", "triage", "unanswered"]
type: "Triage [feature]"
body:
- type: markdown
attributes:
value: Thanks for taking the time to help us improve Deskflow.
- type: dropdown
id: project
attributes:
label: Project
description: Are you using Deskflow or a fork/derivative?
options:
# Empty option to force selection
-
- Deskflow
- Barrier
- Input Leap
- Synergy
default: 0
validations:
required: true
- type: checkboxes
id: os
attributes:
label: Operating systems (OS)
description: Which operating systems (OS) are you using?
options:
- label: Windows
- label: macOS
- label: Linux
- label: BSD-derived
- label: Other
validations:
required: true
- type: textarea
id: os-version
id: request
attributes:
label: OS versions/distros
label: Feature Request
description: |
Please provide the version number of your operating system (OS).
If you're using Linux, please provide the name of the distribution.
placeholder: |
- Windows 11
- macOS 15
- Ubuntu 24.04
- FreeBSD 14.0
validations:
required: true
- type: textarea
id: config
attributes:
label: Deskflow configuration
description: |
Please provide a very brief description of your configuration.
Let us know the OS of the server/host/primary and the OS of the client/guest/secondary.
This will help us understand how you're using Deskflow.
placeholder: |
- Windows 11 server, macOS 15 client
- Each computer has a single monitor
- Windows is on the left, macOS is on the right
validations:
required: true
- type: textarea
id: problem
attributes:
label: What problem are you trying to solve?
description: |
The most important part of problem solving is understanding the problem.
The more detail you provide, the better we can understand your idea.
“If I had only one hour to save the world,
I would spend fifty-five minutes defining the problem,
and only five minutes finding the solution.”
— Albert Einstein
validations:
required: true
- type: textarea
id: solution
attributes:
label: What solution do you propose?
description: |
Please describe the solution you have in mind.
Please describe the feature you have in mind.
validations:
required: true

View File

@ -0,0 +1,34 @@
# SPDX-FileCopyrightText: 2024 Chris Rizzitello <sithlord48@gmail.com>
# SPDX-License-Identifier: MIT
name: "Add Kitware repo"
description: "Add Kitware repo for Debian-like distros"
inputs:
distro:
description: "Ubuntu codename, Kitware uses: noble, jammy, focal"
required: true
runs:
using: "composite"
steps:
# This mirrors instructions at https://apt.kitware.com
- name: Add repo
run: |
apt update -y -qqq
apt install ca-certificates gpg wget -y -qqq
wget -O - https://apt.kitware.com/keys/kitware-archive-latest.asc 2>/dev/null \
| gpg --dearmor - \
> /usr/share/keyrings/kitware-archive-keyring.gpg
echo 'deb [signed-by=/usr/share/keyrings/kitware-archive-keyring.gpg] https://apt.kitware.com/ubuntu/ ${{ inputs.distro }} main' \
> /etc/apt/sources.list.d/kitware.list
apt update -y -qqq
env:
# Prevent apt prompting for input.
DEBIAN_FRONTEND: noninteractive
shell: bash

View File

@ -6,10 +6,10 @@ runs:
steps:
- run: |
if [[ "${{ github.ref }}" == refs/tags/* ]]; then
echo "DESKFLOW_VERSION=${{ github.ref_name }}" >> $GITHUB_ENV
fi
if [[ "${{ github.event.inputs.version }}" != "" ]]; then
echo "DESKFLOW_VERSION=${{ github.event.inputs.version }}" >> $GITHUB_ENV
echo "DESKFLOW_VERSION=$(git describe --long | sed 's/-/./g;s/v//g' | grep -o '^[0-9]*.[0-9]*.[0-9]*.[0-9]*')">> $GITHUB_ENV
if [[ "$GITHUB_REF" == *"tags/v"* ]]; then
echo "DESKFLOW_PACKAGE_VERSION=$(echo $GITHUB_REF | sed 's,refs/tags/v,,g')">> $GITHUB_ENV
else
echo "DESKFLOW_PACKAGE_VERSION=continuous">> $GITHUB_ENV
fi
shell: bash

View File

@ -1,50 +0,0 @@
name: "Setup Python venv"
description: "Creates and caches a Python virtual environment"
inputs:
cache:
description: "Cache Python venv"
default: true
setup:
description: "Setup Python venv"
default: true
python-bin:
description: "Python binary to use"
default: "python3"
cache-key:
description: "Cache key (note: hash is appended)"
required: true
runs:
using: "composite"
steps:
- name: Check cache key
if: ${{ inputs.cache }}
run: |
if [ -z "${{ inputs.cache-key }}" ]; then
echo "Cache key is required"
exit 1
fi
shell: bash
- name: Cache Python venv
if: ${{ inputs.cache }}
uses: actions/cache@v4
with:
path: .venv
key: python-venv-${{ inputs.cache-key }}-${{ hashFiles('scripts/pyproject.toml') }}
# Use bash if to make output clearer in case of skipping.
- name: Setup Python venv
run: |
if [ "${{ inputs.setup }}" = "true" ]; then
echo "Setting up Python venv"
${{ inputs.python-bin }} -m venv .venv
else
echo "Skipping Python venv setup"
fi
shell: bash

View File

@ -0,0 +1,97 @@
# SPDX-FileCopyrightText: 2024 Chris Rizzitello <sithlord48@gmail.com>
# SPDX-License-Identifier: MIT
name: "Install dependencies for deskflow"
description: "Install the dependencies needed to build deskflow"
inputs:
like:
description: "Used only on linux distro type: debian, fedora, suse, arch"
required: false
qt-version:
description: "The version of Qt to install (Windows & macOS)"
required: false
qt-install-dir:
description: "The path to install Qt into (Windows & macOS)"
required: false
outputs:
vcpkg-cmake-config:
description: "windows vcpkg output for cmaket"
value: ${{ steps.vcpkg.outputs.vcpkg-cmake-config }}
runs:
using: "composite"
steps:
- name: Install Depends
if: ${{ runner.os != 'Windows' }}
run: |
if [ "$RUNNER_OS" == "macOS" ]; then
brew install googletest openssl --quiet
elif [ "$RUNNER_OS" == "Linux" ]; then
if [ ${{inputs.like}} == "debian" ]; then
apt update -qqq > /dev/null
apt install -qqq cmake build-essential ninja-build \
xorg-dev libx11-dev libxtst-dev libssl-dev \
libglib2.0-dev libxkbfile-dev qt6-base-dev qt6-tools-dev \
libgtk-3-dev libgtest-dev libgmock-dev \
libei-dev libportal-dev libtomlplusplus-dev libcli11-dev \
help2man -y >/dev/null
elif [ ${{inputs.like}} == "fedora" ]; then
dnf install -y cmake make ninja-build gcc-c++ \
rpm-build openssl-devel glib2-devel \
libXtst-devel libxkbfile-devel qt6-qtbase-devel qt6-qttools-devel \
gtk3-devel gtest-devel gmock-devel \
libei-devel libportal-devel tomlplusplus-devel \
cli11-devel help2man
elif [ ${{inputs.like}} == "suse" ]; then
zypper refresh
zypper install -y --force-resolution \
cmake make ninja gcc-c++ rpm-build libopenssl-devel \
glib2-devel libXtst-devel libxkbfile-devel qt6-base-devel qt6-tools-devel gtk3-devel \
googletest-devel googlemock-devel libei-devel \
libportal-devel tomlplusplus-devel cli11-devel help2man
elif [ ${{ inputs.like }} == "arch" ]; then
pacman -Syu --noconfirm base-devel cmake ninja \
gcc openssl glib2 libxtst libxkbfile gtest libei libportal \
qt6-base qt6-tools qt6-svg gtk3 tomlplusplus cli11 help2man
else
echo "Unknown like"
fi
else
echo "Unknown OS: $RUNNER_OS"
fi
shell: bash
- name: Install Qt
if: ${{runner.os != 'Linux' }}
uses: jurplel/install-qt-action@v4
env:
AQT_CONFIG: ${{ github.workspace }}/.github/actions/install-dependencies/aqt.ini
with:
dir: ${{inputs.qt-install-dir}}
version: ${{inputs.qt-version}}
cache: true
cache-key-prefix: ${{matrix.target.os}}-${{inputs.qt-version}}
- name: Build and cache vcpkg
if: ${{ runner.os == 'Windows' }}
id: vcpkg
uses: sithlord48/vcpkg-action@v7
with:
pkgs: gtest openssl
extra-args: --classic
triplet: x64-windows-release
token: ${{ github.token }}
- name: Install Wix
if: ${{ runner.os == 'Windows' }}
run: |
dotnet tool install --global wix --version 5.0.2
wix extension add --global WixToolset.UI.wixext/5.0.2
wix extension add --global WixToolset.Util.wixext/5.0.2
wix extension add --global WixToolset.Firewall.wixext/5.0.2
shell: pwsh

View File

@ -0,0 +1,14 @@
[aqt]
# Using this mirror instead of download.qt.io because of timeouts in CI
baseurl: https://qt.mirror.constant.com
[requests]
hash_algorithm: sha1
[mirrors]
trusted_mirrors:
https://qt.mirror.constant.com
fallbacks:
https://qt.mirror.constant.com
https://mirrors.ocf.berkeley.edu
https://download.qt.io

View File

@ -1,26 +1,21 @@
name: "Lint error"
name: "Lint Check"
description: "Checks for lint errors and posts a helpful comment"
inputs:
format-command:
description: "The command to run to fix lint errors"
required: true
format-tool:
description: "The name of the linting tool"
required: true
runs:
using: "composite"
steps:
- name: Install Dependencies
run: pipx install --global clang-format==20.1.0
shell: bash
- name: Run format command
run: ${{ inputs.format-command }}
run: find src/ -regex '.*\.\(cpp\|hpp\|cc\|cxx\|h\|c\|m\|mm\)' -exec clang-format -i {} \;
shell: bash
- name: Find changes
id: changes
run: |
file=${{ inputs.format-tool }}.diff
file=clang-format.diff
diff=$(git diff | tee $file)
if [ -z "$diff" ]; then
@ -43,7 +38,7 @@ runs:
if: steps.changes.outputs.diff
uses: actions/upload-artifact@v4
with:
name: ${{ inputs.format-tool }}-diff
name: clang-format-diff
path: ${{ steps.changes.outputs.file }}
if-no-files-found: error
@ -54,9 +49,9 @@ runs:
code_block="\`\`\`"
summary=$(cat<<EOF
❌ \`${{ inputs.format-tool }}\`: It looks like your changes don't match our code style.
❌ \`clang-format\`: It looks like your changes don't match our code style.
🛠️ Please either run \`${{ inputs.format-command }}\` or apply this patch with \`git apply\`:
🛠️ Please either run \`clang-format -i\` on the file or apply this patch with \`git apply\`:
[\`${{ steps.changes.outputs.file }}\`](${{ steps.upload.outputs.artifact-url }})
$code_block diff
@ -67,7 +62,7 @@ runs:
echo "$summary" >> $GITHUB_STEP_SUMMARY
file="ci_summary.md"
echo "❌🛠️ \`${{ inputs.format-tool }}\`: Lint errors, fix available." >> $file
echo "❌🛠️ \`clang-format\`: Lint errors, fix available." >> $file
echo "file=$file" >> $GITHUB_OUTPUT
shell: bash
@ -75,7 +70,7 @@ runs:
if: steps.summary.outputs.file
uses: actions/upload-artifact@v4
with:
name: summary-${{ inputs.format-tool }}
name: summary-clang-format
path: ${{ steps.summary.outputs.file }}
if-no-files-found: error

View File

@ -15,12 +15,12 @@ runs:
using: "composite"
steps:
- name: Unit tests
- name: Unit Tests
id: unittests
env:
QT_QPA_PLATFORM: offscreen
run: |
./${{ inputs.bin-dir }}/unittests
ctest --test-dir "build/src/unittests" --output-on-failure
result=$?
if [ $result -ne 0 ]; then
@ -29,16 +29,16 @@ runs:
shell: bash
continue-on-error: true
- name: Integration tests
id: integtests
- name: Legacy Tests
id: legacytests
env:
QT_QPA_PLATFORM: offscreen
run: |
./${{ inputs.bin-dir }}/integtests
./${{ inputs.bin-dir }}/legacytests
result=$?
if [ $result -ne 0 ]; then
echo "Integration tests failed with code: $result" >> $GITHUB_STEP_SUMMARY
echo "Legacy tests failed with code: $result" >> $GITHUB_STEP_SUMMARY
fi
shell: bash
continue-on-error: true
@ -49,11 +49,11 @@ runs:
pass="✅ Pass"
fail="❌ Fail"
unittests_outcome="${{ steps.unittests.outcome }}"
integtests_outcome="${{ steps.integtests.outcome }}"
legacytests_outcome="${{ steps.legacytests.outcome }}"
unittests=$( [ "$unittests_outcome" = "success" ] && echo $pass || echo $fail )
integtests=$( [ "$integtests_outcome" = "success" ] && echo $pass || echo $fail )
legacytests=$( [ "$legacytests_outcome" = "success" ] && echo $pass || echo $fail )
echo "unittests=$unittests" >> $GITHUB_OUTPUT
echo "integtests=$integtests" >> $GITHUB_OUTPUT
echo "legacytests=$legacytests" >> $GITHUB_OUTPUT
shell: bash
- name: Summary row
@ -64,7 +64,7 @@ runs:
row=""
row+="| ${{ inputs.job }} "
row+="| ${{ steps.results.outputs.unittests }} "
row+="| ${{ steps.results.outputs.integtests }} |"
row+="| ${{ steps.results.outputs.legacytests }} "
echo "$row" > $file
echo "file=$file" > $GITHUB_OUTPUT

View File

@ -1,13 +1,24 @@
name: "Test Summary"
description: "Creates a markdown table from test results and uploads a summary file"
inputs:
download-pattern:
description: "The pattern to download test result rows"
required: false
default: test-result-*
upload-name:
description: "The artifact upload name for the summary"
required: false
default: summary-tests
runs:
using: "composite"
steps:
- name: Download test result rows
uses: actions/download-artifact@v4
with:
pattern: test-result-*
pattern: ${{ inputs.download-pattern }}
merge-multiple: true
path: rows
@ -44,24 +55,30 @@ runs:
table="${{ steps.markdown-table.outputs.markdown }}"
if [ -z "$table" ]; then
echo "No test results found" > $GITHUB_STEP_SUMMARY
echo "No test results found" | tee $GITHUB_STEP_SUMMARY >&2
exit 1
else
echo "$table" > $GITHUB_STEP_SUMMARY
fi
count=$(echo -n "$table" | grep -o "❌" | wc -l || echo 0)
count=$(echo "$table" | awk -v RS='' '{gsub(/[^❌]/, ""); print length}')
file="ci-summary.md"
if [ $count -gt 0 ]; then
file="ci-summary.md"
echo "❌🔬 Tests failed: $count" > $file
echo "❌🔬 Tests failed: $count" | tee $file
echo "file=$file" >> $GITHUB_OUTPUT
else
# For debugging; don't send success to CI summary (reduce noise).
echo > $file
echo "✅🔬 All tests passed"
fi
shell: bash
- name: Upload CI summary
if: steps.summary.outputs.file
uses: actions/upload-artifact@v4
with:
name: summary-tests
name: ${{ inputs.upload-name }}
path: ${{ steps.summary.outputs.file }}
if-no-files-found: error

View File

@ -0,0 +1,32 @@
name: Winget Publish
description: A composite action to publish packages to the Windows Package Manager (Winget) repository
inputs:
release-version:
description: "Version to publish to Winget package manager (without 'v' prefix)"
required: true
token:
description: "GitHub token with public read permissions on the source repo"
required: true
runs:
using: "composite"
steps:
- name: Submit package to Windows Package Manager Community Repository
if: ${{ runner.os == 'Windows' }}
env:
GITHUB_TOKEN: ${{ inputs.token }}
run: |
# Download latest wingetcreate
Invoke-WebRequest https://aka.ms/wingetcreate/latest -OutFile wingetcreate.exe
$packageId = "Deskflow.Deskflow"
$installerUrl = "https://github.com/deskflow/deskflow/releases/download/v${{ inputs.release-version }}/deskflow-${{ inputs.release-version }}-win-x64.msi"
# Submit package update
.\wingetcreate.exe update "$packageId" `
--version "${{ inputs.release-version }}" `
--urls "$installerUrl" `
--submit `
--token "${{ inputs.token }}"
shell: pwsh

View File

@ -1,17 +0,0 @@
# syntax=docker/dockerfile:1
ARG BASE_IMAGE
FROM $BASE_IMAGE AS base
FROM base AS deps
RUN pacman -Syu --noconfirm git python sudo && \
pacman -Scc --noconfirm
RUN useradd -m build
WORKDIR /app
RUN --mount=type=bind,target=/app,rw \
./scripts/install_deps.py && \
pacman -Scc --noconfirm

View File

@ -1,17 +0,0 @@
# syntax=docker/dockerfile:1
ARG BASE_IMAGE
FROM $BASE_IMAGE AS base
FROM base AS deps
RUN apt update && \
apt dist-upgrade -y && \
apt install -y git python3 && \
apt clean
WORKDIR /app
RUN --mount=type=bind,target=/app,rw \
./scripts/install_deps.py && \
apt clean

View File

@ -1,16 +0,0 @@
# syntax=docker/dockerfile:1
ARG BASE_IMAGE
FROM $BASE_IMAGE AS base
FROM base AS deps
RUN dnf upgrade -y && \
dnf install -y git python3 && \
dnf clean all
WORKDIR /app
RUN --mount=type=bind,target=/app,rw \
./scripts/install_deps.py && \
dnf clean all

View File

@ -1,17 +0,0 @@
# syntax=docker/dockerfile:1
ARG BASE_IMAGE
FROM $BASE_IMAGE AS base
FROM base AS deps
RUN zypper refresh && \
zypper update -y && \
zypper install -y git python3 && \
zypper clean --all
WORKDIR /app
RUN --mount=type=bind,target=/app,rw \
./scripts/install_deps.py && \
zypper clean --all

View File

@ -1,128 +0,0 @@
# Weekly build of the Linux Docker containers.
#
# The objective is to reduce the problem where package updates often break the build process
# due to transient network errors.
#
# We use Docker Buildx instead of Docker Automated Builds so that we can create an image that is
# always at most a week out of date (instead of the last time a Dockerfile change was pushed).
name: Build containers
on:
workflow_dispatch:
schedule:
- cron: "0 5 * * 0"
jobs:
build-containers:
name: ${{ matrix.os.name }}
runs-on: ${{ matrix.os.runs-on }}
if: ${{ vars.BUILD_CONTAINERS }}
timeout-minutes: 10
strategy:
# Build all images even if some fail.
fail-fast: false
matrix:
os:
- name: debian-13-amd64
runs-on: ubuntu-latest
config-dir: debian
base-image: debian:trixie-slim
platform: amd64
- name: debian-12-amd64
runs-on: ubuntu-latest
config-dir: debian
base-image: debian:12-slim
platform: amd64
- name: debian-12-arm64
runs-on: ubuntu-24.04-2-core-arm64
config-dir: debian
base-image: arm64v8/debian:12-slim
platform: arm64
- name: ubuntu-24.04-amd64
runs-on: ubuntu-latest
config-dir: debian
base-image: ubuntu:24.04
platform: amd64
- name: ubuntu-22.04-amd64
runs-on: ubuntu-latest
config-dir: debian
base-image: ubuntu:22.04
platform: amd64
- name: fedora-40-amd64
runs-on: ubuntu-latest
config-dir: fedora
base-image: fedora:40
platform: amd64
- name: fedora-40-arm64
runs-on: ubuntu-24.04-2-core-arm64
config-dir: fedora
base-image: arm64v8/fedora:40
platform: arm64
- name: fedora-39-amd64
runs-on: ubuntu-latest
config-dir: fedora
base-image: fedora:39
platform: amd64
- name: rockylinux-9-amd64
runs-on: ubuntu-latest
config-dir: fedora
base-image: rockylinux:9
platform: amd64
- name: almalinux-9-amd64
runs-on: ubuntu-latest
config-dir: fedora
base-image: almalinux:9
platform: amd64
- name: opensuse-amd64
runs-on: ubuntu-latest
config-dir: opensuse
base-image: opensuse/tumbleweed:latest
platform: amd64
- name: archlinux-amd64
runs-on: ubuntu-latest
config-dir: archlinux
base-image: archlinux:latest
platform: amd64
- name: manjaro-amd64
config-dir: archlinux
runs-on: ubuntu-latest
base-image: manjarolinux/base:latest
platform: amd64
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Login to Docker Hub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Build and push
uses: docker/build-push-action@v6
with:
push: true
context: .
file: ./.github/docker/${{ matrix.os.config-dir }}/Dockerfile
tags: deskflow/deskflow:${{ matrix.os.name }}
build-args: BASE_IMAGE=${{ matrix.os.base-image }}
platforms: linux/${{ matrix.os.platform }}

View File

@ -11,7 +11,7 @@ name: CI comment
on:
workflow_run:
workflows: ["CI"]
workflows: ["Continuous Integration"]
types:
- completed

View File

@ -1,76 +0,0 @@
{
"distro": [
{
"name": "debian-13-amd64",
"container": "deskflow/deskflow:debian-13-amd64",
"runs-on": "ubuntu-latest",
"extra-packages": true
},
{
"name": "debian-12-arm64",
"container": "deskflow/deskflow:debian-12-arm64",
"runs-on": "ubuntu-24.04-4-core-arm64",
"extra-packages": true
},
{
"name": "debian-12-amd64",
"container": "deskflow/deskflow:debian-12-amd64",
"runs-on": "ubuntu-latest",
"extra-packages": true
},
{
"name": "ubuntu-24.04-amd64",
"container": "deskflow/deskflow:ubuntu-24.04-amd64",
"runs-on": "ubuntu-latest",
"extra-dep-args": "--meson-no-system libportal --meson-static libportal --subprojects",
"extra-cmake-args": "-DSYSTEM_LIBPORTAL=OFF -DSTATIC_LIBPORTAL=ON"
},
{
"name": "ubuntu-22.04-amd64",
"container": "deskflow/deskflow:ubuntu-22.04-amd64",
"runs-on": "ubuntu-latest"
},
{
"name": "fedora-40-arm64",
"container": "deskflow/deskflow:fedora-40-arm64",
"runs-on": "ubuntu-24.04-4-core-arm64"
},
{
"name": "fedora-40-amd64",
"container": "deskflow/deskflow:fedora-40-amd64",
"runs-on": "ubuntu-latest"
},
{
"name": "fedora-39-amd64",
"container": "deskflow/deskflow:fedora-39-amd64",
"runs-on": "ubuntu-latest"
},
{
"name": "opensuse-amd64",
"container": "deskflow/deskflow:opensuse-amd64",
"runs-on": "ubuntu-latest"
},
{
"name": "rockylinux-9-amd64",
"container": "deskflow/deskflow:rockylinux-9-amd64",
"runs-on": "ubuntu-latest"
},
{
"name": "almalinux-9-amd64",
"container": "deskflow/deskflow:almalinux-9-amd64",
"runs-on": "ubuntu-latest"
},
{
"name": "archlinux-amd64",
"container": "deskflow/deskflow:archlinux-amd64",
"runs-on": "ubuntu-latest",
"package-user": "build"
},
{
"name": "manjaro-amd64",
"container": "deskflow/deskflow:manjaro-amd64",
"runs-on": "ubuntu-latest",
"package-user": "build"
}
]
}

View File

@ -1,374 +0,0 @@
# All-in-one continuous integration (CI) workflow.
# Runs on all platforms (Windows, macOS, and Linux)
# for all events (pull request, release, and schedule).
name: CI
on:
workflow_dispatch:
inputs:
version:
description: Deskflow version number
pull_request:
types:
- opened
- reopened
- synchronize
- ready_for_review
schedule:
- cron: "0 5 * * *" # 5am UTC
env:
GIT_SHA: ${{ github.event.pull_request.head.sha || github.sha }}
PACKAGE_PREFIX: "deskflow"
PACKAGE_PATH: ./dist
jobs:
pr-comment-flags:
runs-on: ubuntu-latest
if: ${{ github.event_name == 'pull_request' }}
outputs:
no-sonar: ${{ steps.check.outputs.no-sonar }}
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Check PR comment for flags
id: check
env:
PR_BODY: ${{ github.event.pull_request.body }}
run: |
no_sonar="{no-sonar}"
if echo $PR_BODY | grep -q "$no_sonar"; then
echo "Flag $no_sonar found in PR body."
echo "no-sonar=true" >> $GITHUB_OUTPUT
else
echo "No $no_sonar flag found in PR body."
fi
# Quality gate to allow PR merge, used in the branch protection rules.
ci-passed:
runs-on: ubuntu-latest
needs: [lint-cmake, lint-clang, windows, macos, linux, unix]
steps:
- run: echo "✅ CI passed" > $GITHUB_STEP_SUMMARY
# Summary of test results, combined from test result artifacts.
# Runs even if the tests fail to provide a summary of the failures.
test-results:
needs: [windows, macos, linux]
if: always()
runs-on: ubuntu-latest
timeout-minutes: 5
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Test summary
uses: ./.github/actions/test-summary
lint-cmake:
if: ${{ github.event_name == 'pull_request' }}
uses: ./.github/workflows/lint-cmake.yml
lint-clang:
if: ${{ github.event_name == 'pull_request' }}
uses: ./.github/workflows/lint-clang.yml
analyse-valgrind:
if: ${{ github.event_name == 'pull_request' }}
uses: ./.github/workflows/valgrind-analysis.yml
analyse-codeql:
if: ${{ github.event_name == 'pull_request' }}
uses: ./.github/workflows/codeql-analysis.yml
analyse-sonarcloud:
needs: pr-comment-flags
if: ${{ github.event_name == 'pull_request' && needs.pr-comment-flags.outputs.no-sonar != 'true' }}
uses: ./.github/workflows/sonarcloud-analysis.yml
secrets:
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
windows:
name: ${{ matrix.target.name }}
runs-on: ${{ matrix.target.runs-on }}
container: ${{ matrix.target.container }}
timeout-minutes: 20
strategy:
# Normally, we want to fail fast, but in this case we shouldn't since one target may
# fail due to transient issues unrelated to the build.
fail-fast: false
matrix:
target:
- name: windows-2022-x64
runs-on: ${{ vars.CI_WINDOWS_RUNNER || 'windows-2022' }}
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Get version
uses: ./.github/actions/get-version
- name: Cache vcpkg dir
uses: actions/cache@v4
with:
# We also need to cache the `LOCALAPPDATA` dir; without doing so, openssl
# rebuilds (after it is detected in cache) every time, which takes around 10 mins.
path: |
vcpkg
vcpkg_installed
${{ env.LOCALAPPDATA }}/vcpkg
key: vcpkg-${{ runner.os }}-${{ hashFiles('vcpkg.json', 'vcpkg-configuration.json') }}
# Should only restore the .venv directory from cache.
- name: Init Python venv
uses: ./.github/actions/init-python
with:
cache-key: ci-${{ matrix.target.name }}
setup: false
- name: Cache deps dir
uses: actions/cache@v4
with:
path: ./deps
key: ${{ runner.os }}-deps-${{ hashFiles('config.yaml') }}
# This effectively runs `vcvarsall.bat`, etc. It's not actually installing
# VC++ as that's already pre-installed on the Windows runner.
- name: Setup VC++ environment
uses: ilammy/msvc-dev-cmd@v1
# Install Ninja with an action instead of using Chocolatey, as it's more
# reliable and faster. The Ninja install action is pretty good as it
# downloads directly from the `ninja-build` GitHub project releases.
- name: Install Ninja
uses: seanmiddleditch/gha-setup-ninja@master
- name: Install dependencies
env:
VCPKG_ROOT: "" # Unset deliberately to suppress 'already installed' warning.
run: python ./scripts/install_deps.py
- name: Configure
run: cmake -B build --preset=windows-release
- name: Build
run: cmake --build build -j8
- name: Tests
uses: ./.github/actions/run-tests
timeout-minutes: 2
with:
job: ${{ matrix.target.name }}
- name: Package
run: python ./scripts/package.py
env:
WINDOWS_PFX_CERTIFICATE: ${{ secrets.WINDOWS_PFX }}
WINDOWS_PFX_PASSWORD: ${{ secrets.WINDOWS_PFX_PASS }}
- name: Upload
uses: actions/upload-artifact@v4
with:
name: ${{ env.PACKAGE_PREFIX }}-${{ matrix.target.name }}
path: ${{ env.PACKAGE_PATH }}
macos:
name: ${{ matrix.target.name }}
runs-on: ${{ matrix.target.os }}
timeout-minutes: ${{ matrix.target.timeout }}
defaults:
run:
shell: ${{ matrix.target.shell }}
strategy:
# Normally, we want to fail fast, but in this case we shouldn't since one target may
# fail due to transient issues unrelated to the build.
fail-fast: false
matrix:
target:
- name: "macos-14-arm64"
timeout: 10
os: "macos-14"
arch: arm64
shell: "/usr/bin/arch -arch arm64e /bin/bash --noprofile --norc -eo pipefail {0}"
- name: ${{ vars.CI_MAC_INTEL_NAME || 'macos-13-x64' }}
timeout: 20
os: ${{ vars.CI_MAC_INTEL_RUNNER || 'macos-13' }}
arch: x64
shell: "bash"
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Get version
uses: ./.github/actions/get-version
# Should only restore the .venv directory from cache.
- name: Setup Python venv
uses: ./.github/actions/init-python
with:
cache-key: ci-${{ matrix.target.name }}
setup: false
- name: Cache deps dir
uses: actions/cache@v4
with:
path: ./deps
key: ${{ runner.os }}-deps-${{ hashFiles('config.yaml') }}
- name: Install dependencies
run: ./scripts/install_deps.py
- name: Configure
run: cmake -B build --preset=macos-release
- name: Build
run: cmake --build build -j8
- name: Tests
uses: ./.github/actions/run-tests
timeout-minutes: 2
with:
job: ${{ matrix.target.name }}
- name: Package
run: ./scripts/package.py
env:
APPLE_CODESIGN_ID: ${{ secrets.APPLE_CODESIGN_ID }}
APPLE_P12_CERTIFICATE: ${{ secrets.APPLE_P12_CERTIFICATE }}
APPLE_P12_PASSWORD: ${{ secrets.APPLE_P12_PASSWORD }}
APPLE_NOTARY_USER: ${{ secrets.APPLE_NOTARY_USER }}
APPLE_NOTARY_PASSWORD: ${{ secrets.APPLE_NOTARY_PASSWORD }}
APPLE_TEAM_ID: ${{ secrets.APPLE_TEAM_ID }}
- name: Upload
uses: actions/upload-artifact@v4
with:
name: ${{ env.PACKAGE_PREFIX }}-${{ matrix.target.name }}
path: ${{ env.PACKAGE_PATH }}
linux-matrix:
runs-on: ubuntu-latest
outputs:
json-matrix: ${{ steps.filter.outputs.json }}
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Filter JSON
uses: ./.github/actions/filter-json
id: filter
with:
json-file: .github/workflows/ci-linux.json
condition: '"${{ vars.CI_USE_LINUX_ARM_RUNNER }}" != "true"'
jq-filter: .distro |= map(select(.["runs-on"] | contains("arm64") | not))
linux:
needs: linux-matrix
name: linux-${{ matrix.distro.name }}
runs-on: ${{ matrix.distro.runs-on }}
container: ${{ matrix.distro.container }}
timeout-minutes: 20
strategy:
# Normally, we want to fail fast, but in this case we shouldn't since one distro may
# fail due to transient issues unrelated to the build.
fail-fast: false
matrix: ${{fromJson(needs.linux-matrix.outputs.json-matrix)}}
steps:
- name: Checkout
uses: actions/checkout@v4
# Should only restore the .venv directory from cache.
- name: Setup Python venv
uses: ./.github/actions/init-python
with:
cache-key: ci-${{ matrix.distro.name }}
setup: false
- name: Get version
uses: ./.github/actions/get-version
- name: Config Git safe dir
run: git config --global --add safe.directory $GITHUB_WORKSPACE
- name: Install dependencies
run: ./scripts/install_deps.py ${{ matrix.distro.extra-dep-args }}
env:
# Prevent apt prompting for input.
DEBIAN_FRONTEND: noninteractive
- name: Configure
run: cmake -B build --preset=linux-release ${{ matrix.distro.extra-cmake-args }}
- name: Build
run: cmake --build build -j8
- name: Tests
uses: ./.github/actions/run-tests
timeout-minutes: 2
with:
job: linux-${{ matrix.distro.name }}
- name: Package
env:
LINUX_EXTRA_PACKAGES: ${{ matrix.distro.extra-packages }}
LINUX_PACKAGE_USER: ${{ matrix.distro.package-user }}
run: ./scripts/package.py
- name: Upload
uses: actions/upload-artifact@v4
with:
name: ${{ env.PACKAGE_PREFIX }}-${{ matrix.distro.name }}
path: ${{ env.PACKAGE_PATH }}
# Technically, "unix" is a misnomer, but we use it here to mean "Unix-like BSD-derived".
unix:
name: unix-${{ matrix.distro.name }}
runs-on: ${{ vars.CI_UNIX_RUNNER || 'ubuntu-24.04' }}
timeout-minutes: 20
env:
DESKFLOW_BUILD_CMD: |
./scripts/install_deps.sh;
cmake -B build;
cmake --build build -j16;
export QT_QPA_PLATFORM=offscreen;
./build/bin/unittests
./build/bin/integtests
strategy:
fail-fast: false
matrix:
distro:
- name: freebsd
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Build on FreeBSD
if: ${{ matrix.distro.name == 'freebsd' }}
uses: vmactions/freebsd-vm@v1
with:
usesh: true
run: ${{ env.DESKFLOW_BUILD_CMD }}

View File

@ -1,8 +1,25 @@
name: "CodeQL Analysis"
# According to the docs, the CodeQL workflow should be triggered directly by push to master
# and by pull requests (we only run this on open PRs as it's very slow). We also use the
# `workflow_dispatch` event is also enabled to allow manual triggering of the workflow for testing.
#
# We should not trigger this workflow with `workflow_call` as this causes the error:
# "1 configuration present on `master` was not found"
#
# Sadly, this means we can't roll it into our monolithic CI workflow.
on:
workflow_dispatch:
workflow_call:
pull_request:
types: [opened, synchronize, reopened, ready_for_review]
paths-ignore:
- '**/*.md'
- '.github/ISSUE_TEMPLATE/**'
- '.editorconfig'
- '.env-example'
- '.gitignore'
- '.gitattributes'
- 'cspell.json'
push:
branches: [master]
@ -11,8 +28,8 @@ jobs:
if: ${{ !github.event.pull_request.draft }}
name: Analyze
runs-on: ${{ vars.CODEQL_RUNNER || 'ubuntu-24.04' }}
container: deskflow/deskflow:ubuntu-24.04-amd64
runs-on: ubuntu-latest
container: debian:trixie-slim
timeout-minutes: 20
strategy:
@ -21,24 +38,18 @@ jobs:
language: ["cpp"]
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Install container dependencies
run: |
apt update -qqq > /dev/null
apt install -qqq git > /dev/null
- name: Config Git safe dir
run: git config --global --add safe.directory $GITHUB_WORKSPACE
# Should only restore the .venv directory from cache.
- name: Init Python venv
uses: ./.github/actions/init-python
with:
cache-key: "codeql"
setup: false
- name: Fancy Checkout
uses: sithlord48/fancy-checkout@v1
- name: Install dependencies
run: ./scripts/install_deps.py
env:
# Prevent apt prompting for input.
DEBIAN_FRONTEND: noninteractive
uses: ./.github/actions/install-dependencies
with:
like: "debian"
- name: Initialize CodeQL
uses: github/codeql-action/init@v3

View File

@ -0,0 +1,456 @@
# All-in-one continuous integration (CI) workflow.
# Runs on all platforms (Windows, macOS, and Linux)
# for all events (pull request, release, and schedule).
name: Continuous Integration
on:
push:
branches: [master]
tags:
- 'v*'
pull_request:
types:
- opened
- reopened
- synchronize
- ready_for_review
paths-ignore:
- '**/*.md'
- '.github/ISSUE_TEMPLATE/**'
- '.editorconfig'
- '.env-example'
- '.gitignore'
- '.gitattributes'
- 'cspell.json'
env:
GIT_SHA: ${{ github.event.pull_request.head.sha || github.sha }}
PACKAGE_PREFIX: "deskflow"
PACKAGE_PATH: ./dist
CMAKE_CONFIGURE: "cmake -Bbuild -DCMAKE_BUILD_TYPE=Release -DSKIP_BUILD_TESTS=ON -DCMAKE_COMPILE_WARNING_AS_ERROR=ON"
jobs:
# Always run this job, even if not on PR, since other jobs need it.
pr-comment-flags:
runs-on: ubuntu-latest
needs: lint-check
outputs:
no-sonar: ${{ steps.check.outputs.no-sonar }}
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Check PR comment for flags
if: ${{ github.event_name == 'pull_request' }}
id: check
env:
PR_BODY: ${{ github.event.pull_request.body }}
run: |
no_sonar="{no-sonar}"
if echo $PR_BODY | grep -q "$no_sonar"; then
echo "Flag $no_sonar found in PR body."
echo "no-sonar=true" >> $GITHUB_OUTPUT
else
echo "No $no_sonar flag found in PR body."
fi
# Quality gate to allow PR merge, used in the branch protection rules.
ci-passed:
runs-on: ubuntu-latest
needs: [test-results, unix, flatpak]
steps:
- run: echo "✅ CI passed" > $GITHUB_STEP_SUMMARY
# Summary of test results, combined from test result artifacts.
# Runs even if the tests fail to provide a summary of the failures.
test-results:
needs: main-build
if: always() && needs.main-build.result != 'skipped'
runs-on: ubuntu-latest
timeout-minutes: 5
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Test summary
uses: ./.github/actions/test-summary
reuse-lint:
runs-on: ubuntu-latest
timeout-minutes: 5
steps:
- uses: actions/checkout@v4
- name: REUSE Compliance Check
uses: fsfe/reuse-action@v4
lint-check:
needs: [reuse-lint]
runs-on: ubuntu-latest
timeout-minutes: 5
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Lint Checker
uses: ./.github/actions/lint-check
analyse-valgrind:
needs: lint-check
if: ${{ github.event_name == 'pull_request' }}
uses: ./.github/workflows/valgrind-analysis.yml
analyse-sonarcloud:
needs: pr-comment-flags
if: ${{ needs.pr-comment-flags.outputs.no-sonar != 'true' }}
uses: ./.github/workflows/sonarcloud-analysis.yml
secrets:
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
main-build:
needs: lint-check
name: ${{ matrix.target.name }}
runs-on: ${{ matrix.target.runs-on }}
container: ${{ matrix.target.container }}
timeout-minutes: ${{ matrix.target.timeout }}
strategy:
# Normally, we want to fail fast, but in this case we shouldn't since one target may
# fail due to transient issues unrelated to the build.
fail-fast: false
matrix:
target:
- name: "windows-2022-x64"
runs-on: "windows-2022"
timeout: 30
config-args: "-G Ninja"
qt-install-dir: "C:"
- name: "macos-14-arm64"
runs-on: "macos-14"
timeout: 10
config-args: "-DCMAKE_OSX_ARCHITECTURES=\"arm64\" -DCMAKE_OSX_SYSROOT=/Applications/Xcode_15.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk"
qt-install-dir: "/Users/runner"
- name: "macos-13-x64"
runs-on: macos-13
timeout: 20
config-args: "-DCMAKE_OSX_ARCHITECTURES=\"x86_64\" -DCMAKE_OSX_SYSROOT=/Applications/Xcode_15.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk"
qt-install-dir: "/Users/runner"
- name: "debian-13-x86_64"
runs-on: ubuntu-latest
container: debian:trixie-slim
like: "debian"
timeout: 20
config-args: "-G Ninja -DCMAKE_INSTALL_PREFIX=/usr"
- name: "debian-13-arm64"
runs-on: ubuntu-24.04-arm
container: debian:trixie-slim
like: "debian"
timeout: 20
config-args: "-G Ninja -DCMAKE_INSTALL_PREFIX=/usr"
- name: "fedora-42-x86_64"
runs-on: ubuntu-latest
container: fedora:42
like: "fedora"
timeout: 20
config-args: "-G Ninja -DCMAKE_INSTALL_PREFIX=/usr"
- name: "fedora-42-arm64"
runs-on: ubuntu-24.04-arm
container: fedora:42
like: "fedora"
timeout: 20
config-args: "-G Ninja -DCMAKE_INSTALL_PREFIX=/usr"
- name: "fedora-41-x86_64"
runs-on: ubuntu-latest
container: fedora:41
like: "fedora"
timeout: 20
config-args: "-G Ninja -DCMAKE_INSTALL_PREFIX=/usr"
- name: "fedora-41-arm64"
runs-on: ubuntu-24.04-arm
container: fedora:41
like: "fedora"
timeout: 20
config-args: "-G Ninja -DCMAKE_INSTALL_PREFIX=/usr"
- name: "fedora-40-x86_84"
runs-on: ubuntu-latest
container: fedora:40
like: "fedora"
timeout: 20
config-args: "-G Ninja -DCMAKE_INSTALL_PREFIX=/usr"
- name: "fedora-40-arm64"
runs-on: ubuntu-24.04-arm
container: fedora:40
like: "fedora"
timeout: 20
config-args: "-G Ninja -DCMAKE_INSTALL_PREFIX=/usr"
- name: "opensuse-x86_84"
runs-on: ubuntu-latest
container: opensuse/tumbleweed:latest
like: "suse"
timeout: 20
config-args: "-G Ninja -DCMAKE_INSTALL_PREFIX=/usr"
- name: "opensuse-arm64"
runs-on: ubuntu-24.04-arm
container: opensuse/tumbleweed:latest
like: "suse"
timeout: 20
config-args: "-G Ninja -DCMAKE_INSTALL_PREFIX=/usr"
- name: "archlinux-x86_84"
runs-on: ubuntu-latest
container: archlinux:latest
like: "arch"
timeout: 20
config-args: "-G Ninja -DCMAKE_INSTALL_PREFIX=/usr"
- name: "ubuntu-25.04-x86_64"
runs-on: ubuntu-latest
container: ubuntu:25.04
like: "debian"
timeout: 20
config-args: "-G Ninja -DCMAKE_INSTALL_PREFIX=/usr"
- name: "ubuntu-25.04-arm64"
runs-on: ubuntu-24.04-arm
container: ubuntu:25.04
like: "debian"
timeout: 20
config-args: "-G Ninja -DCMAKE_INSTALL_PREFIX=/usr"
steps:
# Make sure the container has git before we do anything else
- name: Install Git on Container
if: ${{ matrix.target.container }}
shell: bash
run : |
if [ "${{matrix.target.like}}" == "debian" ]; then
apt update -qqq > /dev/null && apt install -qqq git devscripts > /dev/null
elif [ "${{matrix.target.like}}" == "fedora" ]; then
dnf install -y git
elif [ "${{matrix.target.like}}" == "suse" ]; then
zypper refresh
zypper install -y --force-resolution git
elif [ "${{matrix.target.like}}" == "arch" ]; then
pacman -Syu --noconfirm git
else
echo "Unknown: ${{matrix.target.like}}"
fi
# Fancy checkout gets all the tags
# it also makes sure we can use git --describe correctly
- name: Fancy Checkout
uses: sithlord48/fancy-checkout@v1
# This effectively runs `vcvarsall.bat`, etc. It's not actually installing
# VC++ as that's already pre-installed on the Windows runner.
- name: Setup VC++ environment
if: ${{ runner.os == 'Windows' }}
uses: ilammy/msvc-dev-cmd@v1
- name: Install dependencies
id: get-deps
uses: ./.github/actions/install-dependencies
with:
qt-version: 6.9.0
qt-install-dir: ${{matrix.target.qt-install-dir}}
like: ${{ matrix.target.like }}
- name: Get version
uses: ./.github/actions/get-version
- name: Configure
run: ${{env.CMAKE_CONFIGURE}} ${{ matrix.target.config-args }} ${{ steps.get-deps.outputs.vcpkg-cmake-config }} -DPACKAGE_VERSION_LABEL="${{env.DESKFLOW_PACKAGE_VERSION}}"
- name: Build
shell: bash
run: |
if [[ "${{matrix.target.like}}" != "arch" ]]; then
cmake --build build --config Release -j8 --target package
else
cmake --build build --config Release -j8
useradd -m build
sudo chown -R build build
cd build
sudo -u build makepkg -s
export OSNAME=$(cat /etc/os-release | grep ^ID= | sed 's/ID=//g')
export ARCH=$(uname -m)
mv *.pkg.tar.zst deskflow-${{env.DESKFLOW_PACKAGE_VERSION}}-${OSNAME}-${ARCH}.pkg.tar.zst
cd ..
fi
- name: Tests
uses: ./.github/actions/run-tests
timeout-minutes: 2
with:
job: ${{ matrix.target.name }}
- name: Upload
uses: actions/upload-artifact@v4
with:
name: package-${{ env.PACKAGE_PREFIX }}-${{ matrix.target.name }}
path: ${{github.workspace}}/build/deskflow[-_]*.*
# Technically, "unix" is a misnomer, but we use it here to mean "Unix-like BSD-derived".
unix:
needs: lint-check
name: unix-${{ matrix.distro.name }}
runs-on: ${{ vars.CI_UNIX_RUNNER || 'ubuntu-24.04' }}
timeout-minutes: 20
strategy:
fail-fast: false
matrix:
distro:
- name: freebsd
steps:
# Fancy checkout gets all the tags
# it also makes sure we can use git --describe correctly
- name: Fancy Checkout
uses: sithlord48/fancy-checkout@v1
- name: Build on FreeBSD
if: ${{ matrix.distro.name == 'freebsd' }}
uses: vmactions/freebsd-vm@v1
with:
usesh: true
run: |
pkg install -y cmake ninja gmake gcc12 openssl glib \
libX11 libXtst libxkbfile qt6-base qt6-tools gtk3 googletest \
tomlplusplus cli11 pkgconf libei libportal
${{env.CMAKE_CONFIGURE}} -G Ninja
cmake --build build -j16
# Integration tests are flakey by nature, make them optional.
export QT_QPA_PLATFORM=offscreen
./build/bin/unittests || true
flatpak:
needs: lint-check
name: flatpak-${{matrix.flatpak.arch}}
runs-on: ${{matrix.flatpak.runs-on}}
timeout-minutes: 60
container:
image: ghcr.io/flathub-infra/flatpak-github-actions:kde-6.8
options: --privileged
strategy:
fail-fast: false
matrix:
flatpak:
- runs-on: ubuntu-latest
arch: x86_64
- runs-on: ubuntu-24.04-arm
arch: aarch64
steps:
- name: Check out repository
uses: sithlord48/fancy-checkout@v1
- run: git config --global protocol.file.allow always
- name: Get version
uses: ./.github/actions/get-version
- name: Lint appsteam
run: flatpak-builder-lint appstream deploy/linux/org.deskflow.deskflow.metainfo.xml
- name: Lint manifest
run: flatpak-builder-lint manifest deploy/linux/flatpak/org.deskflow.deskflow.yml
- name: Build
uses: flatpak/flatpak-github-actions/flatpak-builder@v6
with:
bundle: deskflow-${{env.DESKFLOW_PACKAGE_VERSION}}-linux-${{matrix.flatpak.arch}}.flatpak
manifest-path: deploy/linux/flatpak/org.deskflow.deskflow.yml
cache-key: flatpak-builder-${{matrix.flatpak.arch}}-2.0
arch: ${{matrix.flatpak.arch}}
upload-artifact: false
- name: Validate build
run: flatpak-builder-lint --exceptions --user-exceptions deploy/linux/flatpak/ci-build-lint-exceptions.json repo repo
- name: Upload
uses: actions/upload-artifact@v4
with:
name: package-${{ env.PACKAGE_PREFIX }}-flatpak-${{matrix.flatpak.arch}}
path: ${{github.workspace}}/deskflow[-_]*.flatpak
release:
needs: ci-passed
if: (github.ref == 'refs/heads/master') || (contains(github.ref, '/tags/v'))
runs-on: ubuntu-latest
steps:
- name: Fancy Checkout
uses: sithlord48/fancy-checkout@v1
- name: Get version
uses: ./.github/actions/get-version
- name: Download artifacts
uses: actions/download-artifact@v4
- name: Generate package checksums
id: generate_notes
shell: bash
run: |
mv $GITHUB_WORKSPACE/package-*/deskflow-* .
rm -rf $GITHUB_WORKSPACE/package-*
echo "Build: ${{env.DESKFLOW_VERSION }}" > sums.txt
sha256sum deskflow-* >> sums.txt
- name: Deploy continuous
if: (github.ref == 'refs/heads/master') && !(contains(github.ref, '/tags/v'))
uses: crowbarmaster/GH-Automatic-Releases@latest
with:
repo_token: "${{ secrets.GITHUB_TOKEN }}"
automatic_release_tag: "continuous"
prerelease: true
title: 'Continuous Build'
files: |
deskflow-*
sums.txt
- name: Deploy release
if: contains(github.ref, '/tags/v')
uses: crowbarmaster/GH-Automatic-Releases@latest
with:
repo_token: "${{ secrets.GITHUB_TOKEN }}"
prerelease: false
files: |
deskflow-*
sums.txt
winget-publish:
needs: release
if: contains(github.ref, 'tags/v')
runs-on: windows-latest
steps:
- name: Fancy Checkout
uses: sithlord48/fancy-checkout@v1
- name: Get version
uses: ./.github/actions/get-version
- name: Submit
uses: ./.github/actions/winget-publish
with:
release-version: ${{env.DESKFLOW_PACKAGE_VERSION}}
token: ${{ secrets.WINGET_DEPLOY_TOKEN }}

View File

@ -1,53 +0,0 @@
name: Create tag
on:
workflow_dispatch:
push:
branches:
- master
- release/**
jobs:
create-tag:
if: ${{ vars.CREATE_TAGS }}
runs-on: ubuntu-latest
timeout-minutes: 10
steps:
- name: Checkout
uses: actions/checkout@v4
with:
# Fetch all tags
fetch-depth: 0
- name: Read version file
run: echo "CURRENT_VERSION=$(cat VERSION)" >> $GITHUB_ENV
- name: Override stage
if: ${{ !startsWith(github.ref, 'refs/heads/release') }}
run: echo "OVERRIDE_STAGE=snapshot" >> $GITHUB_ENV
- name: Get next version
id: next-version
uses: symless/actions/next-version@master
with:
current-version: ${{ env.CURRENT_VERSION }}
override-stage: ${{ env.OVERRIDE_STAGE }}
- name: Create and push Git tag
run: |
git tag ${{ steps.next-version.outputs.next-version }}
git push origin ${{ steps.next-version.outputs.next-version }}
shell: bash
- name: Trigger CI workflow
uses: actions/github-script@v7
with:
script: |
await github.rest.actions.createWorkflowDispatch({
owner: context.repo.owner,
repo: context.repo.repo,
workflow_id: 'ci.yml',
ref: '${{ steps.next-version.outputs.next-version }}'
});

View File

@ -1,31 +0,0 @@
name: "Lint Clang"
on:
workflow_dispatch:
workflow_call:
jobs:
lint-clang:
runs-on: ubuntu-latest
timeout-minutes: 5
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup Python venv
uses: ./.github/actions/init-python
with:
cache-key: "lint-clang"
- name: Install dependencies
run: |
source .venv/bin/activate
pip install pyyaml clang_format
- name: Linting with Clang format
id: lint-clang
uses: ./.github/actions/lint-error
with:
format-command: ./scripts/lint_clang.py -f
format-tool: "clang-format"

View File

@ -1,31 +0,0 @@
name: "Lint CMake"
on:
workflow_dispatch:
workflow_call:
jobs:
lint-cmake:
runs-on: ubuntu-latest
timeout-minutes: 5
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup Python venv
uses: ./.github/actions/init-python
with:
cache-key: "lint-cmake"
- name: Install dependencies
run: |
source .venv/bin/activate
pip install pyyaml cmake_format
- name: Linting with CMake formatter
id: lint-cmake
uses: ./.github/actions/lint-error
with:
format-command: ./scripts/lint_cmake.py -f
format-tool: "cmake-format"

View File

@ -6,15 +6,13 @@ on:
secrets:
SONAR_TOKEN:
required: true
push:
branches: [master]
jobs:
sonarcloud-analysis:
if: ${{ vars.SONAR_SCANNER_ENABLED }}
runs-on: ${{ vars.SONAR_SCANNER_RUNNER || 'ubuntu-24.04' }}
container: deskflow/deskflow:ubuntu-22.04-amd64
runs-on: ubuntu-latest
container: debian:trixie-slim
timeout-minutes: 20
env:
@ -24,57 +22,49 @@ jobs:
CPU_CORE_COUNT: ${{ vars.SONAR_SCANNER_CPU_COUNT || 4 }}
steps:
- name: Checkout
uses: actions/checkout@v4
with:
# Fetch all history for SonarScanner blame data
fetch-depth: 0
- name: Config Git safe dir
run: git config --global --add safe.directory $GITHUB_WORKSPACE
# Should only restore the .venv directory from cache.
- name: Init Python venv
uses: ./.github/actions/init-python
with:
cache-key: "sonarcloud"
setup: false
- name: Install dependencies
- name: Install container dependencies
run: |
./scripts/install_deps.py &&
apt install curl unzip -y &&
pip install gcovr
env:
# Prevent apt prompting for input.
DEBIAN_FRONTEND: noninteractive
apt update -qqq > /dev/null
apt install -qqq git curl unzip gcovr > /dev/null
- name: Fancy Checkout
uses: sithlord48/fancy-checkout@v1
- name: Install project dependencies
uses: ./.github/actions/install-dependencies
with:
like: "debian"
- name: Install sonar-scanner and build-wrapper
uses: sonarsource/sonarcloud-github-c-cpp@v3
- name: Configure
run: cmake -B build --preset=linux-debug -DENABLE_COVERAGE=ON
run: |
cmake -B build \
-G "Ninja" \
-DCMAKE_BUILD_TYPE="Debug" \
-DCMAKE_EXPORT_COMPILE_COMMANDS=ON \
-DSKIP_BUILD_TESTS=ON \
-DENABLE_COVERAGE=ON
- name: Build
run: |
build-wrapper-linux-x86-64 --out-dir bw-output cmake --build build -j${CPU_CORE_COUNT}
- name: Unit tests coverage
- name: Test coverage
shell: bash
env:
QT_QPA_PLATFORM: offscreen
run: cmake --build build --target coverage-unittests
- name: Integration tests coverage
env:
QT_QPA_PLATFORM: offscreen
run: cmake --build build --target coverage-integtests
run: |
tests=(`cmake --build build --target help | grep -o "^coverage-[^:]*"`)
for i in "${tests[@]}"; do
cmake --build build --target "$i"
done
- name: Get coverage report paths
id: coverage-paths
run: |
unittests=$(find build -name coverage-unittests.xml)
integtests=$(find build -name coverage-integtests.xml)
paths="${unittests}${integtests:+,$integtests}"
paths=$(ls -w 0 -m build/coverage-*.xml | sed 's/ //g')
if [ -z "$paths" ]; then
echo "Error: No coverage files found"
exit 1

View File

@ -1,38 +0,0 @@
# Used only for testing the `dist-upload` action.
# Triggered using 'Run workflow' in the Actions tab.
name: Test dist upload
on:
workflow_dispatch:
jobs:
test:
runs-on: ubuntu-latest
timeout-minutes: 10
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Make test dist
run: |
mkdir dist
echo "test" > dist/test
- name: Upload to GitHub
if:
uses: ./.github/actions/dist-upload
with:
use-github: true
github-target-filename: "test"
- name: Upload to Google Drive
if:
uses: ./.github/actions/dist-upload
with:
use_gdrive: true
gdrive-target-base-dir: "test"
gdrive-secret-key: ${{ secrets.GOOGLE_DRIVE_KEY }}
gdrive-parent-folder-id: ${{ secrets.GOOGLE_DRIVE_TECH_DRIVE }}
package-version: 1.0.0-test

View File

@ -7,48 +7,34 @@ on:
jobs:
valgrind-analysis:
runs-on: ubuntu-latest
container: deskflow/deskflow:ubuntu-22.04-amd64
container: debian:trixie-slim
timeout-minutes: 10
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Install container dependencies
run: |
apt update -qqq > /dev/null
apt install -qqq git valgrind > /dev/null
- name: Config Git safe dir
run: git config --global --add safe.directory $GITHUB_WORKSPACE
# Should only restore the .venv directory from cache.
- name: Init Python venv
uses: ./.github/actions/init-python
with:
cache-key: "valgrind"
setup: false
- name: Fancy Checkout
uses: sithlord48/fancy-checkout@v1
- name: Install dependencies
run: |
./scripts/install_deps.py &&
apt install valgrind -y
env:
# Prevent apt prompting for input.
DEBIAN_FRONTEND: noninteractive
uses: ./.github/actions/install-dependencies
with:
like: "debian"
- name: Configure
run: cmake -B build --preset=linux-release
run: cmake -B build -G "Ninja"
- name: Build
run: cmake --build build -j8
- name: Valgrind unit tests
id: unittests
id: legacytests
uses: ./.github/actions/run-valgrind
with:
executable: ./build/bin/unittests
- name: Valgrind integration tests
id: integtests
uses: ./.github/actions/run-valgrind
with:
executable: ./build/bin/integtests
executable: ./build/bin/legacytests
- name: Set job summary
run: |
@ -56,14 +42,9 @@ jobs:
message=$(cat <<EOF
## Valgrind summary
### Unit tests
### legacytests Unit tests
$backticks
${{ steps.unittests.outputs.summary }}
$backticks
### Integration tests
$backticks
${{ steps.integtests.outputs.summary }}
${{ steps.legacytests.outputs.summary }}
$backticks
EOF
)

21
.gitignore vendored
View File

@ -1,3 +1,8 @@
# SPDX-FileCopyrightText: Copyright (C) 2024 Chris Rizzitello <sithlord48@gmail.com>
# SPDX-FileCopyrightText: Copyright (C) 2011 Symless Ltd.
# SPDX-FileCopyrightText: Copyright (C) 2010 Jason Axelson <BostonVaulter@gmail.com>
# SPDX-License-Identifier: MIT
# temp dirs created during build
/build
/dist
@ -5,7 +10,6 @@
/tmp
/vcpkg
/vcpkg_installed
/scripts/**/*.pyc
/.cache
/.venv
aqtinstall.log
@ -20,3 +24,18 @@ deskflow-config.toml
/scripts/*.egg-info
/*.user
*.ui.autosave
#Generic linux files
**/*.directory
#CMake ignores
CMakeLists.txt.user
CMakeCache.txt
CMakeUserPresets.json
CMakeFiles/*
# vscode folder
/.vscode
# scripts folder
/scripts

View File

@ -1,11 +0,0 @@
{
"recommendations": [
"ms-vscode.cmake-tools",
"twxs.cmake",
"llvm-vs-code-extensions.vscode-clangd",
"ms-vscode.cpptools",
"vadimcn.vscode-lldb",
"cheshirekow.cmake-format",
"jacqueslucke.gcov-viewer"
]
}

123
.vscode/launch.json vendored
View File

@ -1,123 +0,0 @@
{
"version": "0.2.0",
"configurations": [
{
"name": "unix - gui",
"type": "lldb",
"cwd": "${workspaceRoot}",
"request": "launch",
"program": "${workspaceFolder}/build/bin/deskflow",
"preLaunchTask": "kill-build"
},
{
"name": "unix - unittests",
"type": "lldb",
"cwd": "${workspaceRoot}",
"request": "launch",
"program": "${workspaceFolder}/build/bin/unittests",
"preLaunchTask": "build"
},
{
"name": "unix - integtests",
"type": "lldb",
"cwd": "${workspaceRoot}",
"request": "launch",
"program": "${workspaceFolder}/build/bin/integtests",
"preLaunchTask": "build"
},
{
"name": "unix - server",
"type": "lldb",
"cwd": "${workspaceRoot}",
"request": "launch",
"program": "${workspaceFolder}/build/bin/deskflows",
"args": ["--config-toml", "deskflow-config.toml"],
"preLaunchTask": "kill-build"
},
{
"name": "unix - client",
"type": "lldb",
"cwd": "${workspaceRoot}",
"request": "launch",
"program": "${workspaceFolder}/build/bin/deskflow-client",
"args": ["--config-toml", "deskflow-config.toml"],
"preLaunchTask": "kill-build"
},
{
"name": "unix - attach",
"type": "lldb",
"request": "attach",
"pid": "${command:pickProcess}"
},
{
"name": "windows - gui",
"type": "cppvsdbg",
"cwd": "${workspaceRoot}",
"request": "launch",
"program": "${workspaceFolder}/build/bin/deskflow",
"internalConsoleOptions": "openOnSessionStart",
"preLaunchTask": "kill-build"
},
{
"name": "windows - unittests",
"type": "cppvsdbg",
"cwd": "${workspaceRoot}",
"request": "launch",
"program": "${workspaceFolder}/build/bin/unittests",
"internalConsoleOptions": "openOnSessionStart",
"preLaunchTask": "build"
},
{
"name": "windows - integtests",
"type": "cppvsdbg",
"cwd": "${workspaceRoot}",
"request": "launch",
"program": "${workspaceFolder}/build/bin/integtests",
"internalConsoleOptions": "openOnSessionStart",
"preLaunchTask": "build"
},
{
"name": "windows - server",
"type": "cppvsdbg",
"cwd": "${workspaceRoot}",
"request": "launch",
"program": "${workspaceFolder}/build/bin/deskflow-server",
"args": ["--config-toml", "deskflow-config.toml"],
"internalConsoleOptions": "openOnSessionStart",
"preLaunchTask": "kill-build"
},
{
"name": "windows - client",
"type": "cppvsdbg",
"cwd": "${workspaceRoot}",
"request": "launch",
"program": "${workspaceFolder}/build/bin/deskflow-client",
"args": ["--config-toml", "deskflow-config.toml"],
"internalConsoleOptions": "openOnSessionStart",
"preLaunchTask": "kill-build"
},
{
"name": "windows - daemon",
"type": "cppvsdbg",
"cwd": "${workspaceRoot}",
"request": "launch",
"program": "${workspaceFolder}/build/bin/deskflow-daemon",
"args": ["-f"],
"internalConsoleOptions": "openOnSessionStart",
"preLaunchTask": "build"
},
{
"name": "windows - attach",
"type": "cppvsdbg",
"request": "attach",
"processId": "${command:pickProcess}"
},
{
"name": "install_deps.py",
"type": "debugpy",
"request": "launch",
"program": "scripts/install_deps.py",
"console": "integratedTerminal"
}
]
}

175
.vscode/tasks.json vendored
View File

@ -1,175 +0,0 @@
{
"version": "2.0.0",
"tasks": [
{
"label": "build",
"type": "cmake",
"command": "build",
"targets": ["all"],
"preset": "${command:cmake.activeBuildPresetName}",
"group": {
"kind": "build",
"isDefault": true
},
"problemMatcher": {
"base": "$gcc",
"fileLocation": ["absolute"]
},
"presentation": {
"revealProblems": "onProblem"
}
},
{
"label": "clean",
"type": "cmake",
"command": "build",
"targets": ["clean"],
"preset": "${command:cmake.activeBuildPresetName}",
"group": "build"
},
{
"label": "clean-gcda",
"type": "shell",
"command": "find . -name '*.gcda' -delete",
"windows": {
"command": "$null"
},
"presentation": {
"reveal": "silent"
}
},
{
"label": "clean-qt",
"type": "shell",
"command": "rm -r build/src/gui build/src/lib/gui",
"windows": {
"command": "remove-item -recurse build/src/gui,build/src/lib/gui"
}
},
{
"label": "clean-config",
"type": "shell",
"linux": {
"command": "rm -r ~/.config/Deskflow/Deskflow.conf"
},
"windows": {
"command": "remove-item -recurse $env:APPDATA\\Deskflow\\Deskflow"
},
"osx": {
"command": "rm -r ~/Library/Application\\ Support/Deskflow/Deskflow"
}
},
{
"label": "tests",
"dependsOn": ["integtests", "unittests"],
"problemMatcher": []
},
{
"label": "kill",
"type": "shell",
"command": "killall deskflow; killall deskflow-client; killall deskflow-server || true",
"windows": {
"command": "taskkill /F /IM deskflow.exe /IM deskflow-client.exe /IM deskflow-client.exe; $true"
},
"presentation": {
"reveal": "silent"
}
},
{
"label": "kill-build",
"dependsOn": ["kill", "build"],
"problemMatcher": []
},
{
"label": "gui",
"type": "process",
"command": "${workspaceFolder}/build/bin/deskflow",
"dependsOn": ["build", "kill"],
"problemMatcher": [],
"windows": {
"command": "${workspaceFolder}/build/bin/deskflow.exe"
}
},
{
"label": "restart daemon",
"type": "shell",
"command": "python scripts/daemon.py --restart",
"dependsOn": ["build"]
},
{
"label": "reinstall daemon",
"type": "shell",
"command": "python scripts/daemon.py --reinstall",
"dependsOn": ["build"]
},
{
"label": "stop daemon",
"type": "shell",
"command": "python scripts/daemon.py --stop"
},
{
"label": "unittests (current)",
"type": "shell",
"command": "python",
"args": [
"./scripts/tests.py",
"--unit-tests",
"--ignore-return-code",
"--filter-file=${file}"
],
"dependsOn": ["build", "clean-gcda"]
},
{
"label": "integtests (current)",
"type": "shell",
"command": "python",
"args": [
"./scripts/tests.py",
"--integ-tests",
"--ignore-return-code",
"--filter-file=${file}"
],
"dependsOn": ["build", "clean-gcda"]
},
{
"label": "unittests",
"type": "shell",
"command": "python",
"args": ["./scripts/tests.py", "--unit-tests", "--ignore-return-code"],
"dependsOn": ["build", "clean-gcda"]
},
{
"label": "integtests",
"type": "shell",
"command": "python",
"args": ["./scripts/tests.py", "--integ-tests", "--ignore-return-code"],
"dependsOn": ["build", "clean-gcda"]
},
{
"label": "unittests (current, valgrind)",
"type": "shell",
"command": "python",
"args": [
"./scripts/tests.py",
"--unit-tests",
"--ignore-return-code",
"--filter-file=${file}",
"--valgrind"
],
"dependsOn": ["build", "clean-gcda"]
},
{
"label": "integtests (current, valgrind)",
"type": "shell",
"command": "python",
"args": [
"./scripts/tests.py",
"--integ-tests",
"--ignore-return-code",
"--filter-file=${file}",
"--valgrind"
],
"dependsOn": ["build", "clean-gcda"]
}
]
}

View File

@ -1,50 +0,0 @@
# Build Deskflow
## Developer Quick Start
Deskflow is free and open source software, and anyone is welcome to build it,
run it, tinker with it, redistribute it as part of their own app, etc.
These instructions will build Deskflow, which doesn't require a license
or serial key. Check the [Build Guide](https://github.com/deskflow/deskflow/wiki/Build-Guide)
wiki page if you have problems.
**1. Dependencies:**
*Linux, macOS, or BSD-derived:*
```
./scripts/install_deps.sh
```
*Windows:*
```
python scripts/install_deps.py
```
**2. Configure:**
*Linux, macOS, or BSD-derived:*
```
cmake -B build
```
*Windows:*
```
cmake -B build --preset=windows-release
```
**3. Build:**
```
cmake --build build -j8
```
**4. Test:**
```
./build/bin/unittests
./build/bin/integtests
```
**5. Run**
```
./build/bin/deskflow
```

View File

@ -1,7 +0,0 @@
brew 'make'
brew 'cmake'
brew 'openssl'
brew 'ninja'
brew 'googletest'
brew 'tomlplusplus'
brew 'cli11'

View File

@ -1,40 +1,181 @@
# Deskflow -- mouse and keyboard sharing utility
# Copyright (C) 2024 Symless Ltd.
# Copyright (C) 2009 Nick Bolton
#
# This package is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# found in the file LICENSE that should have accompanied this file.
#
# This package is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
# SPDX-FileCopyrightText: 2024 Deskflow Developers
# SPDX-FileCopyrightText: 2012 - 2024 Symless Ltd
# SPDX-FileCopyrightText: 2009 - 2012 Nick Bolton
# SPDX-License-Identifier: MIT
# Why CMake 3.8?
# This allows package maintainers to create reproducible builds:
# > New in version 3.8: If the SOURCE_DATE_EPOCH environment variable is set,
# > its value will be used instead of the current time.
# > See https://reproducible-builds.org/specs/source-date-epoch/ for details.
cmake_minimum_required(VERSION 3.8)
cmake_minimum_required(VERSION 3.24)
project(deskflow C CXX)
# Link items by fill path
cmake_policy(SET CMP0003 NEW)
# Fix define escaping
cmake_policy(SET CMP0005 NEW)
# Set CXX Requirements
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_EXTENSIONS OFF)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
# Fallback for when git can not be found
set(DESKFLOW_VERSION_MAJOR 1)
set(DESKFLOW_VERSION_MINOR 22)
set(DESKFLOW_VERSION_PATCH 0)
set(DESKFLOW_VERSION_TWEAK 0)
# Get the version from git if it's a git repository
if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/.git)
find_package(Git)
if(GIT_FOUND)
execute_process(
COMMAND ${GIT_EXECUTABLE} rev-parse --short=8 HEAD
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
OUTPUT_VARIABLE GIT_SHA_SHORT
ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE
)
execute_process(
COMMAND ${GIT_EXECUTABLE} rev-list --tags --count
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
OUTPUT_VARIABLE GIT_TAG_COUNT
ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE
)
if(GIT_TAG_COUNT EQUAL 0)
set(DESKFLOW_VERSION_TWEAK "9999")
else()
execute_process(
COMMAND ${GIT_EXECUTABLE} describe --long --match v* --always
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
OUTPUT_VARIABLE GITREV
ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE
)
string(FIND ${GITREV} "v" isRev)
if(NOT ifRev EQUAL -1)
string(REGEX MATCH [0-9]+ MAJOR ${GITREV})
string(REGEX MATCH \\.[0-9]+ MINOR ${GITREV})
string(REPLACE "." "" MINOR "${MINOR}")
string(REGEX MATCH [0-9]+\- PATCH ${GITREV})
string(REPLACE "-" "" PATCH "${PATCH}")
string(REGEX MATCH \-[0-9]+\- TWEAK ${GITREV})
string(REPLACE "-" "" TWEAK "${TWEAK}")
set(DESKFLOW_VERSION_MAJOR ${MAJOR})
set(DESKFLOW_VERSION_MINOR ${MINOR})
set(DESKFLOW_VERSION_PATCH ${PATCH})
set(DESKFLOW_VERSION_TWEAK ${TWEAK})
elseif(NOT ${GITREV} STREQUAL "")
set(DESKFLOW_VERSION_TWEAK ${GITREV})
endif()
endif()
endif()
endif()
#Define our project
project(
deskflow
VERSION "${DESKFLOW_VERSION_MAJOR}.${DESKFLOW_VERSION_MINOR}.${DESKFLOW_VERSION_PATCH}.${DESKFLOW_VERSION_TWEAK}"
DESCRIPTION "Keyboard and mouse sharing utility"
LANGUAGES C CXX)
# Define Additional "PROJECT" vars for packaging and metadata
set(CMAKE_PROJECT_PROPER_NAME "Deskflow")
set(CMAKE_PROJECT_VENDOR "${CMAKE_PROJECT_PROPER_NAME} Devs")
set(CMAKE_PROJECT_COPYRIGHT "(C) 2024-2025 ${CMAKE_PROJECT_VENDOR}")
set(CMAKE_PROJECT_CONTACT "${CMAKE_PROJECT_PROPER_NAME} <maintainers@deskflow.org>")
#Unset the vars used in the project call
unset(DESKFLOW_VERSION_MAJOR)
unset(DESKFLOW_VERSION_MINOR)
unset(DESKFLOW_VERSION_PATCH)
unset(DESKFLOW_VERSION_TWEAK)
message(STATUS "Building ${CMAKE_PROJECT_NAME}-${CMAKE_PROJECT_VERSION}")
# Set lib versions
set(REQUIRED_OPENSSL_VERSION 3.0)
set(REQUIRED_LIBEI_VERSION 1.3)
set(REQUIRED_LIBPORTAL_VERSION 0.8)
set(REQUIRED_QT_VERSION 6.7.0)
if (WIN32)
# VSCMD_ARG_TGT_ARCH is set on CI
if ("$ENV{VSCMD_ARG_TGT_ARCH}" STREQUAL "")
# NOT on CI
if (CMAKE_SYSTEM_PROCESSOR MATCHES "[Aa][Rr][Mm]64")
set(BUILD_ARCHITECTURE arm64)
else()
set(BUILD_ARCHITECTURE x64)
endif()
else()
set (BUILD_ARCHITECTURE $ENV{VSCMD_ARG_TGT_ARCH})
endif()
else()
set (BUILD_ARCHITECTURE ${CMAKE_SYSTEM_PROCESSOR})
endif()
if (MSVC)
# On Windows, require that the same MSVC runtime is used as on the host.
# Mitigates things like access violations caused by accidental ABI-compatibility breakage.
set(REQUIRED_MSVC_RUNTIME_MAJOR 14)
cmake_host_system_information(
RESULT REQUIRED_MSVC_RUNTIME_MINOR
QUERY WINDOWS_REGISTRY
"HKLM/SOFTWARE/Microsoft/VisualStudio/${REQUIRED_MSVC_RUNTIME_MAJOR}.0/VC/Runtimes/${BUILD_ARCHITECTURE}"
VALUE "Minor")
if (REQUIRED_MSVC_RUNTIME_MINOR)
message(STATUS "MSVC runtime: ${REQUIRED_MSVC_RUNTIME_MAJOR}.${REQUIRED_MSVC_RUNTIME_MINOR}")
else()
message(FATAL_ERROR "MSVC runtime registry entry not found")
endif()
endif()
# Control debug item visibility
# When not set logging is forced to DEBUG and show code locations
# Also exposes a test menu
if(NOT CMAKE_BUILD_TYPE STREQUAL "Debug")
message(STATUS "Disabling debug build")
add_definitions(-DNDEBUG)
endif()
# Set required macOS SDK
if(APPLE)
set(CMAKE_OSX_DEPLOYMENT_TARGET 12)
endif()
# Set Output Folders
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/bin")
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/lib")
include(cmake/Version.cmake)
include(cmake/Definitions.cmake)
include(cmake/Build.cmake)
include(cmake/Libraries.cmake)
include(cmake/Packaging.cmake)
include(GNUInstallDirs)
set_version()
configure_definitions()
configure_build()
configure_libs()
configure_packaging()
add_subdirectory(doc)
add_subdirectory(src)
post_config_all()
# Install License, License is in the App Bundle on mac os (src/gui)
if(WIN32)
install(
FILES ${PROJECT_SOURCE_DIR}/LICENSE
DESTINATION .
)
install(
FILES ${PROJECT_SOURCE_DIR}/LICENSES/LicenseRef-OpenSSL-Exception.txt
DESTINATION .
RENAME LICENSE_EXCEPTION
)
elseif(UNIX AND NOT APPLE)
install(
FILES ${PROJECT_SOURCE_DIR}/LICENSE
DESTINATION share/licenses/deskflow
)
install(
FILES ${PROJECT_SOURCE_DIR}/LICENSES/LicenseRef-OpenSSL-Exception.txt
DESTINATION share/licenses/deskflow
RENAME LICENSE_EXCEPTION
)
endif()
option(BUILD_INSTALLER "Build installer" ON)
if(BUILD_INSTALLER)
add_subdirectory(deploy)
endif()

View File

@ -1,134 +0,0 @@
{
"version": 2,
"configurePresets": [
{
"name": "base",
"hidden": true,
"binaryDir": "${sourceDir}/build",
"cacheVariables": {
"CMAKE_EXPORT_COMPILE_COMMANDS": "ON"
}
},
{
"name": "minimal",
"hidden": true,
"environment": {
"DESKFLOW_BUILD_MINIMAL": "ON"
}
},
{
"name": "windows",
"inherits": "base",
"hidden": true,
"generator": "Ninja",
"cacheVariables": {
"CMAKE_C_COMPILER": "cl.exe",
"CMAKE_CXX_COMPILER": "cl.exe"
},
"architecture": {
"value": "x64",
"strategy": "external"
},
"toolset": {
"value": "host=x64",
"strategy": "external"
}
},
{
"name": "linux",
"hidden": true,
"inherits": "base",
"generator": "Unix Makefiles"
},
{
"name": "macos",
"hidden": true,
"inherits": "base",
"generator": "Unix Makefiles"
},
{
"name": "windows-debug",
"inherits": "windows",
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Debug"
}
},
{
"name": "windows-release",
"inherits": "windows",
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Release"
}
},
{
"name": "linux-debug",
"inherits": "linux",
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Debug"
}
},
{
"name": "linux-release",
"inherits": "linux",
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Release"
}
},
{
"name": "macos-debug",
"inherits": "macos",
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Debug"
}
},
{
"name": "macos-release",
"inherits": "macos",
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Release"
}
},
{
"name": "windows-debug-min",
"inherits": ["windows", "minimal"],
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Debug"
}
},
{
"name": "windows-release-min",
"inherits": ["windows", "minimal"],
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Release"
}
},
{
"name": "linux-debug-min",
"inherits": ["linux", "minimal"],
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Debug"
}
},
{
"name": "linux-release-min",
"inherits": ["linux", "minimal"],
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Release"
}
},
{
"name": "macos-debug-min",
"inherits": ["macos", "minimal"],
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Debug"
}
},
{
"name": "macos-release-min",
"inherits": ["macos", "minimal"],
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Release"
}
}
]
}

View File

@ -1,12 +1,13 @@
# Contributing to Deskflow
Hello future community member!
Thanks for your interest in contributing to Deskflow! We welcome all kinds of contributions — bug reports, feature suggestions, documentation improvements, and code.
Deskflow is free and open source software, and anyone is welcome to build it,
run it, tinker with it, redistribute it as part of their own app, etc.
## Read the Full Guidelines
See our wiki page on [contributing](https://github.com/deskflow/deskflow/wiki/Contributing) for more
information. We look forward to reviewing your PR!
To keep this repository clean and contribution-friendly, we've outlined our full contributing guidelines on the Deskflow Wiki:
Thanks,
The Deskflow community
👉 [How to Contribute to Deskflow](https://github.com/deskflow/deskflow/wiki/Contributing)
Please take a moment to read through the page before opening an issue or submitting a pull request.
Thanks again for helping make Deskflow better!

View File

@ -1,8 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- install with: choco install Chocolatey.config -y -->
<packages>
<package id="wixtoolset" />
<package id="visualstudio2022buildtools"
packageParameters="--includeRecommended --add Microsoft.VisualStudio.Workload.MSBuildTools --add Microsoft.VisualStudio.Workload.VCTools " />
</packages>

2494
Doxyfile

File diff suppressed because it is too large Load Diff

117
LICENSES/GPL-2.0-only.txt Normal file
View File

@ -0,0 +1,117 @@
GNU GENERAL PUBLIC LICENSE
Version 2, June 1991
Copyright (C) 1989, 1991 Free Software Foundation, Inc.
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed.
Preamble
The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Lesser General Public License instead.) You can apply it to your programs, too.
When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things.
To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it.
For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights.
We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software.
Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations.
Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all.
The precise terms and conditions for copying, distribution and modification follow.
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you".
Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does.
1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program.
You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee.
2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions:
a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change.
b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License.
c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.)
These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it.
Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program.
In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License.
3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following:
a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or,
b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or,
c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.)
The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable.
If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code.
4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance.
5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it.
6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License.
7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program.
If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances.
It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice.
This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License.
8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License.
9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns.
Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation.
10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally.
NO WARRANTY
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found.
one line to give the program's name and an idea of what it does. Copyright (C) yyyy name of author
This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. Also add information on how to contact you by electronic and paper mail.
If the program is interactive, make it output a short notice like this when it starts in an interactive mode:
Gnomovision version 69, Copyright (C) year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details.
The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program.
You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names:
Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker.
signature of Ty Coon, 1 April 1989 Ty Coon, President of Vice

176
LICENSES/LGPL-2.1-only.txt Normal file
View File

@ -0,0 +1,176 @@
GNU LESSER GENERAL PUBLIC LICENSE
Version 2.1, February 1999
Copyright (C) 1991, 1999 Free Software Foundation, Inc.
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed.
[This is the first released version of the Lesser GPL. It also counts as the successor of the GNU Library Public License, version 2, hence the version number 2.1.]
Preamble
The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public Licenses are intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users.
This license, the Lesser General Public License, applies to some specially designated software packages--typically libraries--of the Free Software Foundation and other authors who decide to use it. You can use it too, but we suggest you first think carefully about whether this license or the ordinary General Public License is the better strategy to use in any particular case, based on the explanations below.
When we speak of free software, we are referring to freedom of use, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish); that you receive source code or can get it if you want it; that you can change the software and use pieces of it in new free programs; and that you are informed that you can do these things.
To protect your rights, we need to make restrictions that forbid distributors to deny you these rights or to ask you to surrender these rights. These restrictions translate to certain responsibilities for you if you distribute copies of the library or if you modify it.
For example, if you distribute copies of the library, whether gratis or for a fee, you must give the recipients all the rights that we gave you. You must make sure that they, too, receive or can get the source code. If you link other code with the library, you must provide complete object files to the recipients, so that they can relink them with the library after making changes to the library and recompiling it. And you must show them these terms so they know their rights.
We protect your rights with a two-step method: (1) we copyright the library, and (2) we offer you this license, which gives you legal permission to copy, distribute and/or modify the library.
To protect each distributor, we want to make it very clear that there is no warranty for the free library. Also, if the library is modified by someone else and passed on, the recipients should know that what they have is not the original version, so that the original author's reputation will not be affected by problems that might be introduced by others.
Finally, software patents pose a constant threat to the existence of any free program. We wish to make sure that a company cannot effectively restrict the users of a free program by obtaining a restrictive license from a patent holder. Therefore, we insist that any patent license obtained for a version of the library must be consistent with the full freedom of use specified in this license.
Most GNU software, including some libraries, is covered by the ordinary GNU General Public License. This license, the GNU Lesser General Public License, applies to certain designated libraries, and is quite different from the ordinary General Public License. We use this license for certain libraries in order to permit linking those libraries into non-free programs.
When a program is linked with a library, whether statically or using a shared library, the combination of the two is legally speaking a combined work, a derivative of the original library. The ordinary General Public License therefore permits such linking only if the entire combination fits its criteria of freedom. The Lesser General Public License permits more lax criteria for linking other code with the library.
We call this license the "Lesser" General Public License because it does Less to protect the user's freedom than the ordinary General Public License. It also provides other free software developers Less of an advantage over competing non-free programs. These disadvantages are the reason we use the ordinary General Public License for many libraries. However, the Lesser license provides advantages in certain special circumstances.
For example, on rare occasions, there may be a special need to encourage the widest possible use of a certain library, so that it becomes a de-facto standard. To achieve this, non-free programs must be allowed to use the library. A more frequent case is that a free library does the same job as widely used non-free libraries. In this case, there is little to gain by limiting the free library to free software only, so we use the Lesser General Public License.
In other cases, permission to use a particular library in non-free programs enables a greater number of people to use a large body of free software. For example, permission to use the GNU C Library in non-free programs enables many more people to use the whole GNU operating system, as well as its variant, the GNU/Linux operating system.
Although the Lesser General Public License is Less protective of the users' freedom, it does ensure that the user of a program that is linked with the Library has the freedom and the wherewithal to run that program using a modified version of the Library.
The precise terms and conditions for copying, distribution and modification follow. Pay close attention to the difference between a "work based on the library" and a "work that uses the library". The former contains code derived from the library, whereas the latter must be combined with the library in order to run.
GNU LESSER GENERAL PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
0. This License Agreement applies to any software library or other program which contains a notice placed by the copyright holder or other authorized party saying it may be distributed under the terms of this Lesser General Public License (also called "this License"). Each licensee is addressed as "you".
A "library" means a collection of software functions and/or data prepared so as to be conveniently linked with application programs (which use some of those functions and data) to form executables.
The "Library", below, refers to any such software library or work which has been distributed under these terms. A "work based on the Library" means either the Library or any derivative work under copyright law: that is to say, a work containing the Library or a portion of it, either verbatim or with modifications and/or translated straightforwardly into another language. (Hereinafter, translation is included without limitation in the term "modification".)
"Source code" for a work means the preferred form of the work for making modifications to it. For a library, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the library.
Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running a program using the Library is not restricted, and output from such a program is covered only if its contents constitute a work based on the Library (independent of the use of the Library in a tool for writing it). Whether that is true depends on what the Library does and what the program that uses the Library does.
1. You may copy and distribute verbatim copies of the Library's complete source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and distribute a copy of this License along with the Library.
You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee.
2. You may modify your copy or copies of the Library or any portion of it, thus forming a work based on the Library, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions:
a) The modified work must itself be a software library.
b) You must cause the files modified to carry prominent notices stating that you changed the files and the date of any change.
c) You must cause the whole of the work to be licensed at no charge to all third parties under the terms of this License.
d) If a facility in the modified Library refers to a function or a table of data to be supplied by an application program that uses the facility, other than as an argument passed when the facility is invoked, then you must make a good faith effort to ensure that, in the event an application does not supply such function or table, the facility still operates, and performs whatever part of its purpose remains meaningful.
(For example, a function in a library to compute square roots has a purpose that is entirely well-defined independent of the application. Therefore, Subsection 2d requires that any application-supplied function or table used by this function must be optional: if the application does not supply it, the square root function must still compute square roots.)
These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Library, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Library, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it.
Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Library.
In addition, mere aggregation of another work not based on the Library with the Library (or with a work based on the Library) on a volume of a storage or distribution medium does not bring the other work under the scope of this License.
3. You may opt to apply the terms of the ordinary GNU General Public License instead of this License to a given copy of the Library. To do this, you must alter all the notices that refer to this License, so that they refer to the ordinary GNU General Public License, version 2, instead of to this License. (If a newer version than version 2 of the ordinary GNU General Public License has appeared, then you can specify that version instead if you wish.) Do not make any other change in these notices.
Once this change is made in a given copy, it is irreversible for that copy, so the ordinary GNU General Public License applies to all subsequent copies and derivative works made from that copy.
This option is useful when you wish to copy part of the code of the Library into a program that is not a library.
4. You may copy and distribute the Library (or a portion or derivative of it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange.
If distribution of object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place satisfies the requirement to distribute the source code, even though third parties are not compelled to copy the source along with the object code.
5. A program that contains no derivative of any portion of the Library, but is designed to work with the Library by being compiled or linked with it, is called a "work that uses the Library". Such a work, in isolation, is not a derivative work of the Library, and therefore falls outside the scope of this License.
However, linking a "work that uses the Library" with the Library creates an executable that is a derivative of the Library (because it contains portions of the Library), rather than a "work that uses the library". The executable is therefore covered by this License. Section 6 states terms for distribution of such executables.
When a "work that uses the Library" uses material from a header file that is part of the Library, the object code for the work may be a derivative work of the Library even though the source code is not. Whether this is true is especially significant if the work can be linked without the Library, or if the work is itself a library. The threshold for this to be true is not precisely defined by law.
If such an object file uses only numerical parameters, data structure layouts and accessors, and small macros and small inline functions (ten lines or less in length), then the use of the object file is unrestricted, regardless of whether it is legally a derivative work. (Executables containing this object code plus portions of the Library will still fall under Section 6.)
Otherwise, if the work is a derivative of the Library, you may distribute the object code for the work under the terms of Section 6. Any executables containing that work also fall under Section 6, whether or not they are linked directly with the Library itself.
6. As an exception to the Sections above, you may also combine or link a "work that uses the Library" with the Library to produce a work containing portions of the Library, and distribute that work under terms of your choice, provided that the terms permit modification of the work for the customer's own use and reverse engineering for debugging such modifications.
You must give prominent notice with each copy of the work that the Library is used in it and that the Library and its use are covered by this License. You must supply a copy of this License. If the work during execution displays copyright notices, you must include the copyright notice for the Library among them, as well as a reference directing the user to the copy of this License. Also, you must do one of these things:
a) Accompany the work with the complete corresponding machine-readable source code for the Library including whatever changes were used in the work (which must be distributed under Sections 1 and 2 above); and, if the work is an executable linked with the Library, with the complete machine-readable "work that uses the Library", as object code and/or source code, so that the user can modify the Library and then relink to produce a modified executable containing the modified Library. (It is understood that the user who changes the contents of definitions files in the Library will not necessarily be able to recompile the application to use the modified definitions.)
b) Use a suitable shared library mechanism for linking with the Library. A suitable mechanism is one that (1) uses at run time a copy of the library already present on the user's computer system, rather than copying library functions into the executable, and (2) will operate properly with a modified version of the library, if the user installs one, as long as the modified version is interface-compatible with the version that the work was made with.
c) Accompany the work with a written offer, valid for at least three years, to give the same user the materials specified in Subsection 6a, above, for a charge no more than the cost of performing this distribution.
d) If distribution of the work is made by offering access to copy from a designated place, offer equivalent access to copy the above specified materials from the same place.
e) Verify that the user has already received a copy of these materials or that you have already sent this user a copy.
For an executable, the required form of the "work that uses the Library" must include any data and utility programs needed for reproducing the executable from it. However, as a special exception, the materials to be distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable.
It may happen that this requirement contradicts the license restrictions of other proprietary libraries that do not normally accompany the operating system. Such a contradiction means you cannot use both them and the Library together in an executable that you distribute.
7. You may place library facilities that are a work based on the Library side-by-side in a single library together with other library facilities not covered by this License, and distribute such a combined library, provided that the separate distribution of the work based on the Library and of the other library facilities is otherwise permitted, and provided that you do these two things:
a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities. This must be distributed under the terms of the Sections above.
b) Give prominent notice with the combined library of the fact that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work.
8. You may not copy, modify, sublicense, link with, or distribute the Library except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, link with, or distribute the Library is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance.
9. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Library or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Library (or any work based on the Library), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Library or works based on it.
10. Each time you redistribute the Library (or any work based on the Library), the recipient automatically receives a license from the original licensor to copy, distribute, link with or modify the Library subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties with this License.
11. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Library at all. For example, if a patent license would not permit royalty-free redistribution of the Library by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Library.
If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply, and the section as a whole is intended to apply in other circumstances.
It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice.
This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License.
12. If the distribution and/or use of the Library is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Library under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License.
13. The Free Software Foundation may publish revised and/or new versions of the Lesser General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns.
Each version is given a distinguishing version number. If the Library specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Library does not specify a license version number, you may choose any version ever published by the Free Software Foundation.
14. If you wish to incorporate parts of the Library into other free programs whose distribution conditions are incompatible with these, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally.
NO WARRANTY
15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Libraries
If you develop a new library, and you want it to be of the greatest possible use to the public, we recommend making it free software that everyone can redistribute and change. You can do so by permitting redistribution under these terms (or, alternatively, under the terms of the ordinary General Public License).
To apply these terms, attach the following notices to the library. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found.
one line to give the library's name and an idea of what it does.
Copyright (C) year name of author
This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Also add information on how to contact you by electronic and paper mail.
You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the library, if necessary. Here is a sample; alter the names:
Yoyodyne, Inc., hereby disclaims all copyright interest in
the library `Frob' (a library for tweaking knobs) written
by James Random Hacker.
signature of Ty Coon, 1 April 1990
Ty Coon, President of Vice
That's all there is to it!

18
LICENSES/MIT.txt Normal file
View File

@ -0,0 +1,18 @@
MIT License
Copyright (c) <year> <copyright holders>
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and
associated documentation files (the "Software"), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the
following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial
portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT
LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO
EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
USE OR OTHER DEALINGS IN THE SOFTWARE.

316
README.md
View File

@ -1,206 +1,66 @@
![Deskflow](https://github.com/user-attachments/assets/f005b958-24df-4f4a-9bfd-4f834dae59d6)
> [!TIP]
> We're on Libera Chat IRC network (`#deskflow` or `#deskflow-dev`).
>
> Or if you want to stay on GitHub, you can [start a new discussion](https://github.com/deskflow/deskflow/discussions).
> [!IMPORTANT]
> 🚀 Deskflow is now the upstream project for Synergy.
>
> The project has been renamed to draw a line between the community-run project (now Deskflow),
> and the commercially licensed product, Synergy.
>
> We are currently in the process of renaming the project to Deskflow and moving all licensing code
> downstream.
>
> Hold on to your butts, this is going to be a hell of a ride.
>
> [Join the discussion](https://github.com/deskflow/deskflow/discussions/7517)
[![Sponsored by: Synergy](https://raw.githubusercontent.com/deskflow/deskflow-artwork/b2c72a3e60a42dee793bd47efc275b5ee0bdaa5f/misc/synergy-sponsor.svg)](https://github.com/deskflow/deskflow/wiki/Relationship-with-Synergy)
[![GitHub Release](https://img.shields.io/github/v/release/deskflow/deskflow?display_name=release&label=latest%20version)](https://github.com/deskflow/deskflow/releases)
[![GitHub commit activity](https://img.shields.io/github/commit-activity/m/deskflow/deskflow)](https://github.com/deskflow/deskflow/commits/master/)
![GitHub top language](https://img.shields.io/github/languages/top/deskflow/deskflow)
[![GitHub License](https://img.shields.io/github/license/deskflow/deskflow)](LICENSE)
[![Quality Gate Status](https://sonarcloud.io/api/project_badges/measure?project=deskflow_deskflow&metric=alert_status)](https://sonarcloud.io/summary/new_code?id=deskflow_deskflow)
[![CI](https://github.com/deskflow/deskflow/actions/workflows/ci.yml/badge.svg)](https://github.com/deskflow/deskflow/actions/workflows/ci.yml)
[![CodeQL Analysis](https://github.com/deskflow/deskflow/actions/workflows/codeql-analysis.yml/badge.svg)](https://github.com/deskflow/deskflow/actions/workflows/codeql-analysis.yml)
[![SonarCloud Analysis](https://github.com/deskflow/deskflow/actions/workflows/sonarcloud-analysis.yml/badge.svg)](https://github.com/deskflow/deskflow/actions/workflows/sonarcloud-analysis.yml)
[![Build containers](https://github.com/deskflow/deskflow/actions/workflows/build-containers.yml/badge.svg)](https://github.com/deskflow/deskflow/actions/workflows/build-containers.yml)
**Deskflow** is a free and open source keyboard and mouse sharing app.
Use the keyboard, mouse, or trackpad of one computer to control nearby computers,
and work seamlessly between them.
It's like a software KVM (but without the video).
TLS encryption is enabled by default. Wayland is supported. Clipboard sharing is supported.
**Wayland support:** Experimental support in
[Deskflow v1.16](https://github.com/deskflow/deskflow/releases/tag/1.16.0-beta%2Br2)
(required >= GNOME 46 or KDE Plasma 6.1).
## Download
![Deskflow GUI](https://github.com/user-attachments/assets/883660dc-f3f5-4b69-8821-a079a58d3882)
To use Deskflow you can follow the [Build Quick Start](#build-quick-start),
use one of our packages, or if it's available by your favorite package repository,
install `deskflow` (see: [installing packages](#how-to-install-packages)).
## Project values
- Motivated by the community interests (not business-driven)
- Privacy by default (no update check or phone home on by default)
- Nothing customer-related (this is all moved downstream to Synergy)
- Have fun; we don't need to worry about impressing anyone
## Ways to get involved
Here are a few ways to join in with the project and get involved:
* Build the latest `master` version (see below) and [report a bug](https://github.com/deskflow/deskflow/issues)
* [Submit a PR](https://github.com/deskflow/deskflow/wiki/Contributing) (pull request) with a bug fix or improvement
* [Let us know](https://github.com/deskflow/deskflow/issues) if you have an idea for an improvement
## Build Quick Start
[![Downloads: Stable Release](https://img.shields.io/github/downloads/deskflow/deskflow/latest/total?style=for-the-badge&logo=github&label=Download%20Stable)](https://github.com/deskflow/deskflow/releases/latest)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[![Downloads: Continuous Build](https://img.shields.io/github/downloads/deskflow/deskflow/continuous/total?style=for-the-badge&logo=github&label=Download%20Continuous)](https://github.com/deskflow/deskflow/releases/continuous)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[![Download From Flathub](https://img.shields.io/flathub/downloads/org.deskflow.deskflow?style=for-the-badge&logo=flathub&label=Download%20from%20flathub)](https://flathub.org/apps/org.deskflow.deskflow)
> [!TIP]
> Check the [Build Guide](https://github.com/deskflow/deskflow/wiki/Build-Guide)
> wiki page if you have problems.
> For macOS users, the easiest way to install and stay up to date is to use [Homebrew](https://brew.sh) with our [homebrew-tap](https://github.com/deskflow/homebrew-tap).
**1. Dependencies:**
To use Deskflow, download one of our [packages](https://github.com/deskflow/deskflow/releases), install `deskflow` (from your package repository), or [build it](https://github.com/deskflow/deskflow/wiki/Building) from source.
You can either copy/paste the commands for your OS from [`config.yaml`](config.yaml) or use the deps script.
## Stats
*Linux, macOS, or BSD-derived:*
```
./scripts/install_deps.sh
```
[![GitHub commit activity](https://img.shields.io/github/commit-activity/m/deskflow/deskflow?logo=github)](https://github.com/deskflow/deskflow/commits/master/)
[![GitHub top language](https://img.shields.io/github/languages/top/deskflow/deskflow?logo=github)](https://github.com/deskflow/deskflow/commits/master/)
[![GitHub License](https://img.shields.io/github/license/deskflow/deskflow?logo=github)](LICENSE)
[![REUSE status](https://api.reuse.software/badge/github.com/deskflow/deskflow)](https://api.reuse.software/info/github.com/deskflow/deskflow)
*Windows:*
```
python scripts/install_deps.py
```
[![Quality Gate Status](https://sonarcloud.io/api/project_badges/measure?project=deskflow_deskflow&metric=alert_status)](https://sonarcloud.io/summary/new_code?id=deskflow_deskflow)
[![Coverage](https://sonarcloud.io/api/project_badges/measure?project=deskflow_deskflow&metric=coverage)](https://sonarcloud.io/summary/new_code?id=deskflow_deskflow)
[![Code Smells](https://sonarcloud.io/api/project_badges/measure?project=deskflow_deskflow&metric=code_smells)](https://sonarcloud.io/summary/new_code?id=deskflow_deskflow)
[![Vulnerabilities](https://sonarcloud.io/api/project_badges/measure?project=deskflow_deskflow&metric=vulnerabilities)](https://sonarcloud.io/summary/new_code?id=deskflow_deskflow)
**2. Configure:**
[![CI](https://github.com/deskflow/deskflow/actions/workflows/continuous-integration.yml/badge.svg)](https://github.com/deskflow/deskflow/actions/workflows/continuous-integration.yml)
[![CodeQL Analysis](https://github.com/deskflow/deskflow/actions/workflows/codeql-analysis.yml/badge.svg)](https://github.com/deskflow/deskflow/actions/workflows/codeql-analysis.yml)
[![SonarCloud Analysis](https://github.com/deskflow/deskflow/actions/workflows/sonarcloud-analysis.yml/badge.svg)](https://github.com/deskflow/deskflow/actions/workflows/sonarcloud-analysis.yml)
*Linux, macOS, or BSD-derived:*
```
cmake -B build
```
## Contribute
*Windows:*
```
cmake -B build --preset=windows-release
```
[![Good first issues](https://img.shields.io/github/issues/deskflow/deskflow/good%20first%20issue?label=good%20first%20issues&color=%2344cc11)](https://github.com/deskflow/deskflow/labels/good%20first%20issue) [![Open bounty issues](https://img.shields.io/github/issues/deskflow/deskflow/%F0%9F%92%8E%20bounty?label=💎%20open%20bounty%20issues&color=%2344cc11)](https://github.com/deskflow/deskflow/issues?q=is%3Aissue%20state%3Aopen%20label%3A%22%F0%9F%92%8E%20bounty%22) [![Rewarded bounties](https://img.shields.io/github/issues-search/deskflow/deskflow?query=label%3A%22%F0%9F%92%B0%20rewarded%22&label=%F0%9F%92%B0%20rewarded%20bounties&color=yellow)](https://github.com/deskflow/deskflow/issues?q=label%3A%22%F0%9F%92%B0%20rewarded%22%20sort%3Aupdated-desc)
**3. Build:**
```
cmake --build build -j8
```
There are many ways to contribute to the Deskflow project.
**4. Test:**
```
./build/bin/unittests
./build/bin/integtests
```
We're a friendly, active, and welcoming community focused on building a great app.
**5. Run**
```
./build/bin/deskflow
```
Read our [Contributing](https://github.com/deskflow/deskflow/wiki/Contributing) page to get started.
## How to install (packages)
*macOS:*
*(coming soon)*
```
brew install deskflow
```
*Fedora, Red Hat, etc:*
*(coming soon)*
```
sudo dnf install deskflow
```
*Debian, Ubuntu, etc:*
*(coming soon)*
```
sudo apt install deskflow
```
*Arch, Manjaro, etc:*
*(coming soon)*
```
sudo pacman -S deskflow
```
*Windows:*
*(coming soon)*
```
choco install deskflow
```
**Note:** We are working with package maintainers to have our new package name adopted.
For instructions on building Deskflow, use the wiki page: [Building](https://github.com/deskflow/deskflow/wiki/Building)
## Operating Systems
We support all major operating systems, including Windows, macOS, Linux, and Unix-like BSD-derived.
All Linux distributions are supported, primarily focusing on:
Debian, Ubuntu, Linux Mint, Fedora, RHEL, AlmaLinux, Rocky Linux, Arch Linux, openSUSE, Gentoo.
> [!NOTE]
> On Windows, you will need to install the
> [Microsoft Visual C++ Redistributable](https://learn.microsoft.com/en-us/cpp/windows/latest-supported-vc-redist?view=msvc-170#latest-microsoft-visual-c-redistributable-version).
> Download latest: [`vc_redist.x64.exe`](https://aka.ms/vs/17/release/vc_redist.x64.exe)
Windows 10 or higher is required.
macOS 12 or higher is required.
Linux requires libei 1.3+ and libportal 0.8+ for the server/client. Additionally, Qt 6.7+ is required for the GUI.
Linux users with systems not meeting these requirements should use flatpak in place of a native package.
We officially support FreeBSD, and would also like to support: OpenBSD, NetBSD, DragonFly, Solaris.
## Collaborative Projects
In the open source developer community, similar projects collaborate for the betterment of all
mouse and keyboard sharing tools. We aim for idea sharing and interoperability.
* [**Lan Mouse**](https://github.com/feschber/lan-mouse) -
Rust implementation with the goal of having native front-ends and interoperability with
Deskflow/Synergy.
* [**Input Leap**](https://github.com/input-leap/input-leap) -
Deskflow/Synergy-derivative with the goal of continuing what Barrier started, after Barrier
became a dead fork.
* [**Synergy**](https://github.com/deskflow/deskflow/wiki/Relationship-with-Synergy) -
Downstream commercial fork and Deskflow sponsor, geared toward adapting upstream to customer
needs, offering business and enterprise licensing.
## FAQ
### Is Deskflow compatible with Lan Mouse or Input Leap?
We would love to see compatibility between our fellow open source projects, Lan Mouse and
Input Leap. This idea is discussed from time in the communities for all of our projects,
so it may happen in the not-too-distant future.
### If I want to solve issues in Deskflow do I need to contribute to a fork?
We welcome PRs (pull requests) from the community. If you'd like to make a change, please feel
free to [start a discussion](https://github.com/deskflow/deskflow/discussions) or
[open a PR](https://github.com/deskflow/deskflow/wiki/Contributing).
### Is clipboard sharing supported?
Absolutely. The clipboard-sharing feature is a cornerstone feature of the product and we are
committed to maintaining and improving that feature.
### Is Wayland for Linux supported?
Yes! Wayland (the Linux display server protocol aimed to become the successor of the X Window
System) is an important platform for us.
The [`libei`](https://gitlab.freedesktop.org/libinput/libei) and
[`libportal`](https://github.com/flatpak/libportal) libraries enable
Wayland support for Deskflow. We would like to give special thanks to Peter Hutterer,
who is the author of `libei`, a major contributor to `libportal`, and the author of the Wayland
implementation in Deskflow. Others such as Olivier Fourdan and Povilas Kanapickas helped with the
Wayland implementation.
### Where did it all start?
Deskflow was first created as Synergy in 2001 by Chris Schoeneman.
Read about the [history of the project](https://github.com/deskflow/deskflow/wiki/History) on our
wiki.
## Repology
Repology monitors a huge number of package repositories and other sources comparing package
@ -208,6 +68,110 @@ versions across them and gathering other information.
[![Repology](https://repology.org/badge/vertical-allrepos/deskflow.svg?exclude_unsupported=1)](https://repology.org/project/deskflow/versions)
**Note:** We are working with package maintainers to have our new package name adopted.
## Installing on macOS
When you install Deskflow on macOS, you need to allow accessibility access (Privacy & Security) to both the `Deskflow` app and the `deskflow` process.
If using Sequoia, you may also need to allow `Deskflow` under Local Network settings (Privacy & Security).
When prompted by the OS, go to the settings and enable the access.
If you are upgrading and you already have `Deskflow` or `deskflow`
on the allowed list you will need to manually remove them before accessibility access can be granted to the new version.
macOS users who download directly from releases may need to run `xattr -c /Applications/Deskflow.app` after copying the app to the `Applications` dir.
It is recommend to install Deskflow using [Homebrew](https://brew.sh) from our [homebrew-tap](https://github.com/deskflow/homebrew-tap)
To add our tap, run:
```
brew tap deskflow/homebrew-tap
```
Then install either:
- Stable: `brew install deskflow`
- Continuous: `brew install deskflow-dev`
## Similar Projects
In the open source developer community, similar projects collaborate for the improvement of all
mouse and keyboard sharing tools. We aim for idea sharing and interoperability.
- [**Lan Mouse**](https://github.com/feschber/lan-mouse) -
Rust implementation with the goal of having native front-ends and interoperability with
Deskflow/Synergy.
- [**Input Leap**](https://github.com/input-leap/input-leap) -
Deskflow/Synergy-derivative with the goal of continuing what Barrier started, after Barrier
became a dead fork.
- [**Synergy**](https://symless.com/synergy) -
Downstream commercial fork. Synergy sponsors Deskflow with financial support and contributes code ([learn more](https://github.com/deskflow/deskflow/wiki/Relationship-with-Synergy)).
## FAQ
### Is Deskflow compatible with Synergy, Input Leap, or Barrier?
Yes, Deskflow has network compatibility with all forks:
- Requires Deskflow >= v1.17.0.96
- Deskflow will _just work_ with Input Leap and Barrier (server or client).
- Connecting a Deskflow client to a Synergy 1 server will also _just work_.
- To connect a Synergy 1 client, you need to select the Synergy protocol in the Deskflow server settings.
_Note:_ Only Synergy 1 is compatible with Deskflow (Synergy 3 is not yet compatible).
### Is Deskflow compatible with Lan Mouse?
We would love to see compatibility with Lan Mouse. This may be quite an effort as currently the way they handle the generated input is very different.
### If I want to solve issues in Deskflow do I need to contribute to a fork?
We welcome PRs (pull requests) from the community. If you'd like to make a change, please feel
free to [start a discussion](https://github.com/deskflow/deskflow/discussions) or
[open a PR](https://github.com/deskflow/deskflow/wiki/Contributing).
### Is clipboard sharing supported?
Absolutely. The clipboard-sharing feature is a cornerstone feature of the product and we are
committed to maintaining and improving that feature.
### Is Wayland for Linux supported?
Yes! Wayland (the Linux display server protocol aimed to become the successor of the X Window
System) is an important platform for us.
The [`libei`](https://gitlab.freedesktop.org/libinput/libei) and
[`libportal`](https://github.com/flatpak/libportal) libraries enable
Wayland support for Deskflow. We would like to give special thanks to Peter Hutterer,
who is the author of `libei`, a major contributor to `libportal`, and the author of the Wayland
implementation in Deskflow. Others such as Olivier Fourdan and Povilas Kanapickas helped with the
Wayland implementation.
Some features _may_ be unavailable or broken on Wayland. Please see the [known Wayland issues](https://github.com/deskflow/deskflow/discussions/7499).
### Where did it all start?
Deskflow was first created as Synergy in 2001 by Chris Schoeneman.
Read about the [history of the project](https://github.com/deskflow/deskflow/wiki/History) on our
wiki.
## Meow'Dib (our mascot)
![Meow'Dib](https://github.com/user-attachments/assets/726f695c-3dfb-4abd-875d-ed658f6c610f)
## Deskflow Contributors
[![Sponsored by Synergy](https://raw.githubusercontent.com/deskflow/deskflow-artwork/b2c72a3e60a42dee793bd47efc275b5ee0bdaa5f/misc/synergy-sponsor.svg)](https://symless.com/synergy)
[Synergy](https://symless.com/synergy) sponsors the Deskflow project by contributing code and providing financial support ([learn more](https://github.com/deskflow/deskflow/wiki/Relationship-with-Synergy)).
Deskflow is made by possible by these contributors.
<a href = "https://github.com/deskflow/deskflow/graphs/contributors">
<img src = "https://contrib.rocks/image?repo=deskflow/deskflow"/>
</a>
## License
This project is licensed under [GPL-2.0](LICENSE) with an [OpenSSL exception](LICENSE_EXCEPTION).
This project is licensed under [GPL-2.0](LICENSE) with an [OpenSSL exception](LICENSES/LicenseRef-OpenSSL-Exception.txt).

206
REUSE.toml Normal file
View File

@ -0,0 +1,206 @@
# SPDX-FileCopyrightText: 2025 Chris Rizzitello <sithlord48@gmail.com>
# SPDX-License-Identifier: MIT
version = 1
SPDX-PackageName = "deskflow"
SPDX-PackageSupplier = "Deskflow Devs"
SPDX-PackageDownloadLocation = "https://github.com/deskflow/deskflow"
[[annotations]]
path = ".github/**"
precedence = "override"
SPDX-FileCopyrightText = "Deskflow Developers"
SPDX-License-Identifier = "MIT"
[[annotations]]
path = ".clang-format"
precedence = "override"
SPDX-FileCopyrightText = "Deskflow Developers"
SPDX-License-Identifier = "MIT"
[[annotations]]
path = ".editorconfig"
precedence = "override"
SPDX-FileCopyrightText = "Deskflow Developers"
SPDX-License-Identifier = "MIT"
[[annotations]]
path = ".gitattributes"
precedence = "override"
SPDX-FileCopyrightText = "Deskflow Developers"
SPDX-License-Identifier = "MIT"
[[annotations]]
path = ".gitignore"
precedence = "override"
SPDX-FileCopyrightText = "Deskflow Developers"
SPDX-License-Identifier = "MIT"
[[annotations]]
path = "cspell.json"
precedence = "override"
SPDX-FileCopyrightText = "Deskflow Developers"
SPDX-License-Identifier = "MIT"
[[annotations]]
path = "**/*.md"
precedence = "override"
SPDX-FileCopyrightText = "Deskflow Developers"
SPDX-License-Identifier = "MIT"
[[annotations]]
path = "sonar-project.properties"
precedence = "override"
SPDX-FileCopyrightText = "Deskflow Developers"
SPDX-License-Identifier = "MIT"
[[annotations]]
path = "vcpkg.json"
precedence = "override"
SPDX-FileCopyrightText = "Deskflow Developers"
SPDX-License-Identifier = "MIT"
[[annotations]]
path = "vcpkg-configuration.json"
precedence = "override"
SPDX-FileCopyrightText = "Deskflow Developers"
SPDX-License-Identifier = "MIT"
[[annotations]]
path = "doc/**"
precedence = "override"
SPDX-FileCopyrightText = "Deskflow Developers"
SPDX-License-Identifier = "MIT"
[[annotations]]
path = "deploy/mac/dmg-background.tiff"
precedence = "override"
SPDX-FileCopyrightText = "Deskflow Developers"
SPDX-License-Identifier = "GPL-2.0-only"
[[annotations]]
path = "deploy/mac/dmg-volume.icns"
precedence = "override"
SPDX-FileCopyrightText = "Deskflow Developers"
SPDX-License-Identifier = "GPL-2.0-only"
[[annotations]]
path = "deploy/linux/deskflow.png"
precedence = "override"
SPDX-FileCopyrightText = "Deskflow Developers"
SPDX-License-Identifier = "GPL-2.0-only"
[[annotations]]
path = "deploy/linux/flatpak/**"
precedence = "override"
SPDX-FileCopyrightText = "Deskflow Developers"
SPDX-License-Identifier = "MIT"
[[annotations]]
path = "deploy/linux/org.deskflow.deskflow.metainfo.xml"
precedence = "override"
SPDX-FileCopyrightText = "Deskflow Developers"
SPDX-License-Identifier = "MIT"
[[annotations]]
path = "deploy/windows/wix-banner.png"
precedence = "override"
SPDX-FileCopyrightText = "Deskflow Developers"
SPDX-License-Identifier = "GPL-2.0-only"
[[annotations]]
path = "deploy/windows/wix-dialog.png"
precedence = "override"
SPDX-FileCopyrightText = "Deskflow Developers"
SPDX-License-Identifier = "GPL-2.0-only"
[[annotations]]
path = "deploy/windows/wix-patch.xml.in"
precedence = "override"
SPDX-FileCopyrightText = "Deskflow Developers"
SPDX-License-Identifier = "MIT"
[[annotations]]
path = "src/apps/deskflow-client/deskflow-client.exe.manifest"
precedence = "override"
SPDX-FileCopyrightText = "Deskflow Developers"
SPDX-License-Identifier = "MIT"
[[annotations]]
path = "src/apps/deskflow-core/deskflow-core.exe.manifest"
precedence = "override"
SPDX-FileCopyrightText = "Deskflow Developers"
SPDX-License-Identifier = "MIT"
[[annotations]]
path = "src/apps/deskflow-server/deskflow-server.exe.manifest"
precedence = "override"
SPDX-FileCopyrightText = "Deskflow Developers"
SPDX-License-Identifier = "MIT"
[[annotations]]
path = "src/apps/res/manpage.txt"
precedence = "override"
SPDX-FileCopyrightText = "Deskflow Developers"
SPDX-License-Identifier = "MIT"
[[annotations]]
path = "src/apps/res/icons/deskflow-**/**/**/**.svg"
precedence = "override"
SPDX-FileCopyrightText = "Kde Breeze Icons"
SPDX-License-Identifier = "LGPL-2.1-only"
[[annotations]]
path = "src/apps/res/icons/deskflow-**/apps/64/deskflow*.svg"
precedence = "override"
SPDX-FileCopyrightText = "Deskflow Developers"
SPDX-License-Identifier = "GPL-2.0-only"
[[annotations]]
path = "src/apps/res/image/welcome.png"
precedence = "override"
SPDX-FileCopyrightText = "Deskflow Developers"
SPDX-License-Identifier = "GPL-2.0-only"
[[annotations]]
path = "src/apps/res/Deskflow.icns"
precedence = "override"
SPDX-FileCopyrightText = "Deskflow Developers"
SPDX-License-Identifier = "GPL-2.0-only"
[[annotations]]
path = "src/apps/res/deskflow.ico"
precedence = "override"
SPDX-FileCopyrightText = "Deskflow Developers"
SPDX-License-Identifier = "GPL-2.0-only"
[[annotations]]
path = "src/apps/res/deskflow.plist.in"
precedence = "override"
SPDX-FileCopyrightText = "Deskflow Developers"
SPDX-License-Identifier = "MIT"
[[annotations]]
path = "src/apps/res/deskflow.qrc"
precedence = "override"
SPDX-FileCopyrightText = "Deskflow Developers"
SPDX-License-Identifier = "GPL-2.0-only"
[[annotations]]
path = "src/apps/res/icons/deskflow-**/index.theme"
precedence = "override"
SPDX-FileCopyrightText = "Chris Rizzitello <sithlord48@gmail.com>"
SPDX-License-Identifier = "LGPL-2.1-only"
[[annotations]]
path = "src/lib/gui/MainWindow.ui"
precedence = "override"
SPDX-FileCopyrightText = "Deskflow Developers"
SPDX-License-Identifier = "GPL-2.0-only WITH LicenseRef-OpenSSL-Exception"
[[annotations]]
path = "src/lib/gui/dialogs/*.ui"
precedence = "override"
SPDX-FileCopyrightText = "Deskflow Developers"
SPDX-License-Identifier = "GPL-2.0-only WITH LicenseRef-OpenSSL-Exception"

11
SECURITY.md Normal file
View File

@ -0,0 +1,11 @@
# Security Policy
## Supported Versions
The latest minor release is supported and receives security updates:
https://github.com/deskflow/deskflow/releases
## Reporting a Vulnerability
Please report vulnerabilities on our issue tracker as bugs:
https://github.com/deskflow/deskflow/issues

View File

@ -1 +0,0 @@
1.17.0

View File

@ -1,10 +0,0 @@
format:
# Solves line ending issues on Windows.
line_ending: "auto"
# Any more than 4 args, and function calls become hard to read.
max_pargs_hwrap: 4
markup:
# Disable formatting of comments entirely, as this is annoying.
enable_markup: false

View File

@ -1,115 +0,0 @@
# Deskflow -- mouse and keyboard sharing utility
# Copyright (C) 2024 Symless Ltd.
#
# This package is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# found in the file LICENSE that should have accompanied this file.
#
# This package is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
macro(configure_build)
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_EXTENSIONS OFF)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/bin")
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/lib")
if(APPLE)
message(STATUS "Configuring for Apple")
set(CMAKE_OSX_DEPLOYMENT_TARGET "12.0")
endif()
warnings_as_errors()
set_build_date()
configure_file_shared()
endmacro()
macro(warnings_as_errors)
if(WIN32)
message(STATUS "Enabling warnings as errors (MSVC)")
add_compile_options(/WX)
elseif(UNIX)
message(STATUS "Enabling warnings as errors (GNU/Clang)")
add_compile_options(-Werror)
endif()
endmacro()
macro(set_build_date)
# Since CMake 3.8.0, `string(TIMESTAMP ...)` respects `SOURCE_DATE_EPOCH` env var if set,
# which allows package maintainers to create reproducible builds.
# We require CMake 3.8.0 in the root `CMakeLists.txt` for this reason.
string(TIMESTAMP BUILD_DATE "%Y-%m-%d" UTC)
message(STATUS "Build date: ${BUILD_DATE}")
add_definitions(-DBUILD_DATE="${BUILD_DATE}")
endmacro()
macro(configure_file_shared)
configure_file(${PROJECT_SOURCE_DIR}/src/lib/gui/gui_config.h.in
${PROJECT_BINARY_DIR}/config/gui_config.h)
endmacro()
macro(post_config)
# Build to a temp bin dir on Windows and then copy to the final bin dir
# (ignore copy fail). It is neccesary to do this. Since the binary may already
# be running and you can't write to a running binary (on Windows). It's common
# to use Deskflow to develop Deskflow (i.e. eating your own dog food immediately
# making it).
if(WIN32)
if(NOT target)
message(FATAL_ERROR "target not set")
endif()
set_target_properties(${target} PROPERTIES RUNTIME_OUTPUT_DIRECTORY
${BIN_TEMP_DIR})
endif()
endmacro()
macro(post_config_all)
if(WIN32)
# Always try to copy the files to the bin directory after every build and deliberatly ignore
# copy errors, usually the error is because a running process has locked the file.
#
# It is useful to copy every time because the copy may have failed last time due to the file
# being in use, and we'll usually want to try again (after killing the process).
#
# Yes, this looks like a ridiculous thing to do, but it really is necessary to
# use a Python script to copy files on Windows. Why? Two reasons:
#
# 1. Windows file locks (on running processes) creates a very painful development
# experience; you can't overwrite the binary you're running it.
# Why not just stop the process? Windows services are an abject PITA to manage,
# and we don't always care about overwriting all binaries.
#
# 2. The Windows copy command is limited and gives vague/misleading errors.
# The CMake copy command also has similar shortfalls.
#
# Patches welcome! :)
add_custom_target(
run_post_build ALL
COMMAND ${Python_EXECUTABLE} ${PROJECT_SOURCE_DIR}/scripts/fancy_copy.py
${BIN_TEMP_DIR} ${PROJECT_BINARY_DIR}/bin --ignore-errors
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
VERBATIM
COMMENT "Copying files to bin dir")
add_dependencies(
run_post_build
${GUI_BINARY_NAME}
${CLIENT_BINARY_NAME}
${SERVER_BINARY_NAME}
${DAEMON_BINARY_NAME})
endif()
endmacro()

View File

@ -1,72 +1,11 @@
# SOURCE https://github.com/bilke/cmake-modules/blob/master/CodeCoverage.cmake
# Copyright (c) 2012 - 2017, Lars Bilke
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without modification,
# are permitted provided that the following conditions are met:
#
# 1. Redistributions of source code must retain the above copyright notice, this
# list of conditions and the following disclaimer.
#
# 2. Redistributions in binary form must reproduce the above copyright notice,
# this list of conditions and the following disclaimer in the documentation
# and/or other materials provided with the distribution.
#
# 3. Neither the name of the copyright holder nor the names of its contributors
# may be used to endorse or promote products derived from this software without
# specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
# ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#
# CHANGES:
#
# 2012-01-31, Lars Bilke
# - Enable Code Coverage
#
# 2013-09-17, Joakim Söderberg
# - Added support for Clang.
# - Some additional usage instructions.
#
# 2016-02-03, Lars Bilke
# - Refactored functions to use named parameters
#
# 2017-06-02, Lars Bilke
# - Merged with modified version from github.com/ufz/ogs
#
# 2019-05-06, Anatolii Kurotych
# - Remove unnecessary --coverage flag
#
# 2019-12-13, FeRD (Frank Dana)
# - Deprecate COVERAGE_LCOVR_EXCLUDES and COVERAGE_GCOVR_EXCLUDES lists in favor
# of tool-agnostic COVERAGE_EXCLUDES variable, or EXCLUDE setup arguments.
# - CMake 3.4+: All excludes can be specified relative to BASE_DIRECTORY
# - All setup functions: accept BASE_DIRECTORY, EXCLUDE list
# - Set lcov basedir with -b argument
# - Add automatic --demangle-cpp in lcovr, if 'c++filt' is available (can be
# overridden with NO_DEMANGLE option in setup_target_for_coverage_lcovr().)
# - Delete output dir, .info file on 'make clean'
# - Remove Python detection, since version mismatches will break gcovr
# - Minor cleanup (lowercase function names, update examples...)
#
# 2019-12-19, FeRD (Frank Dana)
# - Rename Lcov outputs, make filtered file canonical, fix cleanup for targets
#
# 2020-01-19, Bob Apthorpe
# - Added gfortran support
#
# 2020-02-17, FeRD (Frank Dana)
# - Make all add_custom_target()s VERBATIM to auto-escape wildcard characters
# in EXCLUDEs, and remove manual escaping from gcovr targets
#
# SPDX-FileCopyrightText: 2020 Bob Apthrope
# SPDX-FileCopyrightText: 2019 Anatolii Kurotych
# SPDX-FileCopyrightText: 2019 - 2020 Frank Dana
# SPDX-FileCopyrightText: 2013 Joakim Söderberg
# SPDX-FileCopyrightText: 2012 - 2017 Lars Bilke
# SPDX-License-Identifier: MIT
# USAGE:
#
# 1. Copy this file into your cmake modules path.

View File

@ -1,224 +0,0 @@
# Deskflow -- mouse and keyboard sharing utility
# Copyright (C) 2012-2024 Symless Ltd.
# Copyright (C) 2009-2012 Nick Bolton
#
# This package is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# found in the file LICENSE that should have accompanied this file.
#
# This package is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
macro(configure_definitions)
configure_meta()
configure_ninja()
configure_options()
set(INTEG_TESTS_BIN integtests)
set(UNIT_TESTS_BIN unittests)
if(NOT "$ENV{GIT_SHA}" STREQUAL "")
# Shorten the Git SHA to 8 chars for readability
string(SUBSTRING "$ENV{GIT_SHA}" 0 8 GIT_SHA_SHORT)
message(STATUS "Short Git SHA: ${GIT_SHA_SHORT}")
add_definitions(-DGIT_SHA_SHORT="${GIT_SHA_SHORT}")
endif()
if(NOT CMAKE_BUILD_TYPE STREQUAL "Debug")
message(STATUS "Disabling debug build")
add_definitions(-DNDEBUG)
endif()
# TODO: find out why we need these, and remove them if we don't.
if(COMMAND cmake_policy)
cmake_policy(SET CMP0003 NEW)
cmake_policy(SET CMP0005 NEW)
endif()
# TODO: explain why we're adding headers to sources.
if(${CMAKE_GENERATOR} STREQUAL "Unix Makefiles")
set(ADD_HEADERS_TO_SOURCES FALSE)
else()
set(ADD_HEADERS_TO_SOURCES TRUE)
endif()
set(BIN_TEMP_DIR ${PROJECT_BINARY_DIR}/temp/bin)
endmacro()
macro(configure_meta)
set(DESKFLOW_APP_ID
"deskflow"
CACHE STRING "ID of the app for filenames, etc")
set(DESKFLOW_DOMAIN
"deskflow.org"
CACHE STRING "Domain of the app maintainer (not a URL)")
set(DESKFLOW_APP_NAME
"Deskflow"
CACHE STRING "App name (used in GUI title bar, etc)")
set(DESKFLOW_AUTHOR_NAME
"Deskflow"
CACHE STRING "Author name (also used as organization name)")
set(DESKFLOW_MAINTAINER
"Deskflow <maintainers@deskflow.org>"
CACHE STRING "Maintainer email address in RFC 5322 mailbox format")
set(DESKFLOW_WEBSITE_URL
"https://deskflow.org"
CACHE STRING "URL of the app website")
set(DESKFLOW_VERSION_URL
"https://api.deskflow.org/version"
CACHE STRING "URL to get the latest version")
set(DESKFLOW_HELP_TEXT
"Report a bug"
CACHE STRING "Text label for the help menu item")
set(DESKFLOW_RES_DIR
"${PROJECT_SOURCE_DIR}/res"
CACHE STRING "Resource directory for images, etc")
set(DESKFLOW_MAC_BUNDLE_CODE
"DFLW"
CACHE STRING "Mac bundle code (4 characters)")
set(DESKFLOW_SHOW_DEV_THANKS
true
CACHE BOOL "Show developer thanks message")
message(VERBOSE "App ID: ${DESKFLOW_APP_ID}")
message(VERBOSE "App domain: ${DESKFLOW_DOMAIN}")
message(VERBOSE "App name: ${DESKFLOW_APP_NAME}")
message(VERBOSE "Author name: ${DESKFLOW_AUTHOR_NAME}")
message(VERBOSE "Maintainer: ${DESKFLOW_MAINTAINER}")
message(VERBOSE "Website URL: ${DESKFLOW_WEBSITE_URL}")
message(VERBOSE "Version URL: ${DESKFLOW_VERSION_URL}")
message(VERBOSE "Help text: ${DESKFLOW_HELP_TEXT}")
message(VERBOSE "Res dir: ${DESKFLOW_RES_DIR}")
message(VERBOSE "Mac bundle code: ${DESKFLOW_MAC_BUNDLE_CODE}")
message(VERBOSE "Show dev thanks: ${DESKFLOW_SHOW_DEV_THANKS}")
# TODO: We need to move this to configure_file() in the future, which is much cleaner.
add_definitions(-DDESKFLOW_APP_ID="${DESKFLOW_APP_ID}")
add_definitions(-DDESKFLOW_DOMAIN="${DESKFLOW_DOMAIN}")
add_definitions(-DDESKFLOW_APP_NAME="${DESKFLOW_APP_NAME}")
add_definitions(-DDESKFLOW_AUTHOR_NAME="${DESKFLOW_AUTHOR_NAME}")
add_definitions(-DDESKFLOW_MAINTAINER="${DESKFLOW_MAINTAINER}")
add_definitions(-DDESKFLOW_WEBSITE_URL="${DESKFLOW_WEBSITE_URL}")
add_definitions(-DDESKFLOW_VERSION_URL="${DESKFLOW_VERSION_URL}")
add_definitions(-DDESKFLOW_HELP_TEXT="${DESKFLOW_HELP_TEXT}")
add_definitions(-DDESKFLOW_RES_DIR="${DESKFLOW_RES_DIR}")
if(DESKFLOW_SHOW_DEV_THANKS)
message(VERBOSE "Showing developer thanks message")
add_definitions(-DDESKFLOW_SHOW_DEV_THANKS)
else()
message(VERBOSE "Not showing developer thanks message")
endif()
configure_bin_names()
endmacro()
macro(configure_bin_names)
set(GUI_BINARY_NAME
"deskflow"
CACHE STRING "Filename of the GUI binary")
set(SERVER_BINARY_NAME
"deskflow-server"
CACHE STRING "Filename of the server binary")
set(CLIENT_BINARY_NAME
"deskflow-client"
CACHE STRING "Filename of the client binary")
set(CORE_BINARY_NAME
"deskflow-core"
CACHE STRING "Filename of the core binary")
set(DAEMON_BINARY_NAME
"deskflow-daemon"
CACHE STRING "Filename of the daemon binary")
set(LEGACY_BINARY_NAME
"deskflow-legacy"
CACHE STRING "Filename of the legacy binary")
message(VERBOSE "GUI binary: ${GUI_BINARY_NAME}")
message(VERBOSE "Server binary: ${SERVER_BINARY_NAME}")
message(VERBOSE "Client binary: ${CLIENT_BINARY_NAME}")
message(VERBOSE "Core binary: ${CORE_BINARY_NAME}")
message(VERBOSE "Daemon binary: ${DAEMON_BINARY_NAME}")
message(VERBOSE "Legacy binary: ${LEGACY_BINARY_NAME}")
add_definitions(-DGUI_BINARY_NAME="${GUI_BINARY_NAME}")
add_definitions(-DSERVER_BINARY_NAME="${SERVER_BINARY_NAME}")
add_definitions(-DCLIENT_BINARY_NAME="${CLIENT_BINARY_NAME}")
add_definitions(-DCORE_BINARY_NAME="${CORE_BINARY_NAME}")
add_definitions(-DDAEMON_BINARY_NAME="${DAEMON_BINARY_NAME}")
add_definitions(-DLEGACY_BINARY_NAME="${LEGACY_BINARY_NAME}")
endmacro()
macro(configure_ninja)
# use response files so that ninja can compile on windows, otherwise you get
# an error when linking qt: "The input line is too long."
set(CMAKE_C_USE_RESPONSE_FILE_FOR_OBJECTS 1)
set(CMAKE_CXX_USE_RESPONSE_FILE_FOR_OBJECTS 1)
set(CMAKE_C_RESPONSE_FILE_LINK_FLAG "@")
set(CMAKE_CXX_RESPONSE_FILE_LINK_FLAG "@")
set(CMAKE_NINJA_FORCE_RESPONSE_FILE
1
CACHE INTERNAL "")
endmacro()
macro(configure_options)
set(DEFAULT_BUILD_GUI ON)
set(DEFAULT_BUILD_INSTALLER ON)
set(DEFAULT_BUILD_TESTS ON)
# unified binary is off by default for now, for backwards compatibility.
set(DEFAULT_BUILD_UNIFIED OFF)
# coverage is off by default because it's GCC only and a developer preference.
set(DEFAULT_ENABLE_COVERAGE OFF)
if("$ENV{DESKFLOW_BUILD_MINIMAL}" STREQUAL "true")
set(DEFAULT_BUILD_GUI OFF)
set(DEFAULT_BUILD_INSTALLER OFF)
endif()
if("$ENV{DESKFLOW_BUILD_TESTS}" STREQUAL "false")
set(DEFAULT_BUILD_TESTS OFF)
endif()
if("$ENV{DESKFLOW_BUILD_UNIFIED}" STREQUAL "true")
set(DEFAULT_BUILD_UNIFIED ON)
endif()
if("$ENV{DESKFLOW_ENABLE_COVERAGE}" STREQUAL "true")
set(DEFAULT_ENABLE_COVERAGE ON)
endif()
option(BUILD_GUI "Build GUI" ${DEFAULT_BUILD_GUI})
option(BUILD_INSTALLER "Build installer" ${DEFAULT_BUILD_INSTALLER})
option(BUILD_TESTS "Build tests" ${DEFAULT_BUILD_TESTS})
option(BUILD_UNIFIED "Build unified binary" ${DEFAULT_BUILD_UNIFIED})
option(ENABLE_COVERAGE "Enable test coverage" ${DEFAULT_ENABLE_COVERAGE})
endmacro()

View File

@ -1,20 +1,6 @@
# Deskflow -- mouse and keyboard sharing utility
# Copyright (C) 2024 Symless Ltd.
#
# This package is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# found in the file LICENSE that should have accompanied this file.
#
# This package is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
set(LIBEI_MIN_VERSION 1.3)
set(LIBPORTAL_MIN_VERSION 0.8)
# SPDX-FileCopyrightText: 2024 - 2025 Deskflow Developers
# SPDX-FileCopyrightText: 2024 Symless Ltd
# SPDX-License-Identifier: MIT
macro(configure_libs)
@ -22,18 +8,58 @@ macro(configure_libs)
if(UNIX)
configure_unix_libs()
elseif(WIN32)
configure_windows_libs()
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /MP")
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /MD /O2 /Ob2")
list(APPEND libs Wtsapi32 Userenv Wininet comsuppw Shlwapi version)
add_definitions(
/DWIN32
/D_WINDOWS
/D_CRT_SECURE_NO_WARNINGS
/D_XKEYCHECK_H
)
endif()
configure_python()
configure_qt()
configure_openssl()
configure_coverage()
configure_tomlplusplus()
configure_cli11()
find_package(Qt6 ${REQUIRED_QT_VERSION} REQUIRED COMPONENTS Core Widgets Network)
if(UNIX AND NOT APPLE)
find_package(Qt6 ${REQUIRED_QT_VERSION} REQUIRED COMPONENTS DBus Xml)
endif()
if(BUILD_TESTS)
configure_gtest()
# Define the location of Qt deployment tool
if(WIN32)
if (CMAKE_BUILD_TYPE STREQUAL "Debug" AND NOT VCPKG_INSTALL_DIR STREQUAL "")
find_program(DEPLOYQT windeployqt.debug.bat)
else()
find_program(DEPLOYQT windeployqt)
endif()
elseif(APPLE)
find_program(DEPLOYQT macdeployqt)
endif()
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTORCC ON)
message(STATUS "Qt version: ${Qt6_VERSION}")
option(ENABLE_COVERAGE "Enable test coverage" OFF)
if(ENABLE_COVERAGE)
message(STATUS "Enabling code coverage")
include(cmake/CodeCoverage.cmake)
append_coverage_compiler_flags()
set(test_exclude subprojects/* build/* src/unittests/*)
set(test_src ${PROJECT_SOURCE_DIR}/src)
# Apparently solves the bug in gcov where it returns negative counts and confuses gcovr.
# > Got negative hit value in gcov line 'branch 2 taken -1' caused by a bug in gcov tool
# Bug report: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=68080
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fprofile-update=atomic")
setup_target_for_coverage_gcovr_xml(
NAME coverage-legacytests
EXECUTABLE legacytests
BASE_DIRECTORY ${test_src}
EXCLUDE ${test_exclude}
)
endif()
endmacro()
@ -56,30 +82,13 @@ macro(configure_unix_libs)
include(CheckSymbolExists)
include(CheckCSourceCompiles)
check_include_file_cxx(istream HAVE_ISTREAM)
check_include_file_cxx(ostream HAVE_OSTREAM)
check_include_file_cxx(sstream HAVE_SSTREAM)
check_include_files(inttypes.h HAVE_INTTYPES_H)
check_include_files(locale.h HAVE_LOCALE_H)
check_include_files(memory.h HAVE_MEMORY_H)
check_include_files(stdlib.h HAVE_STDLIB_H)
check_include_files(strings.h HAVE_STRINGS_H)
check_include_files(string.h HAVE_STRING_H)
check_include_files(sys/select.h HAVE_SYS_SELECT_H)
check_include_files(sys/socket.h HAVE_SYS_SOCKET_H)
check_include_files(sys/stat.h HAVE_SYS_STAT_H)
check_include_files(sys/time.h HAVE_SYS_TIME_H)
check_include_files(sys/utsname.h HAVE_SYS_UTSNAME_H)
check_include_files(unistd.h HAVE_UNISTD_H)
check_include_files(wchar.h HAVE_WCHAR_H)
check_function_exists(getpwuid_r HAVE_GETPWUID_R)
check_function_exists(gmtime_r HAVE_GMTIME_R)
check_function_exists(nanosleep HAVE_NANOSLEEP)
check_function_exists(sigwait HAVE_POSIX_SIGWAIT)
check_function_exists(strftime HAVE_STRFTIME)
check_function_exists(vsnprintf HAVE_VSNPRINTF)
check_function_exists(inet_aton HAVE_INET_ATON)
# For some reason, the check_function_exists macro doesn't detect the
@ -106,11 +115,6 @@ macro(configure_unix_libs)
endif()
check_type_size(char SIZEOF_CHAR)
check_type_size(int SIZEOF_INT)
check_type_size(long SIZEOF_LONG)
check_type_size(short SIZEOF_SHORT)
# pthread is used on both Linux and Mac
check_library_exists("pthread" pthread_create "" HAVE_PTHREAD)
if(HAVE_PTHREAD)
@ -120,239 +124,55 @@ macro(configure_unix_libs)
endif()
if(APPLE)
configure_mac_libs()
set(CMAKE_CXX_FLAGS "--sysroot ${CMAKE_OSX_SYSROOT} ${CMAKE_CXX_FLAGS} -DGTEST_USE_OWN_TR1_TUPLE=1")
find_library(lib_ScreenSaver ScreenSaver)
find_library(lib_IOKit IOKit)
find_library(lib_ApplicationServices ApplicationServices)
find_library(lib_Foundation Foundation)
find_library(lib_Carbon Carbon)
find_library(lib_UserNotifications UserNotifications)
list(APPEND libs
${lib_ScreenSaver} ${lib_IOKit} ${lib_ApplicationServices}
${lib_Foundation} ${lib_Carbon} ${lib_UserNotifications}
)
add_definitions(-DWINAPI_CARBON=1 -D_THREAD_SAFE)
else()
configure_xorg_libs()
configure_wayland_libs()
find_package(pugixml REQUIRED)
include(FindPkgConfig)
find_package(PkgConfig)
if(PKG_CONFIG_FOUND)
pkg_check_modules(lib_glib REQUIRED IMPORTED_TARGET glib-2.0)
pkg_search_module(PC_GDKPIXBUF gdk-pixbuf-2.0)
include_directories(${PC_GDKPIXBUF_INCLUDE_DIRS})
pkg_check_modules(lib_gdkpixbuf REQUIRED IMPORTED_TARGET gdk-pixbuf-2.0)
pkg_check_modules(lib_notify REQUIRED IMPORTED_TARGET libnotify)
add_definitions(-DHAVE_GDK_PIXBUF=1 -DHAVE_LIBNOTIFY=1)
pkg_check_modules(LIBXKBCOMMON REQUIRED xkbcommon)
pkg_check_modules(GLIB2 REQUIRED glib-2.0)
find_library(LIBM m)
include_directories(${LIBXKBCOMMON_INCLUDE_DIRS} ${GLIB2_INCLUDE_DIRS}
${LIBM_INCLUDE_DIRS})
else()
message(WARNING "pkg-config not found, skipping libnotify and gdk-pixbuf")
message(WARNING "pkg-config not found, skipping wayland libraries")
endif()
endif()
# For config.h, set some static values; it may be a good idea to make these
# values dynamic for non-standard UNIX compilers.
set(ACCEPT_TYPE_ARG3 socklen_t)
set(HAVE_CXX_BOOL 1)
set(HAVE_CXX_CASTS 1)
set(HAVE_CXX_EXCEPTIONS 1)
set(HAVE_CXX_MUTABLE 1)
set(HAVE_CXX_STDLIB 1)
set(HAVE_PTHREAD_SIGNAL 1)
set(SELECT_TYPE_ARG1 int)
set(SELECT_TYPE_ARG234 " (fd_set *)")
set(SELECT_TYPE_ARG5 " (struct timeval *)")
set(STDC_HEADERS 1)
set(TIME_WITH_SYS_TIME 1)
set(HAVE_SOCKLEN_T 1)
# Unix only: For config.h, save the results based on a template (config.h.in).
# Note that this won't work on Windows because filenames are not case sensitive,
# and we have header files named "Config.h" (upper case 'C').
configure_file(res/config.h.in ${CMAKE_CURRENT_BINARY_DIR}/src/lib/config.h)
configure_file(${CMAKE_SOURCE_DIR}/src/lib/Config.h.in
${CMAKE_BINARY_DIR}/src/lib/Config.h @ONLY)
add_definitions(-DSYSAPI_UNIX=1 -DHAVE_CONFIG_H)
endmacro()
#
# Apple macOS
#
macro(configure_mac_libs)
set(CMAKE_CXX_FLAGS
"--sysroot ${CMAKE_OSX_SYSROOT} ${CMAKE_CXX_FLAGS} -DGTEST_USE_OWN_TR1_TUPLE=1"
)
find_library(lib_ScreenSaver ScreenSaver)
find_library(lib_IOKit IOKit)
find_library(lib_ApplicationServices ApplicationServices)
find_library(lib_Foundation Foundation)
find_library(lib_Carbon Carbon)
list(
APPEND
libs
${lib_ScreenSaver}
${lib_IOKit}
${lib_ApplicationServices}
${lib_Foundation}
${lib_Carbon})
find_library(lib_UserNotifications UserNotifications)
list(APPEND libs ${lib_UserNotifications})
add_definitions(-DWINAPI_CARBON=1 -D_THREAD_SAFE)
endmacro()
macro(configure_wayland_libs)
include(FindPkgConfig)
if(PKG_CONFIG_FOUND)
configure_libei()
configure_libportal()
pkg_check_modules(LIBXKBCOMMON REQUIRED xkbcommon)
pkg_check_modules(GLIB2 REQUIRED glib-2.0 gio-2.0)
find_library(LIBM m)
include_directories(${LIBXKBCOMMON_INCLUDE_DIRS} ${GLIB2_INCLUDE_DIRS}
${LIBM_INCLUDE_DIRS})
else()
message(WARNING "pkg-config not found, skipping wayland libraries")
endif()
endmacro()
macro(configure_libei)
option(SYSTEM_LIBEI "Use system libei" ON)
if(SYSTEM_LIBEI)
pkg_check_modules(LIBEI QUIET "libei-1.0 >= ${LIBEI_MIN_VERSION}")
if(LIBEI_FOUND)
message(STATUS "libei version: ${LIBEI_VERSION}")
add_definitions(-DWINAPI_LIBEI=1)
include_directories(${LIBEI_INCLUDE_DIRS})
else()
message(WARNING "libei >= ${LIBEI_MIN_VERSION} not found")
endif()
else()
set(libei_bin_dir ${PROJECT_BINARY_DIR}/meson/subprojects/libei/src)
set(libei_src_dir ${PROJECT_SOURCE_DIR}/subprojects/libei)
find_library(
LIBEI_LINK_LIBRARIES
NAMES ei
PATHS ${libei_bin_dir}
NO_DEFAULT_PATH)
if(LIBEI_LINK_LIBRARIES)
message(STATUS "Using local subproject libei")
set(LIBEI_FOUND true)
add_definitions(-DWINAPI_LIBEI=1)
set(LIBEI_INCLUDE_DIRS ${libei_src_dir}/src)
include_directories(${LIBEI_INCLUDE_DIRS})
else()
message(WARNING "Local libei not found")
endif()
endif()
endmacro()
macro(configure_libportal)
option(SYSTEM_LIBPORTAL "Use system libportal" ON)
if(SYSTEM_LIBPORTAL)
pkg_check_modules(LIBPORTAL QUIET "libportal >= ${LIBPORTAL_MIN_VERSION}")
if(LIBPORTAL_FOUND)
message(STATUS "libportal version: ${LIBPORTAL_VERSION}")
check_libportal()
else()
message(WARNING "libportal >= ${LIBPORTAL_MIN_VERSION} not found")
endif()
else()
set(libportal_bin_dir
${PROJECT_BINARY_DIR}/meson/subprojects/libportal/libportal)
set(libportal_src_dir ${PROJECT_SOURCE_DIR}/subprojects/libportal)
option(LIBPORTAL_STATIC "Use the static libportal binary" OFF)
if(LIBPORTAL_STATIC)
set(CMAKE_FIND_LIBRARY_SUFFIXES .a ${CMAKE_FIND_LIBRARY_SUFFIXES})
endif()
find_library(
LIBPORTAL_LINK_LIBRARIES
NAMES portal
PATHS ${libportal_bin_dir}
NO_DEFAULT_PATH)
if(LIBPORTAL_LINK_LIBRARIES)
message(STATUS "Using local subproject libportal")
set(LIBPORTAL_FOUND true)
set(LIBPORTAL_INCLUDE_DIRS ${libportal_src_dir})
message(STATUS "libportal library file: ${LIBPORTAL_LINK_LIBRARIES}")
# HACK: Somehow `check_symbol_exists` doesn't pick up on the symbols even though
# they are actually there. Since we use master branch of libportal, for now we'll
# assume that the symbols are there.
set(HAVE_LIBPORTAL_SESSION_CONNECT_TO_EIS true)
set(HAVE_LIBPORTAL_CREATE_REMOTE_DESKTOP_SESSION_FULL true)
set(HAVE_LIBPORTAL_INPUTCAPTURE true)
set(HAVE_LIBPORTAL_OUTPUT_NONE true)
else()
message(WARNING "Local libportal not found")
endif()
endif()
if(LIBPORTAL_FOUND)
add_definitions(-DWINAPI_LIBPORTAL=1)
include_directories(${LIBPORTAL_INCLUDE_DIRS})
endif()
endmacro()
# libportal 0.7 has xdp_session_connect_to_eis but it doesn't have remote desktop session restore or
# the inputcapture code, so let's check for explicit functions that bits depending on what we have
macro(check_libportal)
include(CMakePushCheckState)
include(CheckCXXSourceCompiles)
cmake_push_check_state(RESET)
set(CMAKE_REQUIRED_INCLUDES
"${CMAKE_REQUIRED_INCLUDES};${LIBPORTAL_INCLUDE_DIRS};${GLIB2_INCLUDE_DIRS}"
)
set(CMAKE_REQUIRED_LIBRARIES
"${CMAKE_REQUIRED_LIBRARIES};${LIBPORTAL_LINK_LIBRARIES};${GLIB2_LINK_LIBRARIES}"
)
check_symbol_exists(xdp_session_connect_to_eis "libportal/portal.h"
HAVE_LIBPORTAL_SESSION_CONNECT_TO_EIS)
check_symbol_exists(
xdp_portal_create_remote_desktop_session_full "libportal/portal.h"
HAVE_LIBPORTAL_CREATE_REMOTE_DESKTOP_SESSION_FULL)
check_symbol_exists(xdp_input_capture_session_connect_to_eis
"libportal/inputcapture.h" HAVE_LIBPORTAL_INPUTCAPTURE)
# check_symbol_exists cant check for enum values
check_cxx_source_compiles(
"#include <libportal/portal.h>
int main() { XdpOutputType out = XDP_OUTPUT_NONE; }
" HAVE_LIBPORTAL_OUTPUT_NONE)
cmake_pop_check_state()
if(NOT HAVE_LIBPORTAL_SESSION_CONNECT_TO_EIS)
message(WARNING "xdp_session_connect_to_eis not found")
endif()
if(NOT HAVE_LIBPORTAL_CREATE_REMOTE_DESKTOP_SESSION_FULL)
message(WARNING "xdp_portal_create_remote_desktop_session_full not found")
endif()
if(NOT HAVE_LIBPORTAL_INPUTCAPTURE)
message(WARNING "xdp_input_capture_session_connect_to_eis not found")
endif()
if(NOT HAVE_LIBPORTAL_OUTPUT_NONE)
message(WARNING "XDP_OUTPUT_NONE not found")
endif()
endmacro()
#
# X.org/X11 for Linux, BSD, etc
#
@ -371,8 +191,6 @@ macro(configure_xorg_libs)
HAVE_X11_EXTENSIONS_DPMS_H)
check_include_files("X11/extensions/Xinerama.h"
HAVE_X11_EXTENSIONS_XINERAMA_H)
check_include_files("${XKBlib};X11/extensions/XKBstr.h"
HAVE_X11_EXTENSIONS_XKBSTR_H)
check_include_files("X11/extensions/XKB.h" HAVE_XKB_EXTENSION)
check_include_files("X11/extensions/XTest.h" HAVE_X11_EXTENSIONS_XTEST_H)
check_include_files("${XKBlib}" HAVE_X11_XKBLIB_H)
@ -454,265 +272,3 @@ macro(configure_xorg_libs)
add_definitions(-DWINAPI_XWINDOWS=1)
endmacro()
#
# Windows
#
macro(configure_windows_libs)
configure_wintoast()
set(CMAKE_CXX_FLAGS
"${CMAKE_CXX_FLAGS} /MP /D _BIND_TO_CURRENT_VCLIBS_VERSION=1")
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /MD /O2 /Ob2")
list(
APPEND
libs
Wtsapi32
Userenv
Wininet
comsuppw
Shlwapi)
add_definitions(
/DWIN32
/D_WINDOWS
/D_CRT_SECURE_NO_WARNINGS
/DDESKFLOW_VERSION=\"${DESKFLOW_VERSION}\"
/D_XKEYCHECK_H)
configure_file(${PROJECT_SOURCE_DIR}/res/win/version.rc.in
${PROJECT_BINARY_DIR}/src/version.rc @ONLY)
configure_windows_openssl()
endmacro()
macro(configure_windows_openssl)
set(OPENSSL_ROOT_DIR ${PROJECT_SOURCE_DIR}/vcpkg_installed/x64-windows)
set(OPENSSL_EXE_DIR ${OPENSSL_ROOT_DIR}/tools/openssl)
if(EXISTS ${OPENSSL_EXE_DIR})
message(VERBOSE "OpenSSL exe dir: ${OPENSSL_EXE_DIR}")
add_definitions(-DOPENSSL_EXE_DIR="${OPENSSL_EXE_DIR}")
else()
message(FATAL_ERROR "OpenSSL exe dir not found: ${OPENSSL_EXE_DIR}")
endif()
if(EXISTS ${OPENSSL_ROOT_DIR})
message(VERBOSE "OpenSSL root dir: ${OPENSSL_ROOT_DIR}")
else()
message(FATAL_ERROR "OpenSSL root dir not found: ${OPENSSL_ROOT_DIR}")
endif()
endmacro()
macro(configure_python)
if(WIN32)
find_package(Python REQUIRED QUIET)
else()
find_package(Python3 REQUIRED QUIET)
endif()
endmacro()
macro(configure_qt)
find_package(
Qt6
COMPONENTS Core Widgets Network
REQUIRED)
message(STATUS "Qt version: ${Qt6_VERSION}")
set(GUI_RES_DIR ${DESKFLOW_RES_DIR}/gui)
set(GUI_QRC_FILE ${GUI_RES_DIR}/app.qrc)
endmacro()
macro(configure_openssl)
# Apple has to use static libraries because "Use of the Apple-provided OpenSSL
# libraries by apps is strongly discouraged."
# https://developer.apple.com/library/archive/documentation/Security/Conceptual/cryptoservices/SecureNetworkCommunicationAPIs/SecureNetworkCommunicationAPIs.html
# TODO: How about bundling the OpenSSL .dylib files with the app so they can be updated?
if(APPLE)
set(OPENSSL_USE_STATIC_LIBS TRUE)
endif()
find_package(OpenSSL REQUIRED)
include_directories(${OPENSSL_INCLUDE_DIR})
endmacro()
macro(configure_gtest)
file(GLOB gtest_base_dir ${PROJECT_SOURCE_DIR}/subprojects/googletest-*)
if(gtest_base_dir)
set(DEFAULT_SYSTEM_GTEST OFF)
else()
set(DEFAULT_SYSTEM_GTEST ON)
endif()
# Arch Linux package maintainers:
# We do care about not bundling libs and didn't mean to cause upset. We made some mistakes
# and we're trying to put that right.
# The comment "They BUNDLE a fucking zip for cryptopp" in deskflow.git/PKGBUILD is only
# relevant to a very version of old the code, so the comment should probably be removed.
# If there are any problems like this in future, please do feel free send us a patch! :)
option(SYSTEM_GTEST "Use system GoogleTest" ${DEFAULT_SYSTEM_GTEST})
if(SYSTEM_GTEST)
message(VERBOSE "Using system GoogleTest")
find_package(GTest)
if(GTEST_FOUND)
# Ordinarily, we'd use GTEST_LIBRARIES, but it seems that these do not always export
# the required libraries (e.g. gmock) on some OS (e.g macOS with brew).
set(GTEST_LIB GTest::gtest)
set(GMOCK_LIB GTest::gmock)
else()
message(
FATAL_ERROR
"Google Test not found, re-configure with -DBUILD_TESTS=OFF or -DSYSTEM_GTEST=OFF"
)
endif()
else()
if(NOT EXISTS ${gtest_base_dir})
message(
FATAL_ERROR
"Google Test subproject not found, reconfigure with -DBUILD_TESTS=OFF"
)
endif()
message(VERBOSE "Using local GoogleTest")
set(gtest_dir ${gtest_base_dir}/googletest)
set(gmock_dir ${gtest_base_dir}/googlemock)
include_directories(${gtest_dir} ${gmock_dir} ${gtest_dir}/include
${gmock_dir}/include)
add_library(gtest STATIC ${gtest_dir}/src/gtest-all.cc)
add_library(gmock STATIC ${gmock_dir}/src/gmock-all.cc)
if(UNIX)
# Ignore noisy GoogleTest warnings
set_target_properties(gtest PROPERTIES COMPILE_FLAGS "-w")
set_target_properties(gmock PROPERTIES COMPILE_FLAGS "-w")
endif()
set(GTEST_LIB gtest)
set(GMOCK_LIB gmock)
endif()
endmacro()
macro(configure_coverage)
if(ENABLE_COVERAGE)
message(STATUS "Enabling code coverage")
include(cmake/CodeCoverage.cmake)
append_coverage_compiler_flags()
set(test_exclude subprojects/* build/* src/test/*)
set(test_src ${PROJECT_SOURCE_DIR}/src)
# Apparently solves the bug in gcov where it returns negative counts and confuses gcovr.
# > Got negative hit value in gcov line 'branch 2 taken -1' caused by a bug in gcov tool
# Bug report: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=68080
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fprofile-update=atomic")
setup_target_for_coverage_gcovr_xml(
NAME
coverage-${INTEG_TESTS_BIN}
EXECUTABLE
${INTEG_TESTS_BIN}
BASE_DIRECTORY
${test_src}
EXCLUDE
${test_exclude})
setup_target_for_coverage_gcovr_xml(
NAME
coverage-${UNIT_TESTS_BIN}
EXECUTABLE
${UNIT_TESTS_BIN}
BASE_DIRECTORY
${test_src}
EXCLUDE
${test_exclude})
else()
message(STATUS "Code coverage is disabled")
endif()
endmacro()
macro(configure_wintoast)
# WinToast is a pretty niche library, and there doesn't seem to be an installable package,
# so we rely on building from source.
file(GLOB WINTOAST_DIR ${PROJECT_SOURCE_DIR}/subprojects/WinToast-*)
if(WINTOAST_DIR)
set(HAVE_WINTOAST true)
add_definitions(-DHAVE_WINTOAST=1)
include_directories(${WINTOAST_DIR}/include)
else()
message(WARNING "Subproject 'WinToast' not found")
endif()
endmacro()
macro(configure_tomlplusplus)
file(GLOB tomlplusplus_dir ${PROJECT_SOURCE_DIR}/subprojects/tomlplusplus-*)
if(tomlplusplus_dir)
set(DEFAULT_SYSTEM_TOMLPLUSPLUS OFF)
else()
set(DEFAULT_SYSTEM_TOMLPLUSPLUS ON)
endif()
option(SYSTEM_TOMLPLUSPLUS "Use system tomlplusplus"
${DEFAULT_SYSTEM_TOMLPLUSPLUS})
if(SYSTEM_TOMLPLUSPLUS)
message(VERBOSE "Using system tomlplusplus")
find_package(tomlplusplus)
if(tomlplusplus_FOUND)
message(STATUS "tomlplusplus version: ${tomlplusplus_VERSION}")
else()
message(WARNING "System tomlplusplus not found")
endif()
else()
if(EXISTS ${tomlplusplus_dir})
message(VERBOSE "Using local tomlplusplus")
set(HAVE_TOMLPLUSPLUS true)
add_definitions(-DHAVE_TOMLPLUSPLUS=1)
include_directories(${tomlplusplus_dir}/include)
else()
message(WARNING "Local tomlplusplus subproject not found")
endif()
endif()
endmacro()
macro(configure_cli11)
file(GLOB cli11_dir ${PROJECT_SOURCE_DIR}/subprojects/CLI11-*)
if(cli11_dir)
set(DEFAULT_SYSTEM_CLI11 OFF)
else()
set(DEFAULT_SYSTEM_CLI11 ON)
endif()
option(SYSTEM_CLI11 "Use system CLI11" ${DEFAULT_SYSTEM_CLI11})
if(SYSTEM_CLI11)
message(VERBOSE "Using system CLI11")
find_package(CLI11)
if(CLI11_FOUND)
message(STATUS "CLI11 version: ${CLI11_VERSION}")
else()
message(WARNING "System CLI11 not found")
endif()
else()
if(EXISTS ${cli11_dir})
message(VERBOSE "Using local CLI11")
set(HAVE_CLI11 true)
add_definitions(-DHAVE_CLI11=1)
include_directories(${cli11_dir}/include)
else()
message(WARNING "Local CLI11 subproject not found at: ${cli11_dir}")
endif()
endif()
endmacro()

View File

@ -1,186 +0,0 @@
# Deskflow -- mouse and keyboard sharing utility
# Copyright (C) 2012-2024 Symless Ltd.
# Copyright (C) 2009-2012 Nick Bolton
#
# This package is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# found in the file LICENSE that should have accompanied this file.
#
# This package is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
# If enabled, configure packaging based on OS.
#
macro(configure_packaging)
set(DESKFLOW_PROJECT_RES_DIR ${PROJECT_SOURCE_DIR}/res)
if(${BUILD_INSTALLER})
set(CPACK_PACKAGE_NAME ${DESKFLOW_APP_ID})
set(CPACK_PACKAGE_CONTACT ${DESKFLOW_MAINTAINER})
set(CPACK_PACKAGE_DESCRIPTION "Mouse and keyboard sharing utility")
set(CPACK_PACKAGE_VENDOR ${DESKFLOW_AUTHOR_NAME})
set(CPACK_RESOURCE_FILE_LICENSE ${PROJECT_SOURCE_DIR}/LICENSE)
if(${CMAKE_SYSTEM_NAME} MATCHES "Windows")
configure_windows_packaging()
elseif(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
configure_mac_packaging()
elseif(${CMAKE_SYSTEM_NAME} MATCHES "Linux")
configure_linux_packaging()
elseif(${CMAKE_SYSTEM_NAME} MATCHES "|.*BSD")
message(STATUS "BSD packaging not yet supported")
endif()
include(CPack)
else()
message(STATUS "Not configuring installer")
endif()
endmacro()
#
# Windows installer
#
macro(configure_windows_packaging)
message(VERBOSE "Configuring Windows installer")
set(CPACK_PACKAGE_VERSION ${DESKFLOW_VERSION_MS})
set(QT_PATH $ENV{CMAKE_PREFIX_PATH})
set(DESKFLOW_MSI_64_GUID
"027D1C8A-E7A5-4754-BB93-B2D45BFDBDC8"
CACHE STRING "GUID for 64-bit MSI installer")
set(DESKFLOW_MSI_32_GUID
"8F57C657-BC87-45E6-840E-41242A93511C"
CACHE STRING "GUID for 32-bit MSI installer")
configure_files(${PROJECT_SOURCE_DIR}/res/dist/wix
${PROJECT_BINARY_DIR}/installer)
endmacro()
#
# macOS app bundle
#
macro(configure_mac_packaging)
message(VERBOSE "Configuring macOS app bundle")
set(CPACK_PACKAGE_VERSION ${DESKFLOW_VERSION})
set(CMAKE_INSTALL_RPATH
"@loader_path/../Libraries;@loader_path/../Frameworks")
set(DESKFLOW_BUNDLE_SOURCE_DIR
${PROJECT_SOURCE_DIR}/res/dist/mac/bundle
CACHE PATH "Path to the macOS app bundle")
set(DESKFLOW_BUNDLE_DIR ${PROJECT_BINARY_DIR}/bundle/${DESKFLOW_APP_NAME}.app)
set(DESKFLOW_BUNDLE_BINARY_DIR ${DESKFLOW_BUNDLE_DIR}/Contents/MacOS)
configure_files(${DESKFLOW_BUNDLE_SOURCE_DIR} ${DESKFLOW_BUNDLE_DIR})
file(RENAME ${DESKFLOW_BUNDLE_DIR}/Contents/Resources/App.icns
${DESKFLOW_BUNDLE_DIR}/Contents/Resources/${DESKFLOW_APP_NAME}.icns)
endmacro()
#
# Linux packages
#
macro(configure_linux_packaging)
message(VERBOSE "Configuring Linux packaging")
set(CPACK_PACKAGE_VERSION ${DESKFLOW_VERSION_LINUX})
set(CPACK_GENERATOR "DEB;RPM;TGZ")
set(CPACK_DEBIAN_PACKAGE_MAINTAINER ${DESKFLOW_MAINTAINER})
set(CPACK_DEBIAN_PACKAGE_SECTION "utils")
set(CPACK_DEBIAN_PACKAGE_SHLIBDEPS ON)
set(CPACK_RPM_PACKAGE_LICENSE "GPLv2")
set(CPACK_RPM_PACKAGE_GROUP "Applications/System")
# HACK: The GUI depends on the Qt6 QPA plugins package, but that's not picked
# up by shlibdeps on Ubuntu 22 (though not a problem on Ubuntu 24 and Debian
# 12), so we must add it manually.
set(CPACK_DEBIAN_PACKAGE_DEPENDS "qt6-qpa-plugins")
# The default for CMake seems to be /usr/local, which seems uncommon. While
# the default /usr/local prefix causes the app to appear on Debian and Fedora,
# it doesn't seem to appear on Arch Linux. Setting the prefix to /usr seems to
# work on a wider variety of distros, and that also seems to be where most
# apps install to.
set(CMAKE_INSTALL_PREFIX /usr)
set(source_desktop_file ${DESKFLOW_PROJECT_RES_DIR}/dist/linux/app.desktop.in)
set(configured_desktop_file ${PROJECT_BINARY_DIR}/app.desktop)
set(install_desktop_file ${DESKFLOW_APP_ID}.desktop)
configure_file(${source_desktop_file} ${configured_desktop_file} @ONLY)
install(
FILES ${configured_desktop_file}
DESTINATION share/applications
RENAME ${install_desktop_file})
install(
FILES ${DESKFLOW_RES_DIR}/app.png
DESTINATION share/pixmaps
RENAME ${DESKFLOW_APP_ID}.png)
# Prepare PKGBUILD for Arch Linux
configure_file(${DESKFLOW_PROJECT_RES_DIR}/dist/arch/PKGBUILD.in
${CMAKE_BINARY_DIR}/PKGBUILD @ONLY)
endmacro()
#
# Same as the `configure_file` command but for directories recursively.
#
macro(configure_files srcDir destDir)
message(VERBOSE "Configuring directory ${destDir}")
make_directory(${destDir})
file(
GLOB_RECURSE sourceFiles
RELATIVE ${srcDir}
${srcDir}/*)
file(
GLOB_RECURSE templateFiles
LIST_DIRECTORIES false
RELATIVE ${srcDir}
${srcDir}/*.in)
list(REMOVE_ITEM sourceFiles ${templateFiles})
foreach(sourceFile ${sourceFiles})
set(sourceFilePath ${srcDir}/${sourceFile})
if(IS_DIRECTORY ${sourceFilePath})
message(VERBOSE "Copying directory ${sourceFile}")
make_directory(${destDir}/${sourceFile})
else()
message(VERBOSE "Copying file ${sourceFile}")
configure_file(${sourceFilePath} ${destDir}/${sourceFile} COPYONLY)
endif()
endforeach(sourceFile)
foreach(templateFile ${templateFiles})
set(sourceTemplateFilePath ${srcDir}/${templateFile})
string(REGEX REPLACE "\.in$" "" templateFile ${templateFile})
message(VERBOSE "Configuring file ${templateFile}")
configure_file(${sourceTemplateFilePath} ${destDir}/${templateFile} @ONLY)
endforeach(templateFile)
endmacro(configure_files)

View File

@ -1,94 +0,0 @@
# Deskflow -- mouse and keyboard sharing utility
# Copyright (C) 2012-2024 Symless Ltd.
# Copyright (C) 2009-2012 Nick Bolton
#
# This package is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# found in the file LICENSE that should have accompanied this file.
#
# This package is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
# Either get the version number from the environment or from the VERSION file.
# On Windows, we also set a special 4-digit MSI version number.
macro(set_version)
set(DESKFLOW_VERSION $ENV{DESKFLOW_VERSION})
string(STRIP "${DESKFLOW_VERSION}" DESKFLOW_VERSION)
if(NOT DESKFLOW_VERSION)
file(READ "${PROJECT_SOURCE_DIR}/VERSION" DESKFLOW_VERSION)
string(STRIP "${DESKFLOW_VERSION}" DESKFLOW_VERSION)
endif()
message(STATUS "Version number (semver): " ${DESKFLOW_VERSION})
add_definitions(-DDESKFLOW_VERSION="${DESKFLOW_VERSION}")
# Useful for copyright (e.g. in macOS bundle .plist.in and Windows version .rc
# file)
string(TIMESTAMP DESKFLOW_BUILD_YEAR "%Y")
if(${CMAKE_SYSTEM_NAME} MATCHES "Windows")
set_windows_version()
elseif(${CMAKE_SYSTEM_NAME} MATCHES "Linux")
set_linux_version()
endif()
endmacro()
macro(set_four_part_version)
string(REGEX MATCH "^([0-9]+)\\.([0-9]+)\\.([0-9]+)" _ "${DESKFLOW_VERSION}")
set(VERSION_MAJOR "${CMAKE_MATCH_1}")
set(VERSION_MINOR "${CMAKE_MATCH_2}")
set(VERSION_PATCH "${CMAKE_MATCH_3}")
# Find the revision number, which is the number after the 'r'.
string(REGEX MATCH "r([0-9]+)$" _ "${DESKFLOW_VERSION}")
set(VERSION_REVISION "${CMAKE_MATCH_1}")
if(NOT VERSION_REVISION)
set(VERSION_REVISION "0")
endif()
set(DESKFLOW_VERSION_FOUR_PART
"${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}.${VERSION_REVISION}")
endmacro()
# MSI requires a 4-digit number and doesn't accept semver.
macro(set_windows_version)
set_four_part_version()
# Dot-separated version number for MSI and Windows version .rc file.
set(DESKFLOW_VERSION_MS ${DESKFLOW_VERSION_FOUR_PART})
message(VERBOSE "Version number for (Microsoft 4-part): "
${DESKFLOW_VERSION_MS})
# CSV version number for Windows version .rc file.
set(DESKFLOW_VERSION_MS_CSV
"${VERSION_MAJOR},${VERSION_MINOR},${VERSION_PATCH},${VERSION_REVISION}")
message(VERBOSE "Version number for (Microsoft CSV): "
${DESKFLOW_VERSION_MS_CSV})
endmacro()
macro(set_linux_version)
# Replace the first occurrence of '-' with '~' for Linux versioning; the '-'
# char is reserved for use at at the end of the version string to indicate a
# package revision. Debian has always used this convention, but support for
# this was also introduced in RPM 4.10.0.
string(REGEX REPLACE "-" "~" DESKFLOW_VERSION_LINUX "${DESKFLOW_VERSION}")
message(STATUS "Version number (DEB/RPM): ${DESKFLOW_VERSION_LINUX}")
# Arch does not support SemVer or DEB/RPM version format, so use the four-part
# version format which funnily enough is what Microsoft requires for MSI.
set_four_part_version()
message(STATUS "Version number (4-part): ${DESKFLOW_VERSION_FOUR_PART}")
endmacro()

View File

@ -1,205 +0,0 @@
config:
windows:
dependencies:
# We only run `choco` when not in CI env because it's pretty unreliable and slow.
# The Chocolatey mirror cannot be 100% reliable (according to docs) so it will often fail
# with an error `503 (Service Unavailable: Back-end server is at capacity)` which causes
# the nightly CI to fail intermittently.
command-elevated: if not defined CI (choco install Chocolatey.config -y)
# We only run `winget` when not in CI env; it's not available on the GitHub Windows runner.
# It's simpler to solve dependencies like Ninja with a GitHub workflow action, and cmake is
# already installed on the Windows runner.
command: if not defined CI (winget install ninja-build.ninja cmake)
qt:
version: 6.7.2
mirror: https://qt.mirror.constant.com/
base-dir: ./deps/qt
mac:
dependencies:
command: brew bundle --file=Brewfile
qt:
version: 6.7.2
mirror: https://qt.mirror.constant.com/
base-dir: ./deps/qt
linux:
debian: &debian
dependencies:
command-pre: sudo apt-get update
command: |
sudo apt-get install -y \
cmake \
make \
ninja-build \
g++ \
file \
xorg-dev \
libx11-dev \
libxtst-dev \
libssl-dev \
libglib2.0-dev \
libgdk-pixbuf-2.0-dev \
libnotify-dev \
libxkbfile-dev \
qt6-base-dev \
qt6-tools-dev \
libgtk-3-dev \
libgtest-dev \
libgmock-dev \
libpugixml-dev \
libei-dev \
libportal-dev \
libtomlplusplus-dev \
libcli11-dev
optional: [libei-dev, libportal-dev, libtomlplusplus-dev]
linuxmint:
<<: *debian
ubuntu:
<<: *debian
fedora: &fedora
dependencies: &fedora_deps
command-pre: sudo dnf check-update
command: |
sudo dnf install -y \
cmake \
make \
ninja-build \
gcc-c++ \
rpm-build \
openssl-devel \
glib2-devel \
gdk-pixbuf2-devel \
libXtst-devel \
libnotify-devel \
libxkbfile-devel \
qt6-qtbase-devel \
qt6-qttools-devel \
gtk3-devel \
gtest-devel \
gmock-devel \
pugixml-devel \
libei-devel \
libportal-devel \
tomlplusplus-devel \
cli11-devel
optional: [libei-devel, libportal-devel]
# RHEL is not actually supported yet, since it doesn't have Qt6 libs.
# We simply use it as a base for Alma Linux and Rocky Linux.
rhel: &rhel
<<: *fedora
dependencies: &rhel_deps
<<: *fedora_deps
command-pre: |
sudo dnf check-update;
sudo dnf install -y epel-release;
dnf config-manager --set-enabled crb
rocky:
<<: *rhel
dependencies:
<<: *rhel_deps
almalinux:
<<: *rhel
dependencies:
<<: *rhel_deps
opensuse-tumbleweed: &opensuse-tumbleweed
dependencies:
command-pre: sudo zypper refresh
command: sudo zypper install -y --force-resolution \
cmake \
make \
ninja \
gcc-c++ \
rpm-build \
libopenssl-devel \
glib2-devel \
gdk-pixbuf-devel \
libXtst-devel \
libnotify-devel \
libxkbfile-devel \
qt6-base-devel \
qt6-tools-devel \
gtk3-devel \
googletest-devel \
googlemock-devel \
pugixml-devel \
libei-devel \
libportal-devel \
tomlplusplus-devel \
cli11-devel
arch: &arch
dependencies:
command: sudo pacman -Syu --noconfirm \
base-devel \
cmake \
ninja \
gcc \
openssl \
glib2 \
gdk-pixbuf2 \
libxtst \
libnotify \
libxkbfile \
gtest \
pugixml \
libei \
libportal \
qt6-base \
qt6-tools \
gtk3 \
tomlplusplus \
cli11
manjaro:
<<: *arch
subprojects:
libei:
dependencies:
debian: &debian_libei |
sudo apt-get install -y \
python3-attr \
python3-jinja2 \
libsystemd-dev &&
pip install attrs jinja2
ubuntu: *debian_libei
linuxmint: *debian_libei
fedora: &fedora_libei |
sudo dnf install -y \
python3-attrs \
python3-jinja2 \
systemd-devel &&
pip install attrs jinja2
rhel: *fedora_libei
rocky: *fedora_libei
almalinux: *fedora_libei
libportal:
dependencies:
debian: &debian_libportal |
sudo apt-get install -y \
python3-dbusmock \
python3-pytest \
valac \
protobuf-c-compiler \
protobuf-compiler \
libglib2.0 \
libgtk-3-dev \
libprotobuf-c-dev \
libsystemd-dev \
libgirepository1.0-dev
ubuntu: *debian_libportal
linuxmint: *debian_libportal

View File

@ -7,13 +7,15 @@
"aqtinstall",
"Axelson",
"Breen",
"cmakelang",
"codesign",
"codesigning",
"Compat",
"contribs",
"daemonized",
"Daun",
"Deskflow",
"Devs",
"distro",
"distros",
"dmgbuild",
"dotenv",
@ -23,6 +25,8 @@
"gdrive",
"Hadzhylov",
"Hetu",
"HINSTANCE",
"HKLM",
"hotspots",
"Hutterer",
"ifdef",
@ -31,12 +35,14 @@
"Kanapickas",
"keychain",
"Keychains",
"Kitware",
"Kutytska",
"Lanz",
"libei",
"Libera",
"libportal",
"LLDB",
"logonui",
"Lysytsia",
"macdeployqt",
"msvc",
@ -46,34 +52,46 @@
"Oleksandr",
"Olena",
"outputdir",
"outputter",
"outputters",
"pacman",
"Petroules",
"Pixmap",
"Pointee",
"Poschta",
"Povilas",
"Priddy",
"psutil",
"pyproject",
"qobject",
"qputenv",
"readf",
"Redist",
"Regen",
"Repology",
"Rizzitello",
"runas",
"Sbârnea",
"Schoeneman",
"Serhii",
"shemp",
"SNAPPROCESS",
"Sorin",
"subproject",
"subprojects",
"Toolhelp",
"trackpad",
"Trixie",
"unittests",
"Valgrind",
"vbuffer",
"vcpkg",
"venv",
"vmactions",
"Volker",
"whot",
"winget",
"writef",
"XWINDOWS"
],
"ignoreWords": [],

41
deploy/CMakeLists.txt Normal file
View File

@ -0,0 +1,41 @@
# SPDX-FileCopyrightText: 2024 Chris Rizzitello <sithlord48@gmail.com>
# SPDX-License-Identifier: MIT
# Copy License with txt ext for picky package creation tools
file(COPY_FILE
${CMAKE_SOURCE_DIR}/LICENSE
${CMAKE_CURRENT_BINARY_DIR}/LICENSE.txt
ONLY_IF_DIFFERENT
)
# Generic Package Items
set(CPACK_STRIP_FILES TRUE)
set(CPACK_PACKAGE_NAME ${CMAKE_PROJECT_NAME})
set(CPACK_PACKAGE_CONTACT ${CMAKE_PROJECT_CONTACT})
set(CPACK_PACKAGE_DESCRIPTION ${CMAKE_PROJECT_DESCRIPTION})
set(CPACK_PACKAGE_VENDOR ${CMAKE_PROJECT_VENDOR})
set(CPACK_RESOURCE_FILE_LICENSE ${CMAKE_CURRENT_BINARY_DIR}/LICENSE.txt)
set(CPACK_PACKAGE_VERSION ${CMAKE_PROJECT_VERSION})
#Prevent this override from being written in the package
if(NOT PACKAGE_VERSION_LABEL)
set (PACKAGE_VERSION_LABEL "${CPACK_PACKAGE_VERSION}")
endif()
if(WIN32)
include(windows/deploy.cmake)
elseif(UNIX AND NOT APPLE)
include(linux/deploy.cmake)
elseif(APPLE)
include(mac/deploy.cmake)
else()
message(STATUS "UNKNOWN System: ${CMAKE_SYSTEM_NAME}")
endif()
# Always use "deskflow" for start of name
set(CPACK_PACKAGE_FILE_NAME "${CMAKE_PROJECT_NAME}-${PACKAGE_VERSION_LABEL}-${OS_STRING}")
message(STATUS "Package Basename: ${CPACK_PACKAGE_FILE_NAME}")
include(CPack)

View File

@ -0,0 +1,47 @@
# SPDX-FileCopyrightText: 2024 Deskflow Developers
# SPDX-License-Identifier: MIT
# Maintainer: Deskflow Developers
pkgname=deskflow
pkgver=@CMAKE_PROJECT_VERSION@
pkgrel=1
pkgdesc="Mouse and keyboard sharing utility"
url='https://deskflow.org'
arch=('i686' 'x86_64' 'armv7h' 'aarch64')
license=(LicenseRef-GPL-2.0-only-WITH-OpenSSL-Exception)
conflicts=('synergy-git' 'synergy-1.6' 'synergy1-bin' 'synergy2-bin' 'synergy3-bin' 'synergy3-beta-bin' 'synergy3-stable-bin' 'barrier' 'barrier-git' 'barrier-headless' 'barrier-headless-git' 'input-leap' 'input-leap-git' 'input-leap-headless-git' 'input-leap-headless' 'waynergy' 'waynergy-git' 'qsynergy' 'slim-synergy' 'quicksynergy' 'deskflow')
provides=("deskflow-git${pkgver}")
depends=(
gcc-libs
glib2
glibc
hicolor-icon-theme
libei
libglvnd
libice
libportal
libsm
libx11
libxext
libxi
libxinerama
libxkbcommon
libxkbcommon-x11
libxkbfile
libxrandr
libxtst
openssl
qt6-base
qt6-svg
tomlplusplus
)
options=('!debug')
package() {
# By default, `makepkg` will run from the `src` directory, which would
# only install the binaries, and not the .desktop file, etc. To install
# everything, we need to set DESTDIR.
cd $startdir
DESTDIR=$pkgdir cmake --install .
}

108
deploy/linux/deploy.cmake Normal file
View File

@ -0,0 +1,108 @@
# SPDX-FileCopyrightText: 2024 Chris Rizzitello <sithlord48@gmail.com>
# SPDX-License-Identifier: MIT
# HACK This is set when the files is included so its the real path
# calling CMAKE_CURRENT_LIST_DIR after include would return the wrong scope var
set(MY_DIR ${CMAKE_CURRENT_LIST_DIR})
# Install our desktop file
install(
FILES ${MY_DIR}/org.deskflow.deskflow.desktop
DESTINATION share/applications
)
# Install our icon
install(
FILES ${MY_DIR}/deskflow.png
DESTINATION share/icons/hicolor/512x512/apps/
RENAME org.deskflow.deskflow.png
)
# Install our metainfo
install(
FILES ${MY_DIR}/org.deskflow.deskflow.metainfo.xml
DESTINATION share/metainfo/
)
# Prepare PKGBUILD for Arch Linux
configure_file(
${MY_DIR}/arch/PKGBUILD.in
${CMAKE_BINARY_DIR}/PKGBUILD
@ONLY
)
set(CPACK_DEBIAN_PACKAGE_SECTION "utils")
set(CPACK_DEBIAN_PACKAGE_SHLIBDEPS ON)
set(CPACK_RPM_PACKAGE_LICENSE "GPLv2")
set(CPACK_RPM_PACKAGE_GROUP "Applications/System")
if(${CMAKE_SYSTEM_NAME} MATCHES "Linux")
# Get Distro name information
if(EXISTS "/etc/os-release")
FILE(STRINGS "/etc/os-release" RELEASE_FILE_CONTENTS)
else()
message(FATAL_ERROR "Unable to read file /etc/os-release")
endif()
foreach(LINE IN LISTS RELEASE_FILE_CONTENTS)
if( "${LINE}" MATCHES "^ID=")
string(REGEX REPLACE "^ID=" "" DISTRO_NAME ${LINE})
string(REGEX REPLACE "\"" "" DISTRO_NAME ${DISTRO_NAME})
message(DEBUG "Distro Name :${DISTRO_NAME}")
elseif( "${LINE}" MATCHES "^ID_LIKE=")
string(REGEX REPLACE "^ID_LIKE=" "" DISTRO_LIKE "${LINE}")
string(REGEX REPLACE "\"" "" DISTRO_LIKE ${DISTRO_LIKE})
message(DEBUG "Distro Like :${DISTRO_LIKE}")
elseif( "${LINE}" MATCHES "^VERSION_CODENAME=")
string(REGEX REPLACE "^VERSION_CODENAME=" "" DISTRO_CODENAME "${LINE}")
string(REGEX REPLACE "\"" "" DISTRO_CODENAME "${DISTRO_CODENAME}")
message(DEBUG "Distro Codename:${DISTRO_CODENAME}")
elseif( "${LINE}" MATCHES "^VERSION_ID=")
string(REGEX REPLACE "^VERSION_ID=" "" DISTRO_VERSION_ID "${LINE}")
string(REGEX REPLACE "\"" "" DISTRO_VERSION_ID "${DISTRO_VERSION_ID}")
message(DEBUG "Distro VersionID:${DISTRO_VERSION_ID}")
endif()
endforeach()
# Check if Debian-link
string(REGEX MATCH debian|buntu DEBTYPE "${DISTRO_LIKE}")
string(REGEX MATCH debian|deepin|uos DEBNAME "${DISTRO_NAME}")
if((NOT ("${DEBTYPE}" STREQUAL "")) OR (NOT ("${DEBNAME}" STREQUAL "")))
set(CPACK_GENERATOR "DEB")
endif()
# Check if Rpm-like
string(REGEX MATCH suse|fedora|rhel RPMTYPE "${DISTRO_LIKE}")
string(REGEX MATCH fedora|suse|rhel RPMNAME "${DISTRO_NAME}")
if((NOT ("${RPMTYPE}" STREQUAL "")) OR (NOT ("${RPMNAME}" STREQUAL "")))
set(CPACK_GENERATOR "RPM")
endif()
# Disto specific name adjustments
if("${DISTRO_NAME}" STREQUAL "opensuse-tumbleweed")
set(DISTRO_NAME "opensuse")
set(DISTRO_CODENAME "tumbleweed")
elseif("${DISTRO_NAME}" STREQUAL "arch")
# Arch linux is rolling the version id reported is the date of last iso.
set(DISTRO_VERSION_ID "")
endif()
# Determain the code name to be used if any
if(NOT "${DISTRO_VERSION_ID}" STREQUAL "")
set(CN_STRING "${DISTRO_VERSION_ID}-")
endif()
if(NOT "${DISTRO_CODENAME}" STREQUAL "")
set(CN_STRING "${DISTRO_CODENAME}-")
endif()
if("${DISTRO_NAME}" STREQUAL "")
set(DISTRO_NAME "linux")
endif()
set(OS_STRING "${DISTRO_NAME}-${CN_STRING}${BUILD_ARCHITECTURE}")
elseif(${CMAKE_SYSTEM_NAME} MATCHES "|.*BSD")
message(STATUS "BSD packaging not yet supported")
set(OS_STRING ${CMAKE_SYSTEM_NAME}-${BUILD_ARCHITECTURE})
endif()

BIN
deploy/linux/deskflow.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

View File

@ -0,0 +1,6 @@
{
"org.deskflow.deskflow": [
"appstream-external-screenshot-url",
"appstream-screenshots-not-mirrored-in-ostree"
]
}

View File

@ -0,0 +1,41 @@
From 796053d2eebe4532aad6bd3fd80cdf3b197806ec Mon Sep 17 00:00:00 2001
From: Jan Grulich <jgrulich@redhat.com>
Date: Thu, 27 Mar 2025 09:38:10 +0100
Subject: [PATCH] qt6: fix build against Qt 6.9+
QGenericUnixServices was renamed to QDesktopUnixServices in Qt 6.9.
Upstream change: https://codereview.qt-project.org/c/qt/qtbase/+/609639
---
libportal/portal-qt6.cpp | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/libportal/portal-qt6.cpp b/libportal/portal-qt6.cpp
index d38a4e30..34f0d72a 100644
--- a/libportal/portal-qt6.cpp
+++ b/libportal/portal-qt6.cpp
@@ -31,8 +31,12 @@
#if QT_VERSION >= QT_VERSION_CHECK(6, 5, 0)
#include <qpa/qplatformintegration.h>
#include <private/qguiapplication_p.h>
+#if QT_VERSION >= QT_VERSION_CHECK(6, 9, 0)
+#include <private/qdesktopunixservices_p.h>
+#else
#include <private/qgenericunixservices_p.h>
#endif
+#endif
static gboolean
_xdp_parent_export_qt (XdpParent *parent,
@@ -45,7 +49,11 @@ _xdp_parent_export_qt (XdpParent *parent,
}
#if QT_VERSION >= QT_VERSION_CHECK(6, 5, 0)
+#if QT_VERSION >= QT_VERSION_CHECK(6, 9, 0)
+ if (const auto services = dynamic_cast<QDesktopUnixServices*>(QGuiApplicationPrivate::platformIntegration()->services()))
+#else
if (const auto services = dynamic_cast<QGenericUnixServices*>(QGuiApplicationPrivate::platformIntegration()->services()))
+#endif
{
g_autofree char *handle = g_strdup(services->portalWindowIdentifier(w).toUtf8().constData());

View File

@ -0,0 +1,98 @@
app-id: org.deskflow.deskflow
runtime: org.kde.Platform
runtime-version: "6.9"
sdk: org.kde.Sdk
command: deskflow
finish-args:
- --share=ipc
- --socket=wayland
- --socket=fallback-x11
- --share=network
- --device=dri
- --talk-name=org.kde.StatusNotifierWatcher
cleanup:
- /include
- "*.a"
- /bin/ei-debug-events
- /lib/cmake
- /lib/pkgconfig
- /share/pkgconfig
- /share/tomlplusplus
- /share/cmake
- /share/doc
- /share/gir-1.0
- /lib/girepository-1.0
modules:
- name: python3-Jinja2
buildsystem: simple
build-commands:
- pip3 install --verbose --exists-action=i --no-index --find-links="file://${PWD}"
--prefix=${FLATPAK_DEST} --no-build-isolation Jinja2
sources:
- type: file
url: https://files.pythonhosted.org/packages/30/6d/6de6be2d02603ab56e72997708809e8a5b0fbfee080735109b40a3564843/Jinja2-3.1.3-py3-none-any.whl
sha256: 7d6d50dd97d52cbc355597bd845fabfbac3f551e1f99619e39a35ce8c370b5fa
- type: file
url: https://files.pythonhosted.org/packages/87/5b/aae44c6655f3801e81aa3eef09dbbf012431987ba564d7231722f68df02d/MarkupSafe-2.1.5.tar.gz
sha256: d283d37a890ba4c1ae73ffadf8046435c76e7bc2247bbb63c00bd1a709c6544b
cleanup:
- '*'
- name: libei
buildsystem: meson
config-opts:
- -Ddocumentation=[]
- -Dtests=disabled
- -Dliboeffis=disabled
sources:
- type: git
url: https://gitlab.freedesktop.org/libinput/libei
tag: 1.4.1
commit: 9e0413cbc7d3ae6656266890425f152589ddf74d
- name: libportal
buildsystem: meson
config-opts:
- -Ddocs=false
- -Dtests=false
- -Dportal-tests=false
- -Dvapi=false
- -Dbackend-qt6=auto
sources:
- type: git
url: https://github.com/flatpak/libportal.git
tag: 0.9.1
commit: 8f5dc8d192f6e31dafe69e35219e3b707bde71ce
- type: patch
path: libportal-qt69.patch
- name: cli11
buildsystem: cmake-ninja
config-opts:
- -DCLI11_BUILD_TESTS=OFF
sources:
- type: git
url: https://github.com/CLIUtils/CLI11
tag: v2.5.0
commit: 4160d259d961cd393fd8d67590a8c7d210207348
- name: tomlplusplus
buildsystem: cmake-ninja
sources:
- type: git
url: https://github.com/marzer/tomlplusplus
tag: v3.4.0
commit: 30172438cee64926dc41fdd9c11fb3ba5b2ba9de
- name: gtest
buildsystem: cmake-ninja
sources:
- type: git
url: https://github.com/google/googletest.git
tag: v1.15.2
commit: b514bdc898e2951020cbdca1304b75f5950d1f59
cleanup:
- '*'
- name: deskflow
buildsystem: cmake-ninja
config-opts:
- "-DCMAKE_BUILD_TYPE=Release"
sources:
- type: dir
path: ../../../

View File

@ -1,11 +1,13 @@
# SPDX-FileCopyrightText: 2024 Deskflow Developers
# SPDX-License-Identifier: MIT
[Desktop Entry]
Type=Application
Version=1.0
Name=@DESKFLOW_APP_NAME@
Name=Deskflow
Comment=Mouse and keyboard sharing utility
Path=/usr/bin
Exec=/usr/bin/@GUI_BINARY_NAME@
Icon=@DESKFLOW_APP_ID@
Exec=deskflow
Icon=org.deskflow.deskflow
Terminal=false
Categories=Utility;
Keywords=keyboard;mouse;sharing;network;share;

View File

@ -0,0 +1,394 @@
<?xml version="1.0" encoding="UTF-8"?>
<component type="desktop-application">
<id>org.deskflow.deskflow</id>
<metadata_license>CC0-1.0</metadata_license>
<project_license>GPL-2.0+</project_license>
<name>Deskflow</name>
<developer id="org.deskflow">
<name>Deskflow Developers</name>
</developer>
<summary>Software Keyboard and mouse sharing</summary>
<description>
<p>
Use the keyboard, mouse, or trackpad of one computer to control nearby computers, and work seamlessly between them.
</p>
</description>
<launchable type="desktop-id">org.deskflow.deskflow.desktop</launchable>
<url type="homepage">https://deskflow.org</url>
<url type="bugtracker">https://github.com/deskflow/deskflow/issues</url>
<screenshots>
<screenshot type="default">
<image>https://deskflow.org/screenshots/deskflow.png</image>
<caption>Deskflow's mainwindow on KDE</caption>
</screenshot>
<screenshot>
<image>https://deskflow.org/screenshots/deskflow-dark.png</image>
<caption>Deskflow's mainwindow on KDE (dark mode)</caption>
</screenshot>
</screenshots>
<provides> <id>org.deskflow.deskflow.desktop</id> </provides>
<categories>
<category>Utility</category>
</categories>
<keywords>
<keyword translate="no">Input</keyword>
<keyword translate="no">Sharing</keyword>
<keyword translate="no">KVM</keyword>
<keyword translate="no">Synergy</keyword>
</keywords>
<branding>
<color type="primary" scheme_preference="light">#dddddd</color>
<color type="primary" scheme_preference="dark">#555555</color>
</branding>
<content_rating type="oars-1.0" />
<releases>
<release version="1.22.0" date="2025-05-28" urgency="high">
<description>
<p>This stable release fixes a issues found in the previous version. For the full changelog see the release page.</p>
<ul>
<li>Remove: Broken drag and drop file transfer support</li>
<li>Remove: DESKFLOW_RESET_ALL and --no-reset. reset settings is now done by passing the --reset option instead</li>
<li>Continue migration to Qt by using more Qt classes in more places</li>
<li>Retire SHA1 generation and use SHA256 always to compare</li>
<li>Add missing accelerators for gui controls</li>
<li>unittests binary is now legacytests</li>
<li>integtests have been remove and replaced with Qt based tests run during build</li>
<li>Fix: Potential XDG-Portal release issue</li>
<li>Fix: Issue where the first start dialog could hang in the background</li>
<li>Fix: Edge cases that could cause incorrect settings causing client / server process to crash</li>
<li>Fix: Default server config file is Deskflow-server.conf</li>
<li>Backport: Event Types from downstream</li>
<li>Backport: Cleaner error handling from downstream</li>
<li>Improve Windows Daemon</li>
<li>Better detection of arm on windows, in build and installer</li>
<li>Chore: Clean up sonar scan code smells</li>
</ul>
</description>
<url>https://github.com/deskflow/deskflow/releases/tag/v1.22.0</url>
</release>/
<release version="1.21.2" date="2025-04-07" urgency="high">
<description>
<p>This stable release fixes a few critical bugs in 1.21.1. For the full changelog see the release page.</p>
<ul>
<li>Fix: Crash with Qt 6.9</li>
<li>Fix: Windows settings in wrong locations</li>
</ul>
</description>
<url>https://github.com/deskflow/deskflow/releases/tag/v1.21.2</url>
</release>
<release version="1.21.1" date="2025-03-31" urgency="high">
<description>
<p>This stable release fixes a few critical bugs in 1.21.0. For the full changelog see the release page.</p>
<ul>
<li>Fix: Flatpak can't save settings'</li>
<li>Fix: Crash on localfingerprint dialog</li>
<li>Fix: Check for updates settings reading from wrong value</li>
<li>Fix: Windows settings saving blocked for non admin users </li>
</ul>
</description>
<url>https://github.com/deskflow/deskflow/releases/tag/v1.21.1</url>
</release>
<release version="1.21.0" date="2025-03-27" urgency="high">
<description>
<p>This stable release removes some dependencies, additionally fixes several bugs. For the full changelog see the release page.</p>
<ul>
<li>Cleanup unused classes</li>
<li>New Settings class</li>
<li>Remove need for pugixml</li>
<li>Remove need for libNotify</li>
<li>Remove need for gio</li>
<li>Remove need for gitkpixbuf</li>
<li>Fix issues with windows installer when msvc is missing</li>
</ul>
</description>
<url>https://github.com/deskflow/deskflow/releases/tag/v1.21.0</url>
</release>
<release version="1.20.1" date="2025-03-07" urgency="low">
<description>
<p>This stable release introduces a Windows dependency requirement and fixes a macOS bug.</p>
<ul>
<li>Fix: macOS menu bar icon invisible when menu bar is light</li>
<li>Feature: Add Windows installer check for Visual C++ Redistributable</li>
<li>Feature: Prevent Windows binaries running if MSVC runtime too old</li>
</ul>
</description>
<url>https://github.com/deskflow/deskflow/releases/tag/v1.20.1</url>
</release>
<release version="1.20.0" date="2025-03-03" urgency="high">
<description>
<p>This stable release fixes a few security issues, additionally fixes several bugs and adds a few new features. For the full changelog see the release page.</p>
<ul>
<li>Feature: Peer Id Checking - Fixes CVE-2021-42072 and CVE-2021-42073</li>
<li>Feature: Use Sha256 fingerprints</li>
<li>Feature: Gui cleanup and improvements</li>
<li>Remove: Inverse connection option</li>
<li>Fix: Screen Corner option</li>
<li>Fix: Show new client dialog</li>
<li>Win32: Daemon Improvements</li>
<li>Win32: Fix clear settings</li>
</ul>
</description>
<url>https://github.com/deskflow/deskflow/releases/tag/v1.20.0</url>
</release>
<release version="1.19.0" date="2025-01-31" urgency="high">
<description>
<p>This stable release fixes several bugs and adds a few new features. For the full changelog see the release page.</p>
<ul>
<li>Feature: New Fallback icon theme</li>
<li>Feature: Allow only one gui instance</li>
<li>Fix: Modifier remapping on macOS</li>
<li>Fix: Show Screen icons again in the server settings</li>
<li>Fix: Show the TLS Label</li>
<li>Fix: Mainwindow restore </li>
<li>Fix: Hotkey with more then one action now work again</li>
<li>Better Detection of evdev on BSD</li>
<li>Better language detection on X11</li>
<li>Better deal with screen changes on wayland</li>
<li>Remove Legacy tray icons</li>
<li>Lots of Internal Cleanup</li>
</ul>
</description>
<url>https://github.com/deskflow/deskflow/releases/tag/v1.19.0</url>
</release>
<release version="1.18.0" date="2024-12-26" urgency="high">
<description>
<p>This stable release fixes a few security issues, additionally fixes several bugs and adds a few new features. For the full changelog see the release page.</p>
<ul>
<li>Fix CVE-2021-42075: Close connection on app-level handshake failure</li>
<li>Fix CVE-2021-42074: Handle SSL race conditions and segmentation fault</li>
<li>Fix CVE-2021-42076: Enforce maximum message length </li>
<li>Add a visiblity toggle for the log</li>
<li>Fix deskflow will now hide or show when the tray icon is clicked</li>
<li>Fix how Utf-16 surrogates are handled</li>
<li>Avoid encoding empty data to the clipboard on Windows</li>
<li>Create new Tray Icons for windows</li>
<li>Always show the tray menu entry for the restore action on macOS</li>
<li>Correctly restore window when hidden with command+H on macOS</li>
<li>Update the windows clipboard format listener to monitor the clipboard</li>
</ul>
</description>
<url>https://github.com/deskflow/deskflow/releases/tag/v1.18.0</url>
</release>
<release version="1.17.2" date="2024-11-20" urgency="medium">
<description>
<p>This stable Release contains alot of internal refactoring.</p>
<ul>
<li>docs: Update readme to use latest for the stable link and continuous</li>
<li>chore: rm unused res/doxygen.cfg.in</li>
<li>chore: rm unused res/License.tex</li>
<li>chore: rm unused res/License.rtf</li>
<li>refactor: mv res/gui/win/app.rc => src/gui/src/app.rc</li>
<li>refactor: mv res/app.ico src/gui/src/app.ico</li>
<li>refactor: mv src/lib/gui/TrayIcon => src/gui/src/TrayIcon</li>
<li>feat: use platform native styles when possible</li>
<li>refactor: use theme icon for document open fallback to the folder icon</li>
<li>refactor mv: res/gui => src/gui/res</li>
<li>chore: alphabetize app.qrc resource file</li>
<li>chore rm: unused app.svg</li>
<li>refactor: mv res/app.png and res/app.svg => deploy</li>
<li>refactor: mv res/dist/linux/app.desktop.in => deploy/org.deskflow.desktop</li>
<li>refactor: mv res/dist/arch => deploy/dist/arch</li>
<li>chore: rm unneeded res/dist/flatpak/flatpak-desktop.patch</li>
<li>refactor: mv res/dist/flatpak => deploy/res/flatpak</li>
<li>refactor: mv res/dist/mac => deploy/dist/mac</li>
<li>refactor: mv res/dist/wix => deploy/dist/wix</li>
<li>build: add metainfo</li>
<li>ci: rename ci.yml to => continuous-integration.yml</li>
<li>Rename CI badge to match new .yml filename</li>
<li>chore: update the deskflow shipped icon to have proper padding</li>
<li>chore: adjust branding light / dark colors to dddddd / 555555</li>
<li>fix: SettingsDialog ui generating nonsence alignment tags when edited</li>
<li>feat: SettingsDialog, Allow user to toggle the check for updates settings</li>
<li>fix: MainWindow not saving initial update flag</li>
<li>build: rm DESKFLOW_APP_ID define</li>
<li>build: rm DESKFLOW_DOMAIN define</li>
<li>build: rm DESKFLOW_APP_NAME define</li>
<li>build: rm DESKFLOW_AUTHOR_NAME define</li>
<li>build: rm DESKFLOW_MAINTAINER define</li>
<li>build: rm DESKFLOW_WEBSITE_URL define</li>
<li>build: rm DESKFLOW_VERSION_URL define</li>
<li>build: rm DESKFLOW_HELP_TEXT define</li>
<li>build: rm DESKFLOW_RES_DIR define</li>
<li>build: rm DESKFLOW_MAC_BUNDLE_CODE</li>
<li>build: rm GUI_BINARY_NAME define</li>
<li>build: rm SERVER_BINARY_NAME define</li>
<li>build:rm CLIENT_BINARY_NAME define</li>
<li>build: rm CORE_BINARY_NAME define</li>
<li>build: rm DAEMON_BINARY_NAME</li>
<li>build: remove DESKFLOW_SHOW_DEV_THANKS define</li>
<li>fix: single typo in README.md</li>
<li>feat: fix flatpak recipe</li>
<li>ci: build flatpaks</li>
</ul>
</description>
<url>https://github.com/deskflow/deskflow/releases/tag/v1.17.2</url>
</release>
<release version="1.17.1" date="2024-11-07" urgency="high">
<description>
<p>This stable release has a very long changelog some notable ones are.</p>
<ul>
<li>Remove word 'beta' from Wayland message</li>
<li>docs: Update `README.md` with Matrix link</li>
<li>Make `README.md` more relevant to current repo state</li>
<li>Use #pragma once for headers</li>
<li>Remove Python `.venv` dir caching to reduce complexity</li>
<li>Add discussion value to project values in README.md</li>
<li>Use modern Qt connections in GUI</li>
<li>chore: rm unused string_utils file</li>
<li>build: findSSL via cmake</li>
<li>fix: Set correct QGuiApplication::desktopFileName</li>
<li>feat: Use native style on KDE Plasma</li>
<li>build: Don't force CMAKE_INSTALL_PREFIX</li>
<li>CI: Requires Lint to pass before running other jobs. Allow CI to be skipped for non code changes</li>
<li>Move res/config.h.in -> src/lib/config.h.in</li>
<li>build: Drop warnings_as_errors</li>
<li>chore: cmake user files to gitignore</li>
<li>chore: add basic .gitattributes</li>
<li>Use high res icons and remove unused</li>
<li>Coverage for `AboutDialog.cpp`</li>
<li>CI cleanup and consolidation</li>
<li>Remove dead `test-dist-upload.yml` file</li>
<li>fix: align --display explanation in help message</li>
<li>Use version from Git tags instead of `VERSION` file</li>
<li>Add leading edge philosophy to README.md</li>
<li>Fixed minor typos in the bug report template</li>
<li>Change TLS dir to same as Qt config</li>
<li>Restore `pull_request` trigger for `codeql-analysis.yml`</li>
<li>Fixed error count logic for test summary</li>
<li>Solve QCheckBox 6.7+ warning and exclude GUI from coverage</li>
<li>build: set project description</li>
<li>fix: Check for errors before reading version string</li>
<li>ci: clearer and cleaner steps</li>
<li>Arch package fixup</li>
<li>Force LF in gitattributes</li>
<li>docs: Add other build type to bug report template</li>
<li>Fixed code style in `ci.yml` workflow</li>
<li>Remove `cmake-format` linter (more harm than good)</li>
<li>Ignore paths for CodeQL Analysis</li>
<li>Always run PR comments job</li>
<li>docs: Add .editorconfig file</li>
<li>Remove Wayland experimental pop</li>
<li>build: linux packages with proper names using cpack</li>
<li>ci: vcpkg cache working</li>
<li>fix: Use `OPENSSL_EXE_DIR` instead of `OPENSSL_ROOT_DIR` on Windows</li>
<li>build: Add `gtest-args` for VS Code users</li>
<li>chore: Replace assert with warning for screen boundary issue</li>
<li>chore: resolve cmake cap nits</li>
<li>fix: Let users select version number and build in About Dialog</li>
<li>Adjust Clang-format linter rules</li>
<li>chore: Update feature request template</li>
<li>build: update required ssl to 3.0+</li>
<li>ci: Use `cmake` instead of `make` directly for Arch package</li>
<li>build: Require cmake 3.24</li>
<li>ci: use vcpkg action on ci to cache</li>
<li>ci: Remove CMake presets</li>
<li>build: get CLI11 via file download if not on system</li>
<li>ci: remove unused cache step</li>
<li>build: arch package won't install /bin</li>
<li>build: use File to dl toml++ if not on system</li>
<li>ci: Catch std::exception on toml::parse_file</li>
<li>Optional FreeBSD integtests and reduce CMake arg dupe</li>
<li>fix: server config dialog show event</li>
<li>docs: Checkbox for continuous build on bug template</li>
<li>build: use vcpkg for all depends, vcpkg action on ci to cache</li>
<li>Remove `.ui` files from being the base class</li>
<li>Protocol interoperability for Input Leap (Barrier) and Synergy</li>
<li>build: arch package requires tomlplusplus and cli11</li>
<li>build: Use Fetch Content for Gtest</li>
<li>fix:#7760 use a proper fedora package name</li>
<li>Static cast screen column count for scan alert 559</li>
<li>build: remove stale meson parts for wintoast</li>
<li>ci: Normalize CI step names, descriptions, etc</li>
<li>ci: New macOS CI with Qt action</li>
<li>Drop `.ui` file for setup wizard</li>
<li>Clazy nits</li>
<li>ci: Bump containers for analyze workflows</li>
<li>ci: use fancy checkout action</li>
<li>Fix the windows installer</li>
<li>build: Require libei and libportal on linux</li>
<li>Unify Jobs into one matrix</li>
<li>docs: Update Readme</li>
<li>ci: remove unused libportal check from Librarires.cmake</li>
<li>docs: Remove confusing value line in readme</li>
<li>Simplify build by using Docker containers directly</li>
<li>docs: Remote build containers badge</li>
<li>Elaborate on settings dialog help (what's this)</li>
<li>Mosty glob free</li>
<li>build: update package names for linux to be more unified</li>
<li>chore: add link to wayland discussion</li>
<li>docs: readme add mac os xattr note</li>
<li>Update README.md to restore sponsor link</li>
<li>docs: Fixed sponsor link in README</li>
<li>User docs</li>
<li>chore: settingsDialog rm unused CoreTool include</li>
<li>Do not build deskflow legacy</li>
<li>build: add deskflow devs to binaries copyright</li>
<li>doc: correct target for documents</li>
<li>docs: Improve error messages around Doxygen</li>
<li>fix: crash on --help arg</li>
<li>docs: contributors on readme</li>
<li>Clean up scripts directory</li>
<li>No UI about dialog</li>
<li>chore: add homebrew tap info to readme</li>
<li>chore: Replace screen leave/enter asserts with warnings</li>
<li>CI: added updated winget package submission</li>
<li>ci: Use GITHUB_TOKEN in place of PAT</li>
<li>ci: use pre-release for continuous to stop it from grabbing latest tag</li>
<li>ci: git-version-action: Always report described version</li>
<li>ci: adjust pacakge script to use the names we would like when in cpack</li>
</ul>
</description>
<url>https://github.com/deskflow/deskflow/releases/tag/v1.17.1</url>
</release>
<release version="1.17.0" date="2024-10-02" urgency="low">
<description>
<p>This is the first Deskflow release.</p>
<ul>
<li>Use Deskflow Name</li>
<li>fix: windows build typos</li>
<li>Fix broken CI caused by renaming project to Deskflow</li>
<li>fix: protocol compatibility with Synergy</li>
<li>Remove Google Drive upload and always upload to GitHub</li>
<li>fix: stuck keys on leave</li>
<li>ci: always upgrade packages on arch</li>
<li>ci: option to skip changelog lint in PR</li>
<li>docs: fixed link to config.yaml in README.md</li>
<li>docs: add sponsor badge and blurb to readme</li>
<li>ci: lint and add comment to PR on fail</li>
<li>docs: add build type to bug report form</li>
<li>docs: add extra badges and fix sponsor link</li>
<li>build: default to system tomlplusplus and CLI11</li>
<li>ci: give write permission for PR comments</li>
<li>build: fixed option name for SYSTEM_TOMLPLUSPLUS</li>
<li>build: script to create Python virtual env</li>
<li>build: set BUILD_DATE instead of using __DATE__</li>
<li>ci: delete ChangeLog because it's redundant</li>
<li>feat: use new Deskflow graphics</li>
<li>fix: various typos found by unit193</li>
<li>docs: add new logo to readme and update screenshot</li>
<li>ci: use workflow_run to comment on PRs</li>
<li>feat: change most domains to Deskflow</li>
<li>feat: ask for permission before update check</li>
<li>ci: remove restore-keys for vcpkg and use local bootstrap</li>
<li>ci: add pr comment based on ci result</li>
<li>ci: add link back to workflow summary in pr comment</li>
<li>ci: use github.event.workflow_run.id for CI summary comment</li>
<li>ci: check for summaries dir before building message</li>
<li>ci: handle files with same name in ci comment workflow</li>
<li>ci: fixed syntax error in ci comment workflow</li>
<li>ci: use braces block for formatting in ci comment</li>
<li>ci: use job summary instead of pr comment</li>
<li>ci: lookup pr number by head sha for ci comment</li>
<li>fix: Update onMouseMoveSecondary to allow offset adjustments</li>
<li>ci: lock qt version to 6.7.2 on win/mac</li>
<li>docs: Fixed broken URL in README.md</li>
<li>fix: Use library config for Windows OpenSSL</li>
<li>Relocate commercial code downstream</li>
<li>build: Bump min libei and libportal versions</li>
<li>Use sonarsource/sonarcloud-github-c-cpp</li>
</ul>
</description>
<url>https://github.com/deskflow/deskflow/releases/tag/v1.17.0</url>
</release>
</releases>
</component>

20
deploy/mac/deploy.cmake Normal file
View File

@ -0,0 +1,20 @@
# SPDX-FileCopyrightText: 2024 Chris Rizzitello <sithlord48@gmail.com>
# SPDX-License-Identifier: MIT
# HACK This is set when the files is included so its the real path
# calling CMAKE_CURRENT_LIST_DIR after include would return the wrong scope var
set(MY_DIR ${CMAKE_CURRENT_LIST_DIR})
install(CODE "execute_process(COMMAND
${DEPLOYQT}
\"\${CMAKE_INSTALL_PREFIX}/${CMAKE_PROJECT_PROPER_NAME}.app\"
-timestamp -codesign=-
)")
set(OS_STRING "macos-${BUILD_ARCHITECTURE}")
set(CPACK_PACKAGE_ICON "${MY_DIR}/dmg-volume.icns")
set(CPACK_DMG_BACKGROUND_IMAGE "${MY_DIR}/dmg-background.tiff")
set(CPACK_DMG_DS_STORE_SETUP_SCRIPT "${MY_DIR}/generate_ds_store.applescript")
set(CPACK_DMG_VOLUME_NAME "${CMAKE_PROJECT_PROPER_NAME}")
set(CPACK_DMG_SLA_USE_RESOURCE_FILE_LICENSE ON)
set(CPACK_GENERATOR "DragNDrop")

View File

@ -0,0 +1,48 @@
-- SPDX-FileCopyrightText: 2020 Chris Rizzitello <sithlord48@gmail.com>
-- SPDX-License-Identifier: MIT
on run argv
set image_name to item 1 of argv
tell application "Finder"
tell disk image_name
-- wait for the image to finish mounting
set open_attempts to 0
repeat while open_attempts < 5
try
open
delay 5
set open_attempts to 5
close
on error errStr number errorNumber
set open_attempts to open_attempts + 1
delay 10
end try
end repeat
-- open the image the first time and save a DS_Store with just
-- background and icon setup
open
set current view of container window to icon view
set theViewOptions to the icon view options of container window
set background picture of theViewOptions to file ".background:background.tiff"
set arrangement of theViewOptions to not arranged
set icon size of theViewOptions to 100
set text size of theViewOptions to 16
close
open
tell container window
set sidebar width to 0
set statusbar visible to false
set toolbar visible to false
set pathbar visible to false
set the bounds to { 200, 120, 800, 520 }
set position of item "Deskflow.app" to { 144, 190 }
set position of item "Applications" to { 455, 190 }
end tell
close
end tell
end tell
end run

View File

@ -0,0 +1,6 @@
#SPDX-FileCopyrightText: 2025 Chris Rizzitello <sithlord48@gmail.com>
#SPDX-License-Identifier: MIT
if(CPACK_GENERATOR MATCHES 7Z|ZIP)
set(CPACK_PACKAGE_FILE_NAME ${CPACK_PACKAGE_FILE_NAME}-portable)
endif()

View File

@ -0,0 +1,75 @@
# SPDX-FileCopyrightText: 2024 Chris Rizzitello <sithlord48@gmail.com>
# SPDX-License-Identifier: MIT
# HACK This is set when the files is included so its the real path
# calling CMAKE_CURRENT_LIST_DIR after include would return the wrong scope var
set(MY_DIR ${CMAKE_CURRENT_LIST_DIR})
set(CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP TRUE)
set(CMAKE_INSTALL_SYSTEM_RUNTIME_DESTINATION .)
include(InstallRequiredSystemLibraries)
install(CODE "execute_process(
COMMAND ${DEPLOYQT} --no-compiler-runtime --no-system-d3d-compiler --no-quick-import -network \"\${CMAKE_INSTALL_PREFIX}/deskflow.exe\"
)")
configure_file(${MY_DIR}/pre-cpack.cmake.in ${CMAKE_CURRENT_BINARY_DIR}/pre-cpack.cmake @ONLY)
set(CPACK_PRE_BUILD_SCRIPTS ${CMAKE_CURRENT_BINARY_DIR}/pre-cpack.cmake)
configure_file(${MY_DIR}/cpack-options.cmake.in ${CMAKE_CURRENT_BINARY_DIR}/cpack-options.cmake @ONLY)
set(CPACK_PROJECT_CONFIG_FILE ${CMAKE_CURRENT_BINARY_DIR}/cpack-options.cmake)
set(OS_STRING "win-${BUILD_ARCHITECTURE}")
list(APPEND CPACK_GENERATOR "7Z")
# If Wix4+ is installed make a package
find_program(WIX_APP wix)
if (NOT "${WIX_APP}" STREQUAL "")
set(CPACK_WIX_VERSION 4)
list(APPEND CPACK_GENERATOR "WIX")
endif()
set(CPACK_PACKAGE_NAME "${CMAKE_PROJECT_PROPER_NAME}")
# Menu Entry
set(CPACK_WIX_PROGRAM_MENU_FOLDER "${CMAKE_PROJECT_PROPER_NAME}")
set(CPACK_PACKAGE_EXECUTABLES "deskflow" "${CMAKE_PROJECT_PROPER_NAME}")
# Default Install Path
set(CPACK_PACKAGE_INSTALL_DIRECTORY "${CMAKE_PROJECT_PROPER_NAME}")
# Wix Specific Values
set(CPACK_WIX_UPGRADE_GUID "027D1C8A-E7A5-4754-BB93-B2D45BFDBDC8")
set(CPACK_WIX_UI_BANNER "${MY_DIR}/wix-banner.png")
set(CPACK_WIX_UI_DIALOG "${MY_DIR}/wix-dialog.png")
# Required Extra Extenstions
list(APPEND CPACK_WIX_EXTENSIONS "WixToolset.Util.wixext" "WixToolset.Firewall.wixext")
# Make sure to also put the xmlns for the ext into the wix block on generated files
list(APPEND CPACK_WIX_CUSTOM_XMLNS "util=http://wixtoolset.org/schemas/v4/wxs/util" "firewall=http://wixtoolset.org/schemas/v4/wxs/firewall")
# The patch has to know the full path of our msm file
configure_file(
${MY_DIR}/wix-patch.xml.in
${CMAKE_CURRENT_BINARY_DIR}/wix-patch.xml @ONLY
)
# This patch set ups filewall rules, the service and msm module
set(CPACK_WIX_PATCH_FILE "${CMAKE_CURRENT_BINARY_DIR}/wix-patch.xml")
# Creates a DLL that can be used by our MSI for custom actions.
configure_file(
${MY_DIR}/wix-custom.h.in
${CMAKE_CURRENT_BINARY_DIR}/wix-custom.h @ONLY
)
add_library(
wix-custom SHARED
${MY_DIR}/wix-custom.cpp
)
target_include_directories(wix-custom PRIVATE ${CMAKE_CURRENT_BINARY_DIR})
set_target_properties(wix-custom PROPERTIES
RUNTIME_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}"
)
target_link_libraries(wix-custom PRIVATE Msi)

View File

@ -0,0 +1,19 @@
# SPDX-FileCopyrightText: 2025 Chris Rizzitello <sithlord48@gmail.com>
# SPDX-License-Identifier: MIT
if(CPACK_GENERATOR MATCHES 7Z|ZIP)
string(REPLACE " " "*" _TEMP_LIST "@CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS@")
set(${PORTABLE_LIBS} "")
foreach(ITEM ${_TEMP_LIST})
string(REPLACE "*" " " _ITEM ${ITEM})
file(COPY ${_ITEM} DESTINATION ${CPACK_TEMPORARY_INSTALL_DIRECTORY})
endforeach()
file(WRITE ${CPACK_TEMPORARY_INSTALL_DIRECTORY}/settings/Deskflow.conf " ")
file(REMOVE ${CPACK_TEMPORARY_INSTALL_DIRECTORY}/deskflow-daemon.exe)
file(WRITE ${CPACK_TEMPORARY_INSTALL_DIRECTORY}/README.txt
" Portable Deskflow: @CMAKE_PROJECT_VERSION@
The portable version must have the settings/Deskflow.conf file to save settings, or it will try to use the system settings location.
The portable version does not include the daemon, so the client will not work at UAC prompts or the login screen.
")
endif()

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

View File

@ -0,0 +1,72 @@
/*
* Deskflow -- mouse and keyboard sharing utility
* SPDX-FileCopyrightText: (C) 2025 Symless Ltd.
* SPDX-License-Identifier: GPL-2.0-only WITH LicenseRef-OpenSSL-Exception
*/
#include "wix-custom.h"
#define WIN32_LEAN_AND_MEAN
#include <Windows.h>
// Include after Windows.h
#include <MsiQuery.h>
#include <stdio.h>
#include <string>
namespace {
// Warning: DLL will crash with error code 1603 if we exceed this.
const auto kLogLineMax = 1024;
// Prefixes log messages with the app name so they're easier to find/filter.
const std::string kLogPrefix = std::string(kAppId) + " installer: ";
// Note: Resized to log line max when used.
static std::string s_logMessageBuffer; // NOSONAR - Must be mutable.
} // namespace
// This log output can be viewed by using the DebugView program.
#define MS_LOG_DEBUG(message, ...) \
s_logMessageBuffer.resize(kLogLineMax); \
sprintf(s_logMessageBuffer.data(), message, __VA_ARGS__); \
OutputDebugStringA((kLogPrefix + s_logMessageBuffer + "\n").c_str())
extern "C" __declspec(dllexport) UINT __stdcall CheckVCRedist(MSIHANDLE hInstall)
{
const auto kKeyName = TEXT(kRegKey);
const auto kValueName = TEXT("Minor");
const auto kProperty = "VC_REDIST_VERSION_OK";
MS_LOG_DEBUG("checking for msvc redist v%d.%d", kWindowsRuntimeMajor, kWindowsRuntimeMinor);
HKEY hKey;
if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, kKeyName, 0, KEY_READ, &hKey) != ERROR_SUCCESS) {
MS_LOG_DEBUG("msvc redist registry key not found");
return ERROR_FUNCTION_FAILED;
}
MS_LOG_DEBUG("msvc redist registry key found, querying minor version");
DWORD minorVersion = 0;
DWORD size = sizeof(DWORD);
RegQueryValueEx(hKey, kValueName, nullptr, nullptr, (LPBYTE)&minorVersion, &size);
RegCloseKey(hKey);
MS_LOG_DEBUG("msvc redist minor version: %lu", minorVersion);
if (minorVersion < kWindowsRuntimeMinor) {
MS_LOG_DEBUG("msvc redist minor version %lu too low, expected >= %d", minorVersion, kWindowsRuntimeMinor);
// Returning success allows the installer will show a friendly error message.
return ERROR_SUCCESS;
}
MS_LOG_DEBUG("msvc redist version ok, setting: %s", kProperty);
if (MsiSetProperty(hInstall, kProperty, "ok") != ERROR_SUCCESS) {
MS_LOG_DEBUG("failed to set property: %s", kProperty);
return ERROR_FUNCTION_FAILED;
}
MS_LOG_DEBUG("msvc redist version check successful");
return ERROR_SUCCESS;
}

View File

@ -0,0 +1,15 @@
/*
* Deskflow -- mouse and keyboard sharing utility
* SPDX-FileCopyrightText: (C) 2025 Symless Ltd.
* SPDX-License-Identifier: GPL-2.0-only WITH LicenseRef-OpenSSL-Exception
*/
#pragma once
const auto kAppId = "@CMAKE_PROJECT_NAME@";
const auto kRegKey = "SOFTWARE\\Microsoft\\VisualStudio\\14.0\\VC\\Runtimes\\@BUILD_ARCHITECTURE@";
// clang-format off
const auto kWindowsRuntimeMajor = @REQUIRED_MSVC_RUNTIME_MAJOR@;
const auto kWindowsRuntimeMinor = @REQUIRED_MSVC_RUNTIME_MINOR@;
// clang-format on

View File

Before

Width:  |  Height:  |  Size: 94 KiB

After

Width:  |  Height:  |  Size: 94 KiB

View File

@ -0,0 +1,78 @@
<CPackWiXPatch>
<CPackWiXFragment Id="CM_CP_deskflow_daemon.exe">
<ServiceInstall
Id="ServiceInstall"
Name="Deskflow"
DisplayName="Deskflow"
Description="Runs the Core process on secure desktops (UAC prompts, login screen, etc)."
ErrorControl="normal"
Start="auto"
Type="ownProcess">
<util:ServiceConfig
ResetPeriodInDays="1"
RestartServiceDelayInSeconds="1"
FirstFailureActionType="restart"
SecondFailureActionType="restart"
ThirdFailureActionType="none"
/>
</ServiceInstall>
<ServiceControl Id="ServiceControl" Name="Deskflow" Remove="uninstall" Start="install" Stop="both"/>
</CPackWiXFragment>
<CPackWiXFragment Id="CM_CP_deskflow_server.exe">
<firewall:FirewallException Id="ServerFirewallException" Name="Deskflow Server" Program="[INSTALL_ROOT]deskflow-server.exe" Scope="any"/>
</CPackWiXFragment>
<CPackWiXFragment Id="CM_CP_deskflow_client.exe">
<firewall:FirewallException Id="ClientFirewallException" Name="Deskflow Client" Program="[INSTALL_ROOT]deskflow-client.exe" Scope="any"/>
</CPackWiXFragment>
<CPackWiXFragment Id="#PRODUCT">
<Property Id="VC_REDIST_INSTALLED">
<RegistrySearch
Id="FindVCRedist"
Root="HKLM"
Key="SOFTWARE\Microsoft\VisualStudio\@REQUIRED_MSVC_RUNTIME_MAJOR@.0\VC\Runtimes\@BUILD_ARCHITECTURE@"
Name="Installed"
Type="raw" />
</Property>
<Binary Id="CustomDLL" SourceFile="@CMAKE_CURRENT_BINARY_DIR@/wix-custom.dll" />
<UI>
<Publish Dialog="ExitDialog"
Control="Finish"
Event="DoAction"
Value="RunDeskflow"
Condition= "NOT Installed" />
</UI>
<CustomAction
Id="CheckVCRedist"
BinaryRef="CustomDLL"
DllEntry="CheckVCRedist"
Execute="immediate" />
<CustomAction
Id="ShowVCRedistError"
Error="Microsoft Visual C++ Redistributable v@REQUIRED_MSVC_RUNTIME_MAJOR@.@REQUIRED_MSVC_RUNTIME_MINOR@ or later is required. Please download and install the latest version and then restart the installation. See our documentation for instructions." />
<CustomAction
Id="RunDeskflow"
ExeCommand="[INSTALL_ROOT]deskflow.exe"
Directory="INSTALL_ROOT"
Execute="immediate"
Impersonate="yes"
Return="asyncNoWait" />
<InstallExecuteSequence>
<Custom
Action="CheckVCRedist"
Before="InstallInitialize"
Condition="NOT Installed AND VC_REDIST_INSTALLED" />
<Custom
Action="ShowVCRedistError"
Before="InstallInitialize"
Condition="NOT Installed AND (NOT VC_REDIST_INSTALLED OR NOT VC_REDIST_VERSION_OK)" />
</InstallExecuteSequence>
</CPackWiXFragment>
</CPackWiXPatch>

31
doc/CMakeLists.txt Normal file
View File

@ -0,0 +1,31 @@
# SPDX-FileCopyrightText: 2019 - 2024 Chris Rizzitello <sithlord48@gmail.com>
# SPDX-License-Identifier: MIT
find_package(Doxygen QUIET)
option(BUILD_DOCS "Build and install documents" ${DOXYGEN_FOUND})
if (BUILD_DOCS AND DOXYGEN_FOUND)
set(DOXYGEN_EXTRACT_ALL YES)
set(DOXYGEN_STRIP_FROM_PATH ${CMAKE_SOURCE_DIR})
set(DOXYGEN_USE_MDFILE_AS_MAINPAGE mainpage.md)
set(DOXYGEN_QUIET YES)
# Files used to make our documents
# User facing documents will not include doxy comments in source code
doxygen_add_docs(user-docs ${CMAKE_SOURCE_DIR}/doc COMMENT "Generating user documentation" ALL)
# HACK Only these will show in your IDE
target_sources(user-docs PRIVATE
mainpage.md
configuration.md
)
install(
DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/html"
DESTINATION ${CMAKE_INSTALL_DOCDIR}
COMPONENT deskflow_docs)
else()
message(STATUS "Doxygen not found, skipping docs build")
endif()

201
doc/configuration.md Normal file
View File

@ -0,0 +1,201 @@
# GUI Config
Deskflow will automaticlly figure out where to save settings and other files.
## Unix Systems
The search order for a setting file is:
1. `<XDG_CONFIG_HOME>/Deskflow/Deskflow.conf`
1. A user settings file
1. A system settings file
A new settings file will be created in the user path if no settings file is found.
The path of the settings file will be used as the base for all other config files.
### Linux
- System: `/etc/Deskflow/Deskflow.conf`
- User: `~/.config/Deskflow/Deskflow.conf`
### macOS
- System: `/Library/Deskflow/Deskflow.conf`
- User: `~/Library/Deskflow/Deskflow.conf`
## Windows
The search order for a setting file is:
1. `<install-path>/settings/Deskflow.conf`
1. Windows Registry `HKCU\Software\Deskflow\Deskflow`
Windows will save to the install dir if settings are loaded from there. If not, it saves any other config files in: `C:\ProgramData\Deskflow\`
When using settings from the install dir, the service mode will not be available.
# Server Config Examples
The `deskflow-server` command accepts the `-c` or `--config` option, which takes one argument,
the path to a server configuration file. The format is non-standard but similar to YAML.
Comments begin with the `#` character and continue to the end of line.
Comments may appear anywhere the syntax permits.
Each `section` element must have a matching `end` element.
## Stacked Example
Stack one computer's screen on top of another's.
```
# +-------+
# | curly |
# | |
# +-------+
# +-------+ +-------+
# | moe | | larry |
# | | | |
# +-------+ +-------+
section: screens
# three hosts named: moe, larry, and curly
moe:
larry:
curly:
end
section: links
# larry is to the right of moe and curly is above moe.
moe:
right = larry
up = curly
# moe is to the left of larry and curly is above larry.
larry:
left = moe
up = curly
# larry is below curly.
curly:
down = larry
end
section: aliases
# curly is also known as shemp
curly:
shemp
end
```
## Horizontal Example
Align all screens horizontally.
```
# +-------+ +-------+ +-------+
# | moe | | larry | | curly |
# | | | | | |
# +-------+ +-------+ +-------+
section: screens
# three hosts named: moe, larry, and curly
moe:
larry:
curly:
end
section: links
# curly is to the right of larry and moe is to the left of larry.
larry:
right = curly
left = moe
# larry is to the right of moe.
moe:
right = larry
# larry is to the left of curly.
curly:
left = larry
end
```
## Span Example
Span two screens on one computer across the screens of two computers.
```
# +-------+ +-------+
# | curly | | curly |
# | | | |
# +-------+ +-------+
# +-------+ +-------+
# | moe | | larry |
# | | | |
# +-------+ +-------+
section: screens
# three hosts named: moe, larry, and curly
moe:
larry:
curly:
end
section: links
# larry is to the right of moe and curly is above moe.
moe:
right = larry
up = curly
# moe is to the left of larry and curly is above larry.
larry:
left = moe
up = curly
# larry is below curly.
curly:
down = larry
end
```
# Example file for `--config-toml` arg
```
[server.args]
no-daemon = true
no-tray = true
debug = "DEBUG"
name = "moe"
address = ":24800"
[client.args]
no-daemon = true
no-tray = true
debug = "DEBUG2"
name = "larry"
_last = "moe:24800"
```
# Example `.env` file
```
#
# App
#
# Shows the test menu in the GUI (on by default in debug mode)
# DESKFLOW_TEST_MENU=true
# Version checker URL to use (useful for testing)
# DESKFLOW_VERSION_URL="https://api.deskflow.org/version?fake=1.100.0"
# Enable debug logging in the GUI (on by default in debug mode)
# DESKFLOW_GUI_DEBUG=true
# Enable verbose logging in the GUI (always off by default)
# DESKFLOW_GUI_VERBOSE=true
# Reset all settings and delete all data on startup
# DESKFLOW_RESET_ALL=true
```

View File

@ -1,37 +0,0 @@
# sample deskflow configuration file
#
# comments begin with the # character and continue to the end of
# line. comments may appear anywhere the syntax permits.
section: screens
# three hosts named: moe, larry, and curly
moe:
larry:
curly:
end
section: links
# larry is to the right of moe and curly is above moe
moe:
right = larry
up = curly
# moe is to the left of larry and curly is above larry.
# note that curly is above both moe and larry and moe
# and larry have a symmetric connection (they're in
# opposite directions of each other).
larry:
left = moe
up = curly
# larry is below curly. if you move up from moe and then
# down, you'll end up on larry.
curly:
down = larry
end
section: aliases
# curly is also known as shemp
curly:
shemp
end

View File

@ -1,55 +0,0 @@
# sample deskflow configuration file
#
# comments begin with the # character and continue to the end of
# line. comments may appear anywhere the syntax permits.
# This example uses 3 computers. A laptop and two desktops (one a mac)
# They are arranged in the following configuration with Desktop1 acting as the server
# Desktop 2 has 3 screens arranged around desktop1
#
# +--------+ +---------+
# |Desktop2| |Desktop2 |
# | | | |
# +--------+ +---------+
# +-------+ +--------+ +---------+
# |Laptop | |Desktop1| |Desktop2 |
# | | | | | |
# +-------+ +--------+ +---------+
#
# The laptop comes and goes but that doesn't really affect this configuration
# The screens section is for the logical or short name of the computers
section: screens
# three computers that are logically named: desktop1, desktop2, and laptop
desktop1:
desktop2:
laptop:
end
section: links
# larry is to the right of moe and curly is above moe
moe:
right = larry
up = curly
# moe is to the left of larry and curly is above larry.
# note that curly is above both moe and larry and moe
# and larry have a symmetric connection (they're in
# opposite directions of each other).
larry:
left = moe
up = curly
# larry is below curly. if you move up from moe and then
# down, you'll end up on larry.
curly:
down = larry
end
# The aliases section is to map the full names of the computers to their logical names used in the screens section
# One way to find the actual name of a comptuer is to run hostname from a command window
section: aliases
# Laptop is actually known as John-Smiths-MacBook-3.local
desktop2:
John-Smiths-MacBook-3.local
end

View File

@ -1,39 +0,0 @@
# sample deskflow configuration file
#
# comments begin with the # character and continue to the end of
# line. comments may appear anywhere the syntax permits.
# +-------+ +--------+ +---------+
# |Laptop | |Desktop1| |iMac |
# | | | | | |
# +-------+ +--------+ +---------+
section: screens
# three hosts named: Laptop, Desktop1, and iMac
# These are the nice names of the hosts to make it easy to write the config file
# The aliases section below contain the "actual" names of the hosts (their hostnames)
Laptop:
Desktop1:
iMac:
end
section: links
# iMac is to the right of Desktop1
# Laptop is to the left of Desktop1
Desktop1:
right = iMac
left = Laptop
# Desktop1 is to the right of Laptop
Laptop:
right = Desktop1
# Desktop1 is to the left of iMac
iMac:
left = Desktop1
end
section: aliases
# The "real" name of iMac is John-Smiths-iMac-3.local. If we wanted we could remove this alias and instead use John-Smiths-iMac-3.local everywhere iMac is above. Hopefully it should be easy to see why using an alias is nicer
iMac:
John-Smiths-iMac-3.local
end

16
doc/mainpage.md Normal file
View File

@ -0,0 +1,16 @@
![Deskflow](https://github.com/user-attachments/assets/f005b958-24df-4f4a-9bfd-4f834dae59d6)
**Deskflow** is a free and open source keyboard and mouse sharing app.
Use the keyboard, mouse, or trackpad of one computer to control nearby computers,
and work seamlessly between them.
## Configuration
Our [Configuration] page has example configurations
## More info
For more info, see our [Wiki](https://github.com/deskflow/deskflow/wiki).
[Configuration]:configuration.md

View File

@ -1,56 +0,0 @@
# For now, we're only using Meson to resolve dependencies. CMake is called separately.
# In future, we may completely replace CMake with Meson.
# Where available, we use system packages, otherwise we use subprojects.
# Subprojects are also used to get the latest version during development.
project('deskflow', 'cpp')
if host_machine.system() == 'windows'
subproject('wintoast')
endif
system_tomlplusplus = get_option('system-tomlplusplus')
if system_tomlplusplus
dependency('tomlplusplus', required: false)
else
subproject('tomlplusplus')
endif
system_cli11 = get_option('system-cli11')
if system_cli11
dependency('cli11', required: false)
else
subproject('cli11')
endif
system_gtest = get_option('system-gtest')
if system_gtest
dependency('gtest', required: false)
else
subproject('gtest')
endif
if host_machine.system() == 'linux'
system_libei = get_option('system-libei')
if system_libei
dependency('libei-1.0', required: false)
else
# Using the subproject is only useful for development; it's not intended for normal use.
# GNOME46 or above is required as this has the required bits for libei.
# Building on anything older is pointless as you won't be able to actually connect to anything.
subproject('libei', default_options: ['tests=disabled', 'liboeffis=disabled'])
endif
system_libportal = get_option('system-libportal')
if system_libportal
dependency('libportal', required: false)
else
# Using the subproject is only useful for development; it's not intended for normal use.
subproject('libportal', default_options: [
'docs=false',
'backend-gtk3=enabled',
'backend-qt6=disabled'
])
endif
endif

View File

@ -1,5 +0,0 @@
option('system-gtest', type: 'boolean', value: true, description: 'Use system gtest')
option('system-libportal', type: 'boolean', value: true, description: 'Use system libportal')
option('system-libei', type: 'boolean', value: true, description: 'Use system libei')
option('system-tomlplusplus', type: 'boolean', value: true, description: 'Use system tomlplusplus')
option('system-cli11', type: 'boolean', value: true, description: 'Use system cli11')

View File

@ -1,102 +0,0 @@
{\rtf1\ansi\ansicpg1252\cocoartf949\cocoasubrtf460
{\fonttbl\f0\fswiss\fcharset0 Helvetica;\f1\froman\fcharset0 Times-Roman;}
{\colortbl;\red255\green255\blue255;}
{\info
{\title Original file was gpl-2.0.tex}
{\doccomm Created using latex2rtf 1.9.19a on Sun Jul 12 19:21:22 2009}}\paperw12280\paperh15900\margl2680\margr2700\margb1760\margt2540\vieww12280\viewh15900\viewkind1
\deftab720
\pard\pardeftab720\ri0\qj
\f0\fs24 \cf0 \
\pard\pardeftab720\ri0\qc
\f1\fs30 \cf0 GNU GENERAL PUBLIC LICENSE
\f0\fs24 \
\
\
\pard\pardeftab720\ri0\qc
\f1 \cf0 Version 2, June 1991\
\
\
Copyright \'a9 1989, 1991 Free Software Foundation, Inc.\
\pard\pardeftab720\ri0\sb240\qc
\cf0 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA\
\pard\pardeftab720\ri0\qc
\cf0 Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. \
\pard\pardeftab720\ri0\qc
\b\fs26 \cf0 Preamble
\b0\fs24 \
\pard\pardeftab720\ri0\qj
\cf0 The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software\'97to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation\'92s software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) You can apply it to your programs, too.\
When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things.\
To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it.\
For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights.\
We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software.\
Also, for each author\'92s protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors\'92 reputations.\
Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone\'92s free use or not licensed at all.\
The precise terms and conditions for copying, distribution and modification follow.\
\pard\pardeftab720\ri0\qc
\fs31 \cf0 Terms and Conditions For Copying, Distribution and Modification
\fs24 \
\pard\pardeftab720\li600\fi-300\ri0\sb50\qj
\cf0 1. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The \'93Program\'94, below, refers to any such program or work, and a \'93work based on the Program\'94 means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term \'93modification\'94.) Each licensee is addressed as \'93you\'94.\
\pard\pardeftab720\li600\ri0\qj
\cf0 Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does.\
\pard\pardeftab720\li600\fi-300\ri0\sb50\qj
\cf0 2. You may copy and distribute verbatim copies of the Program\'92s source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program.\
\pard\pardeftab720\li600\ri0\qj
\cf0 You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee.\
\pard\pardeftab720\li600\fi-300\ri0\sb50\qj
\cf0 3. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions:\
\pard\pardeftab720\li1200\fi-300\ri0\sb50\qj
\cf0 (a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change.\
(b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License.\
(c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.)\
\pard\pardeftab720\li600\ri0\sb100\qj
\cf0 These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it.\
\pard\pardeftab720\li600\fi-300\ri0\qj
\cf0 Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program.\
In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License.\
\pard\pardeftab720\li600\fi-300\ri0\sb50\qj
\cf0 4. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following:\
\pard\pardeftab720\li1200\fi-300\ri0\sb50\qj
\cf0 (a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or,\
(b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or,\
(c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.)\
\pard\pardeftab720\li600\ri0\sb100\qj
\cf0 The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable.\
\pard\pardeftab720\li600\fi-300\ri0\qj
\cf0 If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code.\
\pard\pardeftab720\li600\fi-300\ri0\sb50\qj
\cf0 5. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance.\
6. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it.\
7. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients\'92 exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License.\
8. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program.\
\pard\pardeftab720\li600\ri0\qj
\cf0 If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances.\
It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice.\
This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License.\
\pard\pardeftab720\li600\fi-300\ri0\sb50\qj
\cf0 9. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License.\
10. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns.\
\pard\pardeftab720\li600\ri0\qj
\cf0 Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and \'93any later version\'94, you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation.\
\pard\pardeftab720\li600\fi-300\ri0\sb50\qj
\cf0 11. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally.\
\pard\pardeftab720\li600\ri0\qc
\fs31 \cf0 No Warranty
\fs24 \
\pard\pardeftab720\li600\fi-300\ri0\sb50\qj
\cf0 12. Because the program is licensed free of charge, there is no warranty for the program, to the extent permitted by applicable law. Except when otherwise stated in writing the copyright holders and/or other parties provide the program \'93as is\'94 without warranty of any kind, either expressed or implied, including, but not limited to, the implied warranties of merchantability and fitness for a particular purpose. The entire risk as to the quality and performance of the program is with you. Should the program prove defective, you assume the cost of all necessary servicing, repair or correction.
\f0 \
\f1 13. In no event unless required by applicable law or agreed to in writing will any copyright holder, or any other party who may modify and/or redistribute the program as permitted above, be liable to you for damages, including any general, special, incidental or consequential damages arising out of the use or inability to use the program (including but not limited to loss of data or data being rendered inaccurate or losses sustained by you or third parties or a failure of the program to operate with any other programs), even if such holder or other party has been advised of the possibility of such damages.
\f0 \
\pard\pardeftab720\ri0\sb100\qc
\f1\fs31 \cf0 End of Terms and Conditions
\fs24 }

View File

@ -1,422 +0,0 @@
\documentclass[11pt]{article}
\title{GNU GENERAL PUBLIC LICENSE}
\date{Version 2, June 1991}
\begin{document}
\maketitle
\begin{center}
{\parindent 0in
Copyright \copyright\ 1989, 1991 Free Software Foundation, Inc.
\bigskip
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
\bigskip
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
}
\end{center}
\begin{center}
{\bf\large Preamble}
\end{center}
The licenses for most software are designed to take away your freedom to
share and change it. By contrast, the GNU General Public License is
intended to guarantee your freedom to share and change free software---to
make sure the software is free for all its users. This General Public
License applies to most of the Free Software Foundation's software and to
any other program whose authors commit to using it. (Some other Free
Software Foundation software is covered by the GNU Library General Public
License instead.) You can apply it to your programs, too.
When we speak of free software, we are referring to freedom, not price.
Our General Public Licenses are designed to make sure that you have the
freedom to distribute copies of free software (and charge for this service
if you wish), that you receive source code or can get it if you want it,
that you can change the software or use pieces of it in new free programs;
and that you know you can do these things.
To protect your rights, we need to make restrictions that forbid anyone to
deny you these rights or to ask you to surrender the rights. These
restrictions translate to certain responsibilities for you if you
distribute copies of the software, or if you modify it.
For example, if you distribute copies of such a program, whether gratis or
for a fee, you must give the recipients all the rights that you have. You
must make sure that they, too, receive or can get the source code. And
you must show them these terms so they know their rights.
We protect your rights with two steps: (1) copyright the software, and (2)
offer you this license which gives you legal permission to copy,
distribute and/or modify the software.
Also, for each author's protection and ours, we want to make certain that
everyone understands that there is no warranty for this free software. If
the software is modified by someone else and passed on, we want its
recipients to know that what they have is not the original, so that any
problems introduced by others will not reflect on the original authors'
reputations.
Finally, any free program is threatened constantly by software patents.
We wish to avoid the danger that redistributors of a free program will
individually obtain patent licenses, in effect making the program
proprietary. To prevent this, we have made it clear that any patent must
be licensed for everyone's free use or not licensed at all.
The precise terms and conditions for copying, distribution and
modification follow.
\begin{center}
{\Large \sc Terms and Conditions For Copying, Distribution and
Modification}
\end{center}
%\renewcommand{\theenumi}{\alpha{enumi}}
\begin{enumerate}
\addtocounter{enumi}{-1}
\item
This License applies to any program or other work which contains a notice
placed by the copyright holder saying it may be distributed under the
terms of this General Public License. The ``Program'', below, refers to
any such program or work, and a ``work based on the Program'' means either
the Program or any derivative work under copyright law: that is to say, a
work containing the Program or a portion of it, either verbatim or with
modifications and/or translated into another language. (Hereinafter,
translation is included without limitation in the term ``modification''.)
Each licensee is addressed as ``you''.
Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope. The act of
running the Program is not restricted, and the output from the Program
is covered only if its contents constitute a work based on the
Program (independent of having been made by running the Program).
Whether that is true depends on what the Program does.
\item You may copy and distribute verbatim copies of the Program's source
code as you receive it, in any medium, provided that you conspicuously
and appropriately publish on each copy an appropriate copyright notice
and disclaimer of warranty; keep intact all the notices that refer to
this License and to the absence of any warranty; and give any other
recipients of the Program a copy of this License along with the Program.
You may charge a fee for the physical act of transferring a copy, and you
may at your option offer warranty protection in exchange for a fee.
\item
You may modify your copy or copies of the Program or any portion
of it, thus forming a work based on the Program, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:
\begin{enumerate}
\item
You must cause the modified files to carry prominent notices stating that
you changed the files and the date of any change.
\item
You must cause any work that you distribute or publish, that in
whole or in part contains or is derived from the Program or any
part thereof, to be licensed as a whole at no charge to all third
parties under the terms of this License.
\item
If the modified program normally reads commands interactively
when run, you must cause it, when started running for such
interactive use in the most ordinary way, to print or display an
announcement including an appropriate copyright notice and a
notice that there is no warranty (or else, saying that you provide
a warranty) and that users may redistribute the program under
these conditions, and telling the user how to view a copy of this
License. (Exception: if the Program itself is interactive but
does not normally print such an announcement, your work based on
the Program is not required to print an announcement.)
\end{enumerate}
These requirements apply to the modified work as a whole. If
identifiable sections of that work are not derived from the Program,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works. But when you
distribute the same sections as part of a whole which is a work based
on the Program, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote it.
Thus, it is not the intent of this section to claim rights or contest
your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
collective works based on the Program.
In addition, mere aggregation of another work not based on the Program
with the Program (or with a work based on the Program) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.
\item
You may copy and distribute the Program (or a work based on it,
under Section 2) in object code or executable form under the terms of
Sections 1 and 2 above provided that you also do one of the following:
\begin{enumerate}
\item
Accompany it with the complete corresponding machine-readable
source code, which must be distributed under the terms of Sections
1 and 2 above on a medium customarily used for software interchange; or,
\item
Accompany it with a written offer, valid for at least three
years, to give any third party, for a charge no more than your
cost of physically performing source distribution, a complete
machine-readable copy of the corresponding source code, to be
distributed under the terms of Sections 1 and 2 above on a medium
customarily used for software interchange; or,
\item
Accompany it with the information you received as to the offer
to distribute corresponding source code. (This alternative is
allowed only for noncommercial distribution and only if you
received the program in object code or executable form with such
an offer, in accord with Subsection b above.)
\end{enumerate}
The source code for a work means the preferred form of the work for
making modifications to it. For an executable work, complete source
code means all the source code for all modules it contains, plus any
associated interface definition files, plus the scripts used to
control compilation and installation of the executable. However, as a
special exception, the source code distributed need not include
anything that is normally distributed (in either source or binary
form) with the major components (compiler, kernel, and so on) of the
operating system on which the executable runs, unless that component
itself accompanies the executable.
If distribution of executable or object code is made by offering
access to copy from a designated place, then offering equivalent
access to copy the source code from the same place counts as
distribution of the source code, even though third parties are not
compelled to copy the source along with the object code.
\item
You may not copy, modify, sublicense, or distribute the Program
except as expressly provided under this License. Any attempt
otherwise to copy, modify, sublicense or distribute the Program is
void, and will automatically terminate your rights under this License.
However, parties who have received copies, or rights, from you under
this License will not have their licenses terminated so long as such
parties remain in full compliance.
\item
You are not required to accept this License, since you have not
signed it. However, nothing else grants you permission to modify or
distribute the Program or its derivative works. These actions are
prohibited by law if you do not accept this License. Therefore, by
modifying or distributing the Program (or any work based on the
Program), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Program or works based on it.
\item
Each time you redistribute the Program (or any work based on the
Program), the recipient automatically receives a license from the
original licensor to copy, distribute or modify the Program subject to
these terms and conditions. You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties to
this License.
\item
If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not distribute the Program at all. For example, if a patent
license would not permit royalty-free redistribution of the Program by
all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Program.
If any portion of this section is held invalid or unenforceable under
any particular circumstance, the balance of the section is intended to
apply and the section as a whole is intended to apply in other
circumstances.
It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system, which is
implemented by public license practices. Many people have made
generous contributions to the wide range of software distributed
through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing
to distribute software through any other system and a licensee cannot
impose that choice.
This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.
\item
If the distribution and/or use of the Program is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Program under this License
may add an explicit geographical distribution limitation excluding
those countries, so that distribution is permitted only in or among
countries not thus excluded. In such case, this License incorporates
the limitation as if written in the body of this License.
\item
The Free Software Foundation may publish revised and/or new versions
of the General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the Program
specifies a version number of this License which applies to it and ``any
later version'', you have the option of following the terms and conditions
either of that version or of any later version published by the Free
Software Foundation. If the Program does not specify a version number of
this License, you may choose any version ever published by the Free Software
Foundation.
\item
If you wish to incorporate parts of the Program into other free
programs whose distribution conditions are different, write to the author
to ask for permission. For software which is copyrighted by the Free
Software Foundation, write to the Free Software Foundation; we sometimes
make exceptions for this. Our decision will be guided by the two goals
of preserving the free status of all derivatives of our free software and
of promoting the sharing and reuse of software generally.
\begin{center}
{\Large\sc
No Warranty
}
\end{center}
\item
{\sc Because the program is licensed free of charge, there is no warranty
for the program, to the extent permitted by applicable law. Except when
otherwise stated in writing the copyright holders and/or other parties
provide the program ``as is'' without warranty of any kind, either expressed
or implied, including, but not limited to, the implied warranties of
merchantability and fitness for a particular purpose. The entire risk as
to the quality and performance of the program is with you. Should the
program prove defective, you assume the cost of all necessary servicing,
repair or correction.}
\item
{\sc In no event unless required by applicable law or agreed to in writing
will any copyright holder, or any other party who may modify and/or
redistribute the program as permitted above, be liable to you for damages,
including any general, special, incidental or consequential damages arising
out of the use or inability to use the program (including but not limited
to loss of data or data being rendered inaccurate or losses sustained by
you or third parties or a failure of the program to operate with any other
programs), even if such holder or other party has been advised of the
possibility of such damages.}
\end{enumerate}
\begin{center}
{\Large\sc End of Terms and Conditions}
\end{center}
\pagebreak[2]
\section*{Appendix: How to Apply These Terms to Your New Programs}
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these
terms.
To do so, attach the following notices to the program. It is safest to
attach them to the start of each source file to most effectively convey
the exclusion of warranty; and each file should have at least the
``copyright'' line and a pointer to where the full notice is found.
\begin{quote}
one line to give the program's name and a brief idea of what it does. \\
Copyright (C) yyyy name of author \\
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
\end{quote}
Also add information on how to contact you by electronic and paper mail.
If the program is interactive, make it output a short notice like this
when it starts in an interactive mode:
\begin{quote}
Gnomovision version 69, Copyright (C) yyyy name of author \\
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. \\
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
\end{quote}
The hypothetical commands {\tt show w} and {\tt show c} should show the
appropriate parts of the General Public License. Of course, the commands
you use may be called something other than {\tt show w} and {\tt show c};
they could even be mouse-clicks or menu items---whatever suits your
program.
You should also get your employer (if you work as a programmer) or your
school, if any, to sign a ``copyright disclaimer'' for the program, if
necessary. Here is a sample; alter the names:
\begin{quote}
Yoyodyne, Inc., hereby disclaims all copyright interest in the program \\
`Gnomovision' (which makes passes at compilers) written by James Hacker. \\
signature of Ty Coon, 1 April 1989 \\
Ty Coon, President of Vice
\end{quote}
This General Public License does not permit incorporating your program
into proprietary programs. If your program is a subroutine library, you
may consider it more useful to permit linking proprietary applications
with the library. If this is what you want to do, use the GNU Library
General Public License instead of this License.
\end{document}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 36 KiB

View File

@ -1,59 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
height="400"
viewBox="0 -960 16000 16000"
width="400"
fill="#e8eaed"
version="1.1"
id="svg58"
sodipodi:docname="deskflow-icon.svg"
inkscape:version="1.2.2 (b0a8486541, 2022-12-01)"
inkscape:export-filename="deskflow.png"
inkscape:export-xdpi="4000"
inkscape:export-ydpi="4000"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<defs
id="defs62" />
<sodipodi:namedview
id="namedview60"
pagecolor="#ffffff"
bordercolor="#000000"
borderopacity="0.25"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
showgrid="false"
inkscape:zoom="1.4142136"
inkscape:cx="140.71425"
inkscape:cy="220.61732"
inkscape:window-width="1920"
inkscape:window-height="1011"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="svg58" />
<g
id="g312"
transform="matrix(1.0746139,0,0,0.99657266,-596.91134,-9.7327822)"
inkscape:label="deskflow">
<path
style="fill:#3366cc;fill-opacity:1;stroke-width:22.0314"
d="m 10822.775,14277.69 c -725.441,-75.758 -1360.4107,-335.408 -2953.399,-1207.698 -1184.4329,-648.572 -1657.2077,-869.797 -2159.0787,-1010.295 -195.3193,-54.679 -239.4632,-58.606 -660.9423,-58.798 -412.4131,-0.187 -465.9968,4.307 -616.8795,51.442 -617.2354,192.932 -1111.1495,547.318 -1705.8871,1223.984 -372.355,423.649 -452.1256,475.865 -726.9905,475.865 -232.6962,0 -389.3132,-114.626 -538.1425,-393.859 -97.6499,-183.208 -136.2498,-354.745 -136.943,-608.569 -0.9871,-361.332 90.7554,-581.303 405.6158,-972.546 454.315,-564.53 1071.3806,-1096.759 1627.0063,-1403.32 574.0763,-316.742 1301.046,-474.5294 1911.1995,-414.8217 877.7976,85.8977 1479.4495,322.5197 3173.8588,1248.2357 1360.4629,743.271 1887.4222,972.691 2357.3612,1026.316 962.745,109.86 1619.788,-234.099 2426.041,-1270.024 265.988,-341.759 440.291,-523.347 538.01,-560.5 85.218,-32.404 353.332,-26.223 440.38,10.151 114.885,48.003 290.277,236.695 363.058,390.589 90.975,192.367 115.643,338.837 106.757,633.906 -7.394,245.557 -11.399,264.246 -91.148,425.591 -151.774,307.052 -552.228,834.715 -929.562,1224.851 -709.182,733.24 -1400.349,1092.826 -2291.735,1192.297 -223.305,24.917 -275.771,24.644 -538.58,-2.799 z"
id="path3393"
inkscape:label="wave 3" />
<path
style="fill:#33b2cc;fill-opacity:1;stroke-width:26.9658"
d="M 10691.975,9232.2954 C 10023.904,9138.2267 9291.0238,8829.9773 7943.0848,8076.1112 6609.9067,7330.5005 6198.1922,7138.9358 5652.3423,7010.2615 c -243.5381,-57.4099 -347.9813,-65.1846 -698.6764,-52.0098 -350.6523,13.1729 -447.6471,28.2841 -648.4026,101.0161 -564.5998,204.5483 -1088.9878,604.082 -1609.3308,1226.1566 -346.6786,414.4566 -584.4059,525.2808 -885.347,412.7324 -192.604,-72.0329 -433.8052,-423.3421 -490.3134,-714.1418 -38.1396,-196.2741 -16.3788,-517.0343 47.5576,-701.0115 146.4281,-421.345 909.508,-1246.3029 1581.9071,-1710.1823 963.612,-664.7841 1984.7795,-839.4204 3092.0317,-528.7881 635.0677,178.1644 1074.5795,381.1158 2396.9103,1106.8098 963.7205,528.8895 1563.7032,820.226 1945.1742,944.5303 309.63,100.896 861.648,137.9622 1159.223,77.8413 588.657,-118.9268 1115.294,-522.1996 1702.251,-1303.4965 310.762,-413.655 424.656,-516.4984 632.476,-571.1126 312.793,-82.2063 660.875,196.9193 776.17,622.3954 40.112,148.0341 49.106,237.616 42.717,425.5773 -11.234,330.4785 -72.528,487.867 -338.44,868.9363 -740.488,1061.1785 -1618.249,1744.1642 -2516.836,1958.3492 -314.615,74.9868 -841.585,101.7751 -1149.443,58.4277 z"
id="path1767"
inkscape:label="wave 2" />
<path
style="fill:#33cc99;fill-opacity:1;stroke-width:26.9658"
d="M 10576.744,4172.4544 C 9875.4106,4054.5311 9254.561,3795.6536 8047.1318,3117.6748 6298.7948,2135.9727 5901.1838,1973.7358 5169.1286,1943.3652 c -309.4699,-12.839 -457.2545,-4.6405 -640.2217,35.5164 -623.6823,136.8833 -1265.1525,579.7083 -1843.7689,1272.8049 -261.4251,313.1489 -336.0185,374.0949 -523.4853,427.7108 -333.9533,95.5119 -631.6749,-125.6455 -797.5,-592.4091 -65.1417,-183.3604 -70.0111,-219.3096 -60.5107,-446.7291 15.0698,-360.7299 102.7469,-573.6147 372.566,-904.6099 1271.6034,-1559.91423 2646.1446,-2145.742 4181.6081,-1782.19574 680.9761,161.23227 1320.8731,447.96799 2599.9925,1165.04794 1490.1626,835.3921 2027.4634,1046.8526 2657.2604,1045.7931 824.736,-1.3855 1475.964,-418.6346 2184.35,-1399.53052 316.552,-438.32663 413.046,-512.11801 670.274,-512.57528 154.752,-0.27638 193.077,12.59982 339.34,113.99621 259.074,179.60222 391.048,479.99014 391.048,890.06929 0,346.9967 -62.66,514.2152 -341.533,911.4521 -1108.285,1578.6765 -2362.287,2243.4278 -3781.804,2004.7481 z"
id="path970"
inkscape:label="wave 1" />
</g>
</svg>

Before

Width:  |  Height:  |  Size: 4.9 KiB

View File

@ -1,200 +0,0 @@
/*
* Deskflow -- mouse and keyboard sharing utility
* Copyright (C) 2009 Symless Ltd.
*
* This package is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* found in the file LICENSE that should have accompanied this file.
*
* This package is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
// clang-format off
/* Define version here for Unix, but using /D for Windows. */
#cmakedefine DESKFLOW_VERSION "${DESKFLOW_VERSION}"
/* Define to the base type of arg 3 for `accept`. */
#cmakedefine ACCEPT_TYPE_ARG3 ${ACCEPT_TYPE_ARG3}
/* Define if your compiler has bool support. */
#cmakedefine HAVE_CXX_BOOL ${HAVE_CXX_BOOL}
/* Define if your compiler has C++ cast support. */
#cmakedefine HAVE_CXX_CASTS ${HAVE_CXX_CASTS}
/* Define if your compiler has exceptions support. */
#cmakedefine HAVE_CXX_EXCEPTIONS ${HAVE_CXX_EXCEPTIONS}
/* Define if your compiler has mutable support. */
#cmakedefine HAVE_CXX_MUTABLE ${HAVE_CXX_MUTABLE}
/* Define if your compiler has standard C++ library support. */
#cmakedefine HAVE_CXX_STDLIB ${HAVE_CXX_STDLIB}
/* Define if the <X11/extensions/dpms.h> header file declares function prototypes. */
#cmakedefine HAVE_DPMS_PROTOTYPES ${HAVE_DPMS_PROTOTYPES}
/* Define if you have a working `getpwuid_r` function. */
#cmakedefine HAVE_GETPWUID_R ${HAVE_GETPWUID_R}
/* Define to 1 if you have the `gmtime_r` function. */
#cmakedefine HAVE_GMTIME_R ${HAVE_GMTIME_R}
/* Define if you have the `inet_aton` function. */
#cmakedefine HAVE_INET_ATON ${HAVE_INET_ATON}
/* Define to 1 if you have the <inttypes.h> header file. */
#cmakedefine HAVE_INTTYPES_H ${HAVE_INTTYPES_H}
/* Define to 1 if you have the <istream> header file. */
#cmakedefine HAVE_ISTREAM ${HAVE_ISTREAM}
/* Define to 1 if you have the <locale.h> header file. */
#cmakedefine HAVE_LOCALE_H ${HAVE_LOCALE_H}
/* Define to 1 if you have the <memory.h> header file. */
#cmakedefine HAVE_MEMORY_H ${HAVE_MEMORY_H}
/* Define if you have the `nanosleep` function. */
#cmakedefine HAVE_NANOSLEEP ${HAVE_NANOSLEEP}
/* Define to 1 if you have the <ostream> header file. */
#cmakedefine HAVE_OSTREAM ${HAVE_OSTREAM}
/* Define if you have a POSIX `sigwait` function. */
#cmakedefine HAVE_POSIX_SIGWAIT ${HAVE_POSIX_SIGWAIT}
/* Define if you have POSIX threads libraries and header files. */
#cmakedefine HAVE_PTHREAD ${HAVE_PTHREAD}
/* Define if you have `pthread_sigmask` and `pthread_kill` functions. */
#cmakedefine HAVE_PTHREAD_SIGNAL ${HAVE_PTHREAD_SIGNAL}
/* Define if your compiler defines socklen_t. */
#cmakedefine HAVE_SOCKLEN_T ${HAVE_SOCKLEN_T}
/* Define to 1 if you have the <sstream> header file. */
#cmakedefine HAVE_SSTREAM ${HAVE_SSTREAM}
/* Define to 1 if you have the <stdint.h> header file. */
#cmakedefine HAVE_STDINT_H ${HAVE_STDINT_H}
/* Define to 1 if you have the <stdlib.h> header file. */
#cmakedefine HAVE_STDLIB_H ${HAVE_STDLIB_H}
/* Define to 1 if you have the `strftime` function. */
#cmakedefine HAVE_STRFTIME ${HAVE_STRFTIME}
/* Define to 1 if you have the <strings.h> header file. */
#cmakedefine HAVE_STRINGS_H ${HAVE_STRINGS_H}
/* Define to 1 if you have the <string.h> header file. */
#cmakedefine HAVE_STRING_H ${HAVE_STRING_H}
/* Define to 1 if you have the <sys/select.h> header file. */
#cmakedefine HAVE_SYS_SELECT_H ${HAVE_SYS_SELECT_H}
/* Define to 1 if you have the <sys/socket.h> header file. */
#cmakedefine HAVE_SYS_SOCKET_H ${HAVE_SYS_SOCKET_H}
/* Define to 1 if you have the <sys/stat.h> header file. */
#cmakedefine HAVE_SYS_STAT_H ${HAVE_SYS_STAT_H}
/* Define to 1 if you have the <sys/time.h> header file. */
#cmakedefine HAVE_SYS_TIME_H ${HAVE_SYS_TIME_H}
/* Define to 1 if you have the <sys/types.h> header file. */
#cmakedefine HAVE_SYS_TYPES_H ${HAVE_SYS_TYPES_H}
/* Define to 1 if you have the <sys/utsname.h> header file. */
#cmakedefine HAVE_SYS_UTSNAME_H ${HAVE_SYS_UTSNAME_H}
/* Define to 1 if you have the <unistd.h> header file. */
#cmakedefine HAVE_UNISTD_H ${HAVE_UNISTD_H}
/* Define to 1 if you have the `vsnprintf` function. */
#cmakedefine HAVE_VSNPRINTF ${HAVE_VSNPRINTF}
/* Define to 1 if you have the <wchar.h> header file. */
#cmakedefine HAVE_WCHAR_H ${HAVE_WCHAR_H}
/* Define to 1 if you have the <X11/extensions/Xrandr.h> header file. */
#cmakedefine HAVE_X11_EXTENSIONS_XRANDR_H ${HAVE_X11_EXTENSIONS_XRANDR_H}
/* Define to 1 if you have the <X11/extensions/dpms.h> header file. */
#cmakedefine HAVE_X11_EXTENSIONS_DPMS_H ${HAVE_X11_EXTENSIONS_DPMS_H}
/* Define to 1 if you have the <X11/extensions/Xinerama.h> header file. */
#cmakedefine HAVE_X11_EXTENSIONS_XINERAMA_H ${HAVE_X11_EXTENSIONS_XINERAMA_H}
/* Define to 1 if you have the <X11/extensions/XKBstr.h> header file. */
#cmakedefine HAVE_X11_EXTENSIONS_XKBSTR_H ${HAVE_X11_EXTENSIONS_XKBSTR_H}
/* Define to 1 if you have the <X11/extensions/XTest.h> header file. */
#cmakedefine HAVE_X11_EXTENSIONS_XTEST_H ${HAVE_X11_EXTENSIONS_XTEST_H}
/* Define to 1 if you have the <X11/XKBlib.h> header file. */
#cmakedefine HAVE_X11_XKBLIB_H ${HAVE_X11_XKBLIB_H}
/* Define to 1 if you have the <X11/extensions/XInput2.h> header file. */
#cmakedefine HAVE_XI2 ${HAVE_XI2}
/* Define this if the XKB extension is available. */
#cmakedefine HAVE_XKB_EXTENSION ${HAVE_XKB_EXTENSION}
/* Define to necessary symbol if this constant uses a non-standard name on your system. */
#cmakedefine PTHREAD_CREATE_JOINABLE ${PTHREAD_CREATE_JOINABLE}
/* Define to the type of arg 1 for `select`. */
#cmakedefine SELECT_TYPE_ARG1 ${SELECT_TYPE_ARG1}
/* Define to the type of args 2, 3 and 4 for `select`. */
#cmakedefine SELECT_TYPE_ARG234 ${SELECT_TYPE_ARG234}
/* Define to the type of arg 5 for `select`. */
#cmakedefine SELECT_TYPE_ARG5 ${SELECT_TYPE_ARG5}
/* The size of `char`, as computed by sizeof. */
#cmakedefine SIZEOF_CHAR ${SIZEOF_CHAR}
/* The size of `int`, as computed by sizeof. */
#cmakedefine SIZEOF_INT ${SIZEOF_INT}
/* The size of `long`, as computed by sizeof. */
#cmakedefine SIZEOF_LONG ${SIZEOF_LONG}
/* The size of `short`, as computed by sizeof. */
#cmakedefine SIZEOF_SHORT ${SIZEOF_SHORT}
/* Define to 1 if you have the ANSI C header files. */
#cmakedefine STDC_HEADERS ${STDC_HEADERS}
/* Define to 1 if you can safely include both <sys/time.h> and <time.h>. */
#cmakedefine TIME_WITH_SYS_TIME ${TIME_WITH_SYS_TIME}
/* Define to 1 if your <sys/time.h> declares `struct tm`. */
#cmakedefine TM_IN_SYS_TIME ${TM_IN_SYS_TIME}
/* Define to 1 if the X Window System is missing or not being used. */
#cmakedefine X_DISPLAY_MISSING ${X_DISPLAY_MISSING}
/* Define to `unsigned int` if <sys/types.h> does not define. */
#cmakedefine size_t ${size_t}
/* Define if libportal has xdp_session_connect_to_eis */
#cmakedefine HAVE_LIBPORTAL_SESSION_CONNECT_TO_EIS ${HAVE_LIBPORTAL_SESSION_CONNECT_TO_EIS}
/* Define if libportal has xdp_portal_create_remote_desktop_session_full */
#cmakedefine HAVE_LIBPORTAL_CREATE_REMOTE_DESKTOP_SESSION_FULL ${HAVE_LIBPORTAL_CREATE_REMOTE_DESKTOP_SESSION_FULL}
/* Define if libportal has input capture support */
#cmakedefine HAVE_LIBPORTAL_INPUTCAPTURE ${HAVE_LIBPORTAL_INPUTCAPTURE}
// clang-format on

View File

@ -1,37 +0,0 @@
# Maintainer: @DESKFLOW_MAINTAINER@
pkgname=@DESKFLOW_APP_ID@
pkgver=@DESKFLOW_VERSION_FOUR_PART@
pkgrel=1
pkgdesc="Mouse and keyboard sharing utility"
url='@DESKFLOW_WEBSITE_URL@'
arch=('x86_64')
license=('GPL-2.0-only')
depends=(
'gcc-libs'
'glibc'
'openssl'
'libx11'
'libxi'
'libxkbfile'
'libxext'
'libxtst'
'libxinerama'
'libxkbcommon-x11'
'libnotify'
'hicolor-icon-theme'
'qt6-base'
'qt6-tools'
'libei'
'libportal'
)
conflicts=('synergy-git' 'synergy1-bin' 'synergy2-bin' 'synergy3-bin')
options=('!debug')
package() {
# By default, `makepkg` will run from the `src` directory, which would
# only install the binaries, and not the .desktop file, etc. To install
# everything, we need to run `make install` with the root Makefile.
cd $startdir
make install DESTDIR=$pkgdir
}

View File

@ -1,42 +0,0 @@
app-id: org.deskflow.Deskflow
runtime: org.kde.Platform
runtime-version: "5.15-21.08"
sdk: org.kde.Sdk
rename-icon: deskflow
rename-desktop-file: deskflow.desktop
modules:
- name: openssl
buildsystem: simple
build-commands:
- "./config --prefix=/var/run/host/usr/local/ssl"
- "make"
- "make install_sw"
sources:
- type: archive
url: https://github.com/openssl/openssl/archive/OpenSSL_1_1_1n.tar.gz
sha256: 6b2d2440ced8c802aaa61475919f0870ec556694c466ebea460e35ea2b14839e
- name: libnotify
buildsystem: meson
config-opts:
- "-Dman=false"
- "-Dgtk_doc=false"
sources:
- type: git
url: https://gitlab.gnome.org/GNOME/libnotify.git
- name: deskflow
buildsystem: cmake-ninja
config-opts:
- "-DCMAKE_BUILD_TYPE=Release"
sources:
- type: dir
path: ../
- type: patch
path: flatpak-desktop.patch
command: deskflow
finish-args:
- "--share=ipc"
- "--socket=x11"
- "--share=network"
- "--device=dri"
- "--talk-name=org.a11y.*"
- "--filesystem=host"

View File

@ -1,14 +0,0 @@
diff --git a/res/deskflow.desktop b/res/deskflow.desktop
index fa987bdf..9513dbf3 100644
--- a/res/deskflow.desktop
+++ b/res/deskflow.desktop
@@ -3,8 +3,7 @@ Type=Application
Version=1.0
Name=Deskflow
Comment=Keyboard and mouse sharing solution
-Path=/usr/bin
-Exec=/usr/bin/deskflow
+Exec=
Icon=deskflow
Terminal=false
Categories=Utility;

View File

@ -1,31 +0,0 @@
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>English</string>
<key>CFBundleDisplayName</key>
<string>@DESKFLOW_APP_NAME@</string>
<key>CFBundleExecutable</key>
<string>@DESKFLOW_APP_ID@</string>
<key>CFBundleIconFile</key>
<string>@DESKFLOW_APP_NAME@.icns</string>
<key>CFBundleIdentifier</key>
<string>@DESKFLOW_APP_ID@</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>@DESKFLOW_APP_NAME@</string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleSignature</key>
<string>@DESKFLOW_MAC_BUNDLE_CODE@</string>
<key>CFBundleShortVersionString</key>
<string>@DESKFLOW_VERSION@</string>
<key>CFBundleVersion</key>
<string>@DESKFLOW_VERSION@</string>
<key>NSHumanReadableCopyright</key>
<string>© 2012-@DESKFLOW_BUILD_YEAR@ Symless Ltd</string>
<key>LSMinimumSystemVersion</key>
<string>10.9.0</string>
</dict>
</plist>

View File

@ -1 +0,0 @@
APPL@DESKFLOW_MAC_BUNDLE_CODE@

View File

@ -1,69 +0,0 @@
# -*- coding: utf-8 -*-
# Example: https://dmgbuild.readthedocs.io/en/latest/example.html
from __future__ import unicode_literals
import os.path
app = defines.get("app")
app_basename = os.path.basename(app)
format = defines.get("format", "UDBZ")
size = defines.get("size", None)
files = [app]
symlinks = {"Applications": "/Applications"}
icon = os.path.join(app, "Contents/Resources/Volume.icns")
icon_locations = {
app_basename: (144, 190),
"Applications": (455, 190),
}
background = os.path.join(app, "Contents/Resources/Background.tiff")
show_status_bar = False
show_tab_view = False
show_toolbar = False
show_pathbar = False
show_sidebar = False
sidebar_width = 180
window_rect = ((200, 120), (620, 420))
default_view = "icon-view"
show_icon_preview = False
include_icon_view_settings = "auto"
include_list_view_settings = "auto"
arrange_by = None
grid_offset = (0, 0)
grid_spacing = 100
scroll_position = (0, 0)
label_pos = "bottom"
text_size = 16
icon_size = 100
list_icon_size = 16
list_text_size = 12
list_scroll_position = (0, 0)
list_sort_by = "name"
list_use_relative_dates = True
list_calculate_all_sizes = (False,)
list_columns = ("name", "date-modified", "size", "kind", "date-added")
list_column_widths = {
"name": 300,
"date-modified": 181,
"date-created": 181,
"date-added": 181,
"date-last-opened": 181,
"size": 97,
"kind": 115,
"label": 100,
"version": 75,
"comments": 300,
}
list_column_sort_directions = {
"name": "ascending",
"date-modified": "descending",
"date-created": "descending",
"date-added": "descending",
"date-last-opened": "descending",
"size": "descending",
"kind": "ascending",
"label": "ascending",
"version": "ascending",
"comments": "ascending",
}

View File

@ -1,33 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<Fragment>
<UI>
<Dialog Id="AppBrowseDlg" Width="370" Height="270" Title="!(loc.BrowseDlg_Title)">
<Control Id="PathEdit" Type="PathEdit" X="25" Y="202" Width="320" Height="18" Property="_BrowseProperty" Indirect="yes" />
<Control Id="OK" Type="PushButton" X="240" Y="243" Width="56" Height="17" Default="yes" Text="!(loc.WixUIOK)">
<Publish Event="SetTargetPath" Value="[_BrowseProperty]">1</Publish>
<Publish Event="EndDialog" Value="Return">1</Publish>
</Control>
<Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Cancel="yes" Text="!(loc.WixUICancel)">
<Publish Event="Reset" Value="0">1</Publish>
<Publish Event="EndDialog" Value="Return">1</Publish>
</Control>
<Control Id="ComboLabel" Type="Text" X="25" Y="58" Width="44" Height="10" TabSkip="no" Text="!(loc.BrowseDlgComboLabel)" />
<Control Id="DirectoryCombo" Type="DirectoryCombo" X="70" Y="55" Width="220" Height="80" Property="_BrowseProperty" Indirect="yes" Fixed="yes" Remote="yes">
<Subscribe Event="IgnoreChange" Attribute="IgnoreChange" />
</Control>
<Control Id="WixUI_Bmp_Up" Type="PushButton" X="298" Y="55" Width="19" Height="19" ToolTip="!(loc.BrowseDlgWixUI_Bmp_UpTooltip)" Icon="yes" FixedSize="yes" IconSize="16" Text="!(loc.BrowseDlgWixUI_Bmp_Up)">
<Publish Event="DirectoryListUp" Value="0">1</Publish>
</Control>
<Control Id="NewFolder" Type="PushButton" X="325" Y="55" Width="19" Height="19" ToolTip="!(loc.BrowseDlgNewFolderTooltip)" Icon="yes" FixedSize="yes" IconSize="16" Text="!(loc.BrowseDlgNewFolder)">
<Publish Event="DirectoryListNew" Value="0">1</Publish>
</Control>
<Control Id="DirectoryList" Type="DirectoryList" X="25" Y="83" Width="320" Height="98" Property="_BrowseProperty" Sunken="yes" Indirect="yes" TabSkip="no" />
<Control Id="PathLabel" Type="Text" X="25" Y="190" Width="320" Height="10" TabSkip="no" Text="!(loc.BrowseDlgPathLabel)" />
<Control Id="BannerBitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="44" TabSkip="no" Text="!(loc.BrowseDlgBannerBitmap)" />
<Control Id="BottomLine" Type="Line" X="0" Y="234" Width="370" Height="0" />
<Control Id="Title" Type="Text" X="15" Y="15" Width="200" Height="15" Transparent="yes" NoPrefix="yes" Text="!(loc.BrowseDlgTitle)" />
</Dialog>
</UI>
</Fragment>
</Wix>

Some files were not shown because too many files have changed in this diff Show More