49 Commits

Author SHA1 Message Date
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
121 changed files with 754 additions and 2869 deletions

View File

@ -21,8 +21,8 @@ runs:
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 }}.0_win64.msi"
$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 }}" `

View File

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

View File

@ -2,7 +2,7 @@
# Runs on all platforms (Windows, macOS, and Linux)
# for all events (pull request, release, and schedule).
name: CI
name: Continuous Integration
on:
push:
@ -61,7 +61,7 @@ jobs:
# Quality gate to allow PR merge, used in the branch protection rules.
ci-passed:
runs-on: ubuntu-latest
needs: [test-results, unix]
needs: [test-results, unix, flatpak]
steps:
- run: echo "✅ CI passed" > $GITHUB_STEP_SUMMARY
@ -298,6 +298,34 @@ jobs:
export QT_QPA_PLATFORM=offscreen
./build/bin/unittests
./build/bin/integtests || true
flatpak:
needs: lint-clang
runs-on: ubuntu-latest
container:
image: bilelmoussaoui/flatpak-github-actions:kde-6.7
options: --privileged
steps:
- name: Check out repository
uses: sithlord48/fancy-checkout@v1.0.0
- run: git config --global protocol.file.allow always
- name: Get version
uses: ./.github/actions/get-version
- uses: flatpak/flatpak-github-actions/flatpak-builder@v6
name: "Build"
with:
bundle: deskflow-${{env.DESKFLOW_PACKAGE_VERSION}}-x86_64.flatpak
manifest-path: deploy/dist/flatpak/org.deskflow.deskflow.yml
cache-key: flatpak-builder-${{ github.sha }}
upload-artifact: false
- name: Upload
uses: actions/upload-artifact@v4
with:
name: package-${{ env.PACKAGE_PREFIX }}-flatpak
path: ${{github.workspace}}/deskflow[-_]*.flatpak
release:
needs: ci-passed

View File

@ -24,7 +24,7 @@ cmake_minimum_required(VERSION 3.24)
# Fallback for when git can not be found
set(DESKFLOW_VERSION_MAJOR 1)
set(DESKFLOW_VERSION_MINOR 17)
set(DESKFLOW_VERSION_PATCH 1)
set(DESKFLOW_VERSION_PATCH 2)
set(DESKFLOW_VERSION_TWEAK 0)
# Get the version from git if it's a git repository
@ -89,5 +89,6 @@ configure_packaging()
add_subdirectory(doc)
add_subdirectory(src)
add_subdirectory(deploy)
post_config_all()

View File

@ -15,7 +15,7 @@ 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.
[![Downloads: Stable Release](https://img.shields.io/github/downloads/deskflow/deskflow/v1.17.0/total?style=for-the-badge&logo=github&label=Download%20Stable)](https://github.com/deskflow/deskflow/releases/tag/v1.17.0)      [![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)
[![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)      [![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)
To use Deskflow you can use one of our [packages](https://github.com/deskflow/deskflow/releases), install `deskflow` (if available in your package repository), or [build it](#build-quick-start) yourself from source.
@ -31,7 +31,7 @@ To use Deskflow you can use one of our [packages](https://github.com/deskflow/de
[![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)
[![CI](https://github.com/deskflow/deskflow/actions/workflows/ci.yml/badge.svg)](https://github.com/deskflow/deskflow/actions/workflows/ci.yml)
[![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)
@ -96,7 +96,7 @@ To add our tap, run:
brew tap deskflow/homebrew-tap
```
Then install either:
- Stable: `brew instal deskflow`
- Stable: `brew install deskflow`
- Continuous: `brew install deskflow-dev`

View File

@ -95,10 +95,10 @@ macro(post_config_all)
add_dependencies(
run_post_build
${GUI_BINARY_NAME}
${CLIENT_BINARY_NAME}
${SERVER_BINARY_NAME}
${DAEMON_BINARY_NAME})
deskflow
deskflow-client
deskflow-server
deskflow-daemon)
endif()
endmacro()

View File

@ -16,7 +16,6 @@
macro(configure_definitions)
configure_meta()
configure_ninja()
configure_options()
@ -52,124 +51,6 @@ macro(configure_definitions)
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")
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}")
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}")
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."

View File

@ -338,9 +338,6 @@ macro(configure_windows_libs)
/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_openssl()
endmacro()
@ -354,9 +351,6 @@ macro(configure_qt)
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)

View File

@ -13,10 +13,10 @@ 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_NAME ${CMAKE_PROJECT_NAME})
set(CPACK_PACKAGE_CONTACT "Deskflow <maintainers@deskflow.org>")
set(CPACK_PACKAGE_DESCRIPTION ${CMAKE_PROJECT_DESCRIPTION})
set(CPACK_PACKAGE_VENDOR ${DESKFLOW_AUTHOR_NAME})
set(CPACK_PACKAGE_VENDOR "Deskflow")
set(CPACK_RESOURCE_FILE_LICENSE ${PROJECT_SOURCE_DIR}/LICENSE)
set(CPACK_PACKAGE_VERSION ${CMAKE_PROJECT_VERSION})
@ -62,7 +62,7 @@ macro(configure_windows_packaging)
"8F57C657-BC87-45E6-840E-41242A93511C"
CACHE STRING "GUID for 32-bit MSI installer")
configure_files(${PROJECT_SOURCE_DIR}/res/dist/wix
configure_files(${PROJECT_SOURCE_DIR}/deploy/dist/wix
${PROJECT_BINARY_DIR}/installer)
if(CMAKE_SYSTEM_PROCESSOR MATCHES AMD64)
@ -83,18 +83,15 @@ macro(configure_mac_packaging)
set(CMAKE_INSTALL_RPATH
"@loader_path/../Libraries;@loader_path/../Frameworks")
set(DESKFLOW_BUNDLE_SOURCE_DIR
${PROJECT_SOURCE_DIR}/res/dist/mac/bundle
${PROJECT_SOURCE_DIR}/deploy/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_DIR ${PROJECT_BINARY_DIR}/bundle/Deskflow.app)
set(DESKFLOW_BUNDLE_BINARY_DIR ${DESKFLOW_BUNDLE_DIR}/Contents/MacOS)
configure_files(${DESKFLOW_BUNDLE_SOURCE_DIR} ${DESKFLOW_BUNDLE_DIR})
set(OS_STRING "macos-${CMAKE_SYSTEM_PROCESSOR}")
file(RENAME ${DESKFLOW_BUNDLE_DIR}/Contents/Resources/App.icns
${DESKFLOW_BUNDLE_DIR}/Contents/Resources/${DESKFLOW_APP_NAME}.icns)
endmacro()
#
@ -176,7 +173,6 @@ macro(configure_linux_packaging)
# This is used in package names
configure_linux_package_name()
set(CPACK_DEBIAN_PACKAGE_MAINTAINER ${DESKFLOW_MAINTAINER})
set(CPACK_DEBIAN_PACKAGE_SECTION "utils")
set(CPACK_DEBIAN_PACKAGE_SHLIBDEPS ON)
@ -188,26 +184,6 @@ macro(configure_linux_packaging)
# 12), so we must add it manually.
set(CPACK_DEBIAN_PACKAGE_DEPENDS "qt6-qpa-plugins")
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()
#

41
deploy/CMakeLists.txt Normal file
View File

@ -0,0 +1,41 @@
# SPDX-FileCopyrightText: 2024 Chris Rizzitello <sithlord48@gmail.com>
# SPDX-License-Identifier: MIT
# Handle Pre install Items
if(WIN32)
# Configure the windows version rc file
configure_file(
${CMAKE_CURRENT_LIST_DIR}/version.rc.in
${PROJECT_BINARY_DIR}/src/version.rc @ONLY
)
elseif(NOT APPLE)
# Install our desktop file
install(
FILES ${CMAKE_CURRENT_LIST_DIR}/org.deskflow.deskflow.desktop
DESTINATION share/applications
)
# Install our icon
install(
FILES ${CMAKE_CURRENT_LIST_DIR}/deskflow.png
DESTINATION share/icons/hicolor/512x512/apps/
RENAME org.deskflow.deskflow.png
)
# Install our metainfo
install(
FILES ${CMAKE_CURRENT_SOURCE_DIR}/org.deskflow.deskflow.metainfo.xml
DESTINATION share/metainfo/
)
# Prepare PKGBUILD for Arch Linux
configure_file(
${CMAKE_CURRENT_LIST_DIR}/dist/arch/PKGBUILD.in
${CMAKE_BINARY_DIR}/PKGBUILD
@ONLY
)
endif()

BIN
deploy/deskflow.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

View File

@ -1,10 +1,10 @@
# Maintainer: @DESKFLOW_MAINTAINER@
# Maintainer: Deskflow Developers
pkgname=@DESKFLOW_APP_ID@
pkgname=deskflow
pkgver=@DESKFLOW_VERSION@
pkgrel=1
pkgdesc="Mouse and keyboard sharing utility"
url='@DESKFLOW_WEBSITE_URL@'
url='https://deskflow.org'
arch=('i686' 'x86_64' 'armv6h' 'armv7h' 'aarch64')
license=('GPL-2.0-only')
depends=(

View File

@ -0,0 +1,115 @@
app-id: org.deskflow.deskflow
runtime: org.kde.Platform
runtime-version: "6.8"
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/debug
- /lib/girepository-1.0
modules:
- name: python3-attrs
buildsystem: simple
build-commands:
- pip3 install --verbose --exists-action=i --no-index --find-links="file://${PWD}"
--prefix=${FLATPAK_DEST} --no-build-isolation attrs
sources:
- type: file
url: https://files.pythonhosted.org/packages/e0/44/827b2a91a5816512fcaf3cc4ebc465ccd5d598c45cefa6703fcf4a79018f/attrs-23.2.0-py3-none-any.whl
sha256: 99b87a485a5820b23b879f04c2305b44b951b502fd64be915879d77a7e8fc6f1
cleanup:
- '*'
- 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.3.0
commit: 997b7c0f37faea4f8bae59613c8f27370925d5b0
- 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.8.1
commit: 26c15008cbe579f57f89468384f8efc033f25f6f
- name: puixml
buildsystem: cmake-ninja
sources:
- type: git
url: https://github.com/zeux/pugixml
tag: v1.14
commit: db78afc2b7d8f043b4bc6b185635d949ea2ed2a8
- name: cli11
buildsystem: cmake-ninja
config-opts:
- -DCLI11_BUILD_TESTS=OFF
sources:
- type: git
url: https://github.com/CLIUtils/CLI11
tag: v2.4.2
commit: 6c7b07a878ad834957b98d0f9ce1dbe0cb204fc9
- 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

@ -4,21 +4,21 @@
<key>CFBundleDevelopmentRegion</key>
<string>English</string>
<key>CFBundleDisplayName</key>
<string>@DESKFLOW_APP_NAME@</string>
<string>Deskflow</string>
<key>CFBundleExecutable</key>
<string>@DESKFLOW_APP_ID@</string>
<string>deskflow</string>
<key>CFBundleIconFile</key>
<string>@DESKFLOW_APP_NAME@.icns</string>
<string>Deskflow.icns</string>
<key>CFBundleIdentifier</key>
<string>@DESKFLOW_APP_ID@</string>
<string>org.deskflow.deskflow</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>@DESKFLOW_APP_NAME@</string>
<string>Deskflow</string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleSignature</key>
<string>@DESKFLOW_MAC_BUNDLE_CODE@</string>
<string>DFLW</string>
<key>CFBundleShortVersionString</key>
<string>@DESKFLOW_VERSION@</string>
<key>CFBundleVersion</key>

View File

@ -0,0 +1 @@
APPLDFLW

View File

@ -7,7 +7,7 @@
<Fragment>
<UI Id="AppWelcome">
<Property Id="AppWelcomeBackground">welcome_background</Property>
<Binary Id="welcome_background" SourceFile="$(var.ResDir)\dist\wix\images\welcome_background.png"/>
<Binary Id="welcome_background" SourceFile="$(var.DeployResDir)\dist\wix\images\welcome_background.png"/>
<Dialog Id="AppWelcome" Width="370" Height="270" Title="!(loc.WelcomeDlg_Title)">
<Control Id="Next" Type="PushButton" X="236" Y="243" Width="56" Height="17" Default="yes" Text="!(loc.WixUINext)">

View File

@ -1,12 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<Include>
<?define AppId="@DESKFLOW_APP_ID@"?>
<?define Name="@DESKFLOW_APP_NAME@"?>
<?define AppId="deskflow"?>
<?define Name="Deskflow"?>
<?define Version="@DESKFLOW_VERSION@"?>
<?define Author="@DESKFLOW_AUTHOR_NAME@"?>
<?define Author="Deskflow"?>
<?define BinDir="@CMAKE_RUNTIME_OUTPUT_DIRECTORY@"?>
<?define ProjectResDir="@DESKFLOW_PROJECT_RES_DIR@"?>
<?define ResDir="@DESKFLOW_RES_DIR@"?>
<?define ProjectIcon="@CMAKE_SOURCE_DIR@/src/gui/src/deskflow.ico"?>
<?define DeployResDir="@CMAKE_SOURCE_DIR@/deploy"?>
<?define QtDir="@QT_PATH@"?>
<?define QtBinDir="$(var.QtDir)\bin"?>
<?if $(var.Platform) = "x64"?>
@ -21,9 +21,9 @@
<?define QtPluginsPath="$(var.QtDir)\plugins"?>
<?define OpenSslExeDir="@OPENSSL_EXE_DIR@"?>
<?define OpenSslDllDir="@OPENSSL_ROOT_DIR@/bin"?>
<?define GuiBin="@GUI_BINARY_NAME@.exe"?>
<?define ServerBin="@SERVER_BINARY_NAME@.exe"?>
<?define ClientBin="@CLIENT_BINARY_NAME@.exe"?>
<?define CoreBin="@CORE_BINARY_NAME@.exe"?>
<?define DaemonBin="@DAEMON_BINARY_NAME@.exe"?>
<?define GuiBin="deskflow.exe"?>
<?define ServerBin="deskflow-server.exe"?>
<?define ClientBin="deskflow-client.exe"?>
<?define CoreBin="deskflow-core.exe"?>
<?define DaemonBin="deskflow-daemon.exe"?>
</Include>

View File

@ -38,16 +38,16 @@
<Condition><![CDATA[Installed OR (VersionNT >= 602)]]></Condition>
</Component>
<?if $(var.Platform) = x64 ?>
<Merge Id="VC_Redist" SourceFile="$(var.ProjectResDir)\dist\wix\msm\Microsoft_VC142_CRT_x64.msm" DiskId="1" Language="0"/>
<Merge Id="VC_Redist" SourceFile="$(var.DeployResDir)\dist\wix\msm\Microsoft_VC142_CRT_x64.msm" DiskId="1" Language="0"/>
<?else ?>
<Merge Id="VC_Redist" SourceFile="$(var.ProjectResDir)\dist\wix\msm\Microsoft_VC142_CRT_x86.msm" DiskId="1" Language="0"/>
<Merge Id="VC_Redist" SourceFile="$(var.DeployResDir)\dist\wix\msm\Microsoft_VC142_CRT_x86.msm" DiskId="1" Language="0"/>
<?endif ?>
</DirectoryRef>
<Property Id="CommonBackground">CommonBackground</Property>
<Binary Id="CommonBackground" SourceFile="$(var.ResDir)\dist\wix\images\common_background.png"/>
<Icon Id="AppIcon" SourceFile="$(var.ResDir)/app.ico"/>
<WixVariable Id="WixUIBannerBmp" Value="$(var.ResDir)\dist\wix\images\banner.png"/>
<WixVariable Id="WixUIDialogBmp" Value="$(var.ResDir)\dist\wix\images\dialog.png"/>
<Binary Id="CommonBackground" SourceFile="$(var.DeployResDir)\dist\wix\images\common_background.png"/>
<Icon Id="AppIcon" SourceFile="$(var.ProjectIcon)"/>
<WixVariable Id="WixUIBannerBmp" Value="$(var.DeployResDir)\dist\wix\images\banner.png"/>
<WixVariable Id="WixUIDialogBmp" Value="$(var.DeployResDir)\dist\wix\images\dialog.png"/>
<Property Id="ARPPRODUCTICON" Value="AppIcon"/>
<Property Id="WIXUI_INSTALLDIR" Value="INSTALLFOLDER"/>
<Property Id="LEGACY_UNINSTALL_EXISTS">
@ -99,7 +99,7 @@
<Component Guid="BAC8149B-6287-45BF-9C27-43D71ED40214" Id="Gui">
<File Id="GuiProgram" KeyPath="yes" Source="$(var.BinDir)/$(var.GuiBin)">
<Shortcut Advertise="yes" Directory="ProgramMenuFolder" Icon="$(var.GuiBin)" Id="GuiShortcut" Name="$(var.Name)">
<Icon Id="$(var.GuiBin)" SourceFile="$(var.ResDir)/app.ico"/>
<Icon Id="$(var.GuiBin)" SourceFile="$(var.ProjectIcon)"/>
</Shortcut>
<fire:FirewallException Id="GuiFirewallException" IgnoreFailure="yes" Name="$(var.Name)" Scope="any"/>
</File>

View File

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 11 KiB

View File

Before

Width:  |  Height:  |  Size: 21 KiB

After

Width:  |  Height:  |  Size: 21 KiB

View File

Before

Width:  |  Height:  |  Size: 94 KiB

After

Width:  |  Height:  |  Size: 94 KiB

View File

Before

Width:  |  Height:  |  Size: 154 KiB

After

Width:  |  Height:  |  Size: 154 KiB

View File

@ -1,11 +1,10 @@
[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,260 @@
<?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_name>Deskflow Developers</developer_name>
<summary>Software Keyboard and mouse sharing</summary>
<description>
<p>
Use your keyboard and mouse to control other machines on the network or be controle
</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://github.com/user-attachments/assets/883660dc-f3f5-4b69-8821-a079a58d3882</image>
</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.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-7" urgency="high">
<description>
<p>This stable Release Has a very long chagelog 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>

View File

@ -12,14 +12,14 @@ https://learn.microsoft.com/en-us/windows/win32/menurc/versioninfo-resource?redi
#define VER_PRODUCTVERSION @DESKFLOW_VERSION_MS_CSV@
#define VER_PRODUCTVERSION_STR "@DESKFLOW_VERSION@\0"
#define VER_COMPANYNAME_STR "@DESKFLOW_AUTHOR_NAME@\0"
#define VER_FILEDESCRIPTION_STR "@DESKFLOW_APP_NAME@\0"
#define VER_INTERNALNAME_STR "@DESKFLOW_APP_NAME@\0"
#define VER_COMPANYNAME_STR "Deskflow\0"
#define VER_FILEDESCRIPTION_STR "Deskflow\0"
#define VER_INTERNALNAME_STR "Deskflow\0"
#define VER_LEGALCOPYRIGHT_STR "© 2024 Deskflow Developers\0"
#define VER_LEGALTRADEMARKS1_STR "All Rights Reserved\0"
#define VER_LEGALTRADEMARKS2_STR "\0"
#define VER_ORIGINALFILENAME_STR "\0"
#define VER_PRODUCTNAME_STR "@DESKFLOW_APP_NAME@\0"
#define VER_PRODUCTNAME_STR "Deskflow\0"
VS_VERSION_INFO VERSIONINFO
FILEVERSION VER_FILEVERSION

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,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 +0,0 @@
APPL@DESKFLOW_MAC_BUNDLE_CODE@

File diff suppressed because it is too large Load Diff

View File

@ -1 +0,0 @@
IDI_ICON1 ICON DISCARDABLE "../../app.ico"

View File

@ -23,7 +23,7 @@ CERT_P12_ENV = "APPLE_P12_CERTIFICATE"
NOTARY_USER_ENV = "APPLE_NOTARY_USER"
CODESIGN_ENV = "APPLE_CODESIGN_ID"
SHELL_RC = "~/.zshrc"
SETTINGS_FILE = "res/dist/mac/dmgbuild/settings.py"
SETTINGS_FILE = "deploy/dist/mac/dmgbuild/settings.py"
SECURITY_PATH = "/usr/bin/security"
SUDO_PATH = "/usr/bin/sudo"
NOTARYTOOL_PATH = "/usr/bin/notarytool"

View File

@ -15,7 +15,7 @@
# 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(target ${CORE_BINARY_NAME})
set(target deskflow-core)
add_executable(${target} "${target}.cpp")
if(WIN32)

View File

@ -29,9 +29,9 @@
void showHelp()
{
std::cout << "Usage: " CORE_BINARY_NAME " <server | client> [...options]" << std::endl;
std::cout << "server - start as a server (" << SERVER_BINARY_NAME << ")" << std::endl;
std::cout << "client - start as a client (" << CLIENT_BINARY_NAME << ")" << std::endl;
std::cout << "use " CORE_BINARY_NAME " <server|client> --help for more information." << std::endl;
std::cout << "server - start as a server ( deskflow-server)" << std::endl;
std::cout << "client - start as a client ( deslflow-client)" << std::endl;
std::cout << "use deskflow-core <server|client> --help for more information." << std::endl;
}
bool isServer(int argc, char **argv)

View File

@ -15,14 +15,13 @@
# 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(client_source_name "deskflowc")
set(target ${CLIENT_BINARY_NAME})
set(target deskflow-client)
if(WIN32)
set(PLATFORM_SOURCES
${client_source_name}.exe.manifest
${client_source_name}.ico
${client_source_name}.rc
deskflowc.exe.manifest
deskflowc.ico
deskflowc.rc
MSWindowsClientTaskBarReceiver.cpp
MSWindowsClientTaskBarReceiver.h
resource.h
@ -44,7 +43,7 @@ elseif(UNIX)
)
endif()
add_executable(${target} ${PLATFORM_SOURCES} "${client_source_name}.cpp")
add_executable(${target} ${PLATFORM_SOURCES} deskflowc.cpp)
target_link_libraries(
${target}

View File

@ -17,7 +17,7 @@
# Daemon is only needed on Windows for elevating processes to deal with UAC.
if(WIN32)
set(target ${DAEMON_BINARY_NAME})
set(target deskflow-daemon)
add_executable(${target} WIN32
deskflowd.cpp
"${PROJECT_BINARY_DIR}/src/version.rc"

View File

@ -15,14 +15,13 @@
# 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(server_source_name "deskflows")
set(target ${SERVER_BINARY_NAME})
set(target deskflow-server)
if(WIN32)
set(PLATFORM_SOURCES
${server_source_name}.exe.manifest
${server_source_name}.ico
${server_source_name}.rc
deskflows.exe.manifest
deskflows.ico
deskflows.rc
MSWindowsServerTaskBarReceiver.cpp
MSWindowsServerTaskBarReceiver.h
resource.h
@ -44,7 +43,7 @@ elseif(UNIX)
)
endif()
add_executable(${target} ${PLATFORM_SOURCES} "${server_source_name}.cpp")
add_executable(${target} ${PLATFORM_SOURCES} deskflows.cpp)
target_link_libraries(
${target}

View File

@ -13,19 +13,17 @@
# 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(target ${GUI_BINARY_NAME})
set(target deskflow)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_AUTOUIC ON)
set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(res_dir ${GUI_RES_DIR})
set(qrc_file ${GUI_QRC_FILE})
file(
GLOB
sources
res/deskflow.qrc
src/*.cpp
src/*.h
src/dialogs/*.h
@ -35,7 +33,7 @@ file(
file(GLOB ui_files src/*.ui src/dialogs/*.ui)
if(WIN32)
set(rc_files ${res_dir}/win/app.rc ${PROJECT_BINARY_DIR}/src/version.rc)
set(rc_files src/deskflow.rc ${PROJECT_BINARY_DIR}/src/version.rc)
endif()
# regular exe headers
@ -48,7 +46,7 @@ include_directories(${PROJECT_BINARY_DIR}/src/lib/gui/gui_autogen/include)
# generated includes
include_directories(${PROJECT_BINARY_DIR}/config)
add_executable(${target} WIN32 ${sources} ${ui_files} ${rc_files} ${qrc_file})
add_executable(${target} WIN32 ${sources} ${ui_files} ${rc_files})
target_link_libraries(
${target}

View File

@ -1,17 +1,17 @@
<RCC>
<qresource>
<file>icons/64x64/video-display.png</file>
<file>icons/64x64/user-trash.png</file>
<file>image/logo-light.png</file>
<file>image/logo-dark.png</file>
<file>icons/64x64/copy-dark.png</file>
<file>icons/64x64/copy-light.png</file>
<file>icons/64x64/folder.png</file>
<file>icons/64x64/padlock.png</file>
<file>icons/64x64/user-trash.png</file>
<file>icons/64x64/video-display.png</file>
<file>icons/128x128/tray.png</file>
<file>icons/128x128/tray-dark.png</file>
<file>icons/128x128/tray-light.png</file>
<file>icons/128x128/tray.png</file>
<file>image/welcome.png</file>
<file>icons/64x64/folder.png</file>
<file>icons/64x64/copy-light.png</file>
<file>icons/64x64/copy-dark.png</file>
<file>image/logo-light.png</file>
<file>image/logo-dark.png</file>
<file>image/placeholder.png</file>
<file>image/welcome.png</file>
</qresource>
</RCC>

View File

Before

Width:  |  Height:  |  Size: 4.2 KiB

After

Width:  |  Height:  |  Size: 4.2 KiB

View File

Before

Width:  |  Height:  |  Size: 4.4 KiB

After

Width:  |  Height:  |  Size: 4.4 KiB

View File

Before

Width:  |  Height:  |  Size: 7.5 KiB

After

Width:  |  Height:  |  Size: 7.5 KiB

View File

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 1.2 KiB

View File

Before

Width:  |  Height:  |  Size: 1.8 KiB

After

Width:  |  Height:  |  Size: 1.8 KiB

View File

Before

Width:  |  Height:  |  Size: 919 B

After

Width:  |  Height:  |  Size: 919 B

View File

Before

Width:  |  Height:  |  Size: 1.8 KiB

After

Width:  |  Height:  |  Size: 1.8 KiB

View File

Before

Width:  |  Height:  |  Size: 3.7 KiB

After

Width:  |  Height:  |  Size: 3.7 KiB

View File

Before

Width:  |  Height:  |  Size: 2.5 KiB

After

Width:  |  Height:  |  Size: 2.5 KiB

View File

Before

Width:  |  Height:  |  Size: 6.1 KiB

After

Width:  |  Height:  |  Size: 6.1 KiB

View File

Before

Width:  |  Height:  |  Size: 5.7 KiB

After

Width:  |  Height:  |  Size: 5.7 KiB

View File

Before

Width:  |  Height:  |  Size: 1.6 KiB

After

Width:  |  Height:  |  Size: 1.6 KiB

View File

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 11 KiB

View File

@ -1,30 +0,0 @@
/*
* Deskflow -- mouse and keyboard sharing utility
* Copyright (C) 2012 Symless Ltd.
* Copyright (C) 2008 Volker Lanz (vl@fidra.de)
*
* 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/>.
*/
#include "DeskflowApplication.h"
#include "MainWindow.h"
DeskflowApplication::DeskflowApplication(int &argc, char **argv) : QApplication(argc, argv)
{
if (qEnvironmentVariable("XDG_CURRENT_DESKTOP") != QLatin1String("KDE")) {
// causes dark mode to be used on some OS (e.g. Windows)
setStyle("fusion");
}
}

View File

@ -1,30 +0,0 @@
/*
* Deskflow -- mouse and keyboard sharing utility
* Copyright (C) 2012 Symless Ltd.
* Copyright (C) 2008 Volker Lanz (vl@fidra.de)
*
* 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/>.
*/
#pragma once
#include <QApplication>
class QSessionManager;
class DeskflowApplication : public QApplication
{
public:
DeskflowApplication(int &argc, char **argv);
~DeskflowApplication() override = default;
};

View File

@ -142,7 +142,7 @@ void MainWindow::setupControls()
{
setWindowTitle(kAppName);
ui->m_pActionHelp->setText(DESKFLOW_HELP_TEXT);
ui->m_pActionHelp->setText(tr("Report a Bug"));
secureSocket(false);
updateLocalFingerprint();
@ -528,6 +528,7 @@ void MainWindow::open()
if (!m_AppConfig.enableUpdateCheck().has_value()) {
m_AppConfig.setEnableUpdateCheck(messages::showUpdateCheckOption(this));
m_ConfigScopes.save();
}
if (m_AppConfig.enableUpdateCheck().value()) {
@ -775,19 +776,6 @@ void MainWindow::showFirstConnectedMessage()
messages::showFirstConnectedMessage(this, m_AppConfig.closeToTray(), m_AppConfig.enableService(), isServer);
}
void MainWindow::showDevThanksMessage()
{
if (!m_AppConfig.showDevThanks()) {
qDebug("skipping dev thanks message");
return;
}
m_AppConfig.setShowDevThanks(false);
m_ConfigScopes.save();
messages::showDevThanks(this, kAppName);
}
void MainWindow::onCoreProcessSecureSocket(bool enabled)
{
secureSocket(enabled);
@ -896,7 +884,6 @@ void MainWindow::onCoreConnectionStateChanged(CoreConnectionState state)
secureSocket(false);
} else if (isVisible()) {
showFirstConnectedMessage();
showDevThanksMessage();
}
}

View File

@ -26,8 +26,8 @@
#include <QThread>
#include "ServerConfig.h"
#include "TrayIcon.h"
#include "common/ipc.h"
#include "gui/TrayIcon.h"
#include "gui/VersionChecker.h"
#include "gui/config/AppConfig.h"
#include "gui/config/ConfigScopes.h"
@ -194,7 +194,6 @@ private:
void resizeEvent(QResizeEvent *event) override;
void moveEvent(QMoveEvent *event) override;
void showFirstConnectedMessage();
void showDevThanksMessage();
void updateStatus();
void showAndActivate();

View File

@ -501,7 +501,7 @@
<string/>
</property>
<property name="pixmap">
<pixmap resource="../../../../res/gui/app.qrc">:/icons/64x64/padlock.png</pixmap>
<pixmap resource="../../../../res/gui/deskflow.qrc">:/icons/64x64/padlock.png</pixmap>
</property>
<property name="minimumSize">
<size>

View File

@ -24,7 +24,7 @@
#include "gui/config/Screen.h"
const QString ScreenSetupModel::m_MimeType = "application/x-" DESKFLOW_APP_ID "-screen";
const QString ScreenSetupModel::m_MimeType = "application/x-deskflow-screen";
ScreenSetupModel::ScreenSetupModel(ScreenList &screens, int numColumns, int numRows)
: QAbstractTableModel(NULL),

View File

@ -12,6 +12,7 @@
#include <QFormLayout>
#include <QPushButton>
#include "common/constants.h"
#include "gui/config/AppConfig.h"
#include "gui/styles.h"
#include "gui/validators/ScreenNameValidator.h"
@ -23,7 +24,7 @@ SetupWizard::SetupWizard(AppConfig &appConfig)
m_lineName{new QLineEdit(this)},
m_btnApply{new QPushButton(tr("Continue"), this)}
{
setWindowTitle(tr("Setup %1").arg(DESKFLOW_APP_NAME));
setWindowTitle(tr("Setup %1").arg(kAppName));
setFixedSize(740, 550);

View File

@ -17,8 +17,8 @@
#include "TrayIcon.h"
#include "Logger.h"
#include "common/constants.h"
#include "gui/Logger.h"
namespace deskflow::gui {

View File

Before

Width:  |  Height:  |  Size: 56 KiB

After

Width:  |  Height:  |  Size: 56 KiB

1
src/gui/src/deskflow.rc Normal file
View File

@ -0,0 +1 @@
IDI_ICON1 ICON DISCARDABLE "deskflow.ico"

View File

@ -19,6 +19,7 @@
#include "ServerConfigDialog.h"
#include "ui_ServerConfigDialog.h"
#include "common/constants.h"
#include "dialogs/ActionDialog.h"
#include "dialogs/HotkeyDialog.h"
#include "dialogs/ScreenSettingsDialog.h"
@ -44,6 +45,10 @@ ServerConfigDialog::ServerConfigDialog(QWidget *parent, ServerConfig &config, Ap
{
ui->setupUi(this);
const auto folderIcon =
QIcon::fromTheme(QIcon::ThemeIcon::DocumentOpen, QIcon(QStringLiteral(":/icons/64x64/folder.png")));
ui->m_pButtonBrowseConfigFile->setIcon(folderIcon);
// force the first tab, since qt creator sets the active tab as the last one
// the developer was looking at, and it's easy to accidentally save that.
ui->m_pTabWidget->setCurrentIndex(0);
@ -443,12 +448,14 @@ void ServerConfigDialog::on_m_pCheckBoxUseExternalConfig_toggled(bool checked)
bool ServerConfigDialog::on_m_pButtonBrowseConfigFile_clicked()
{
#if defined(Q_OS_WIN)
const QString deskflowConfigFilter(QString("%1 Configurations (*.sgc);;All files (*.*)").arg(DESKFLOW_APP_NAME));
static const auto configExt = QStringLiteral("sgc");
#else
const QString deskflowConfigFilter(QString("%1 Configurations (*.conf);;All files (*.*)").arg(DESKFLOW_APP_NAME));
static const auto configExt = QStringLiteral("conf");
#endif
static const auto deskflowConfigFilter = QStringLiteral("%1 Configurations (*.%2);;All files (*.*)");
QString fileName = QFileDialog::getOpenFileName(this, "Browse for a config file", "", deskflowConfigFilter);
QString fileName =
QFileDialog::getOpenFileName(this, "Browse for a config file", "", deskflowConfigFilter.arg(kAppName, configExt));
if (!fileName.isEmpty()) {
ui->m_pEditConfigFile->setText(fileName);

View File

@ -1098,16 +1098,6 @@ Enabling this setting will disable the server config GUI.</string>
<property name="text">
<string/>
</property>
<property name="icon">
<iconset>
<normaloff>:/icons/64x64/folder.png</normaloff>:/icons/64x64/folder.png</iconset>
</property>
<property name="iconSize">
<size>
<width>20</width>
<height>13</height>
</size>
</property>
<property name="flat">
<bool>true</bool>
</property>

View File

@ -38,7 +38,7 @@
using namespace deskflow::gui;
SettingsDialog::SettingsDialog(
QWidget *parent, IAppConfig &appConfig, const IServerConfig &serverConfig, const CoreProcess &coreProcess
QWidget *parent, AppConfig &appConfig, const IServerConfig &serverConfig, const CoreProcess &coreProcess
)
: QDialog(parent, Qt::WindowTitleHint | Qt::WindowSystemMenuHint),
ui{std::make_unique<Ui::SettingsDialog>()},
@ -50,6 +50,11 @@ SettingsDialog::SettingsDialog(
ui->setupUi(this);
const auto folderIcon =
QIcon::fromTheme(QIcon::ThemeIcon::DocumentOpen, QIcon(QStringLiteral(":/icons/64x64/folder.png")));
ui->m_pPushButtonTlsCertPath->setIcon(folderIcon);
ui->m_pButtonBrowseLog->setIcon(folderIcon);
// force the first tab, since qt creator sets the active tab as the last one
// the developer was looking at, and it's easy to accidentally save that.
ui->m_pTabWidget->setCurrentIndex(0);
@ -183,6 +188,7 @@ void SettingsDialog::accept()
m_appConfig.setLogFilename(ui->m_pLineEditLogFilename->text());
m_appConfig.setElevateMode(static_cast<ElevateMode>(ui->m_pComboElevate->currentIndex()));
m_appConfig.setAutoHide(ui->m_pCheckBoxAutoHide->isChecked());
m_appConfig.setEnableUpdateCheck(ui->m_pCheckBoxAutoUpdate->isChecked());
m_appConfig.setPreventSleep(ui->m_pCheckBoxPreventSleep->isChecked());
m_appConfig.setTlsCertPath(ui->m_pLineEditTlsCertPath->text());
m_appConfig.setTlsKeyLength(ui->m_pComboBoxTlsKeyLength->currentText().toInt());
@ -223,6 +229,12 @@ void SettingsDialog::loadFromConfig()
ui->m_pCheckBoxCloseToTray->setChecked(m_appConfig.closeToTray());
ui->m_pComboElevate->setCurrentIndex(static_cast<int>(m_appConfig.elevateMode()));
if (m_appConfig.enableUpdateCheck().has_value()) {
ui->m_pCheckBoxAutoUpdate->setChecked(m_appConfig.enableUpdateCheck().value());
} else {
ui->m_pCheckBoxAutoUpdate->setChecked(false);
}
if (m_appConfig.isActiveScopeSystem()) {
ui->m_pRadioSystemScope->setChecked(true);
} else {
@ -306,6 +318,7 @@ void SettingsDialog::updateControls()
ui->m_pComboLogLevel->setEnabled(writable);
ui->m_pCheckBoxLogToFile->setEnabled(writable);
ui->m_pCheckBoxAutoHide->setEnabled(writable);
ui->m_pCheckBoxAutoUpdate->setEnabled(writable);
ui->m_pCheckBoxPreventSleep->setEnabled(writable);
ui->m_pLineEditTlsCertPath->setEnabled(writable);
ui->m_pComboBoxTlsKeyLength->setEnabled(writable);

View File

@ -19,7 +19,7 @@
#pragma once
#include <QDialog>
#include "gui/config/IAppConfig.h"
#include "gui/config/AppConfig.h"
#include "gui/config/IServerConfig.h"
#include "gui/core/CoreProcess.h"
#include "gui/tls/TlsUtility.h"
@ -31,7 +31,6 @@ class SettingsDialog;
class SettingsDialog : public QDialog
{
using IAppConfig = deskflow::gui::IAppConfig;
using IServerConfig = deskflow::gui::IServerConfig;
using CoreProcess = deskflow::gui::CoreProcess;
@ -40,7 +39,7 @@ class SettingsDialog : public QDialog
public:
void extracted();
SettingsDialog(
QWidget *parent, IAppConfig &appConfig, const IServerConfig &serverConfig, const CoreProcess &coreProcess
QWidget *parent, AppConfig &appConfig, const IServerConfig &serverConfig, const CoreProcess &coreProcess
);
~SettingsDialog() override;
@ -85,7 +84,7 @@ private:
bool m_wasOriginallySystemScope = false;
std::unique_ptr<Ui::SettingsDialog> ui;
IAppConfig &m_appConfig;
AppConfig &m_appConfig;
const IServerConfig &m_serverConfig;
const CoreProcess &m_coreProcess;
deskflow::gui::TlsUtility m_tlsUtility;

View File

@ -7,7 +7,7 @@
<x>0</x>
<y>0</y>
<width>550</width>
<height>582</height>
<height>615</height>
</rect>
</property>
<property name="sizePolicy">
@ -19,30 +19,21 @@
<property name="windowTitle">
<string>Preferences</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout_9">
<property name="spacing">
<number>15</number>
</property>
<item alignment="Qt::AlignTop">
<layout class="QVBoxLayout" name="verticalLayout_7">
<item>
<widget class="QTabWidget" name="m_pTabWidget">
<property name="tabPosition">
<enum>QTabWidget::North</enum>
<enum>QTabWidget::TabPosition::North</enum>
</property>
<property name="currentIndex">
<number>1</number>
<number>0</number>
</property>
<widget class="QWidget" name="m_pTabRegular">
<attribute name="title">
<string>&amp;Regular</string>
</attribute>
<layout class="QVBoxLayout" name="verticalLayout_3">
<property name="spacing">
<number>15</number>
</property>
<property name="topMargin">
<number>15</number>
</property>
<item alignment="Qt::AlignTop">
<item>
<widget class="QGroupBox" name="m_pGroupBasics">
<property name="title">
<string>Basics</string>
@ -72,10 +63,10 @@
<item>
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
<enum>Qt::Orientation::Horizontal</enum>
</property>
<property name="sizeType">
<enum>QSizePolicy::Maximum</enum>
<enum>QSizePolicy::Policy::Maximum</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
@ -121,12 +112,19 @@
</layout>
</widget>
</item>
<item alignment="Qt::AlignTop">
<item>
<widget class="QGroupBox" name="m_pGroupApp">
<property name="title">
<string>App</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout_5">
<item>
<widget class="QCheckBox" name="m_pCheckBoxAutoUpdate">
<property name="text">
<string>Check for updates on startup </string>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="m_pCheckBoxCloseToTray">
<property name="text">
@ -144,7 +142,7 @@
</layout>
</widget>
</item>
<item alignment="Qt::AlignTop">
<item>
<widget class="QGroupBox" name="m_pGroupSecurity">
<property name="title">
<string>Security</string>
@ -177,7 +175,7 @@
<item>
<spacer name="horizontalSpacer_2">
<property name="orientation">
<enum>Qt::Horizontal</enum>
<enum>Qt::Orientation::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
@ -245,10 +243,10 @@
<item>
<spacer name="horizontalSpacer_3">
<property name="orientation">
<enum>Qt::Horizontal</enum>
<enum>Qt::Orientation::Horizontal</enum>
</property>
<property name="sizeType">
<enum>QSizePolicy::Minimum</enum>
<enum>QSizePolicy::Policy::Minimum</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
@ -276,16 +274,6 @@
<property name="text">
<string/>
</property>
<property name="icon">
<iconset>
<normaloff>:/icons/64x64/folder.png</normaloff>:/icons/64x64/folder.png</iconset>
</property>
<property name="iconSize">
<size>
<width>20</width>
<height>13</height>
</size>
</property>
<property name="flat">
<bool>true</bool>
</property>
@ -301,7 +289,7 @@
<item>
<spacer name="horizontalSpacer_4">
<property name="orientation">
<enum>Qt::Horizontal</enum>
<enum>Qt::Orientation::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
@ -323,33 +311,14 @@
</layout>
</widget>
</item>
<item>
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
<widget class="QWidget" name="m_pTabAdvanced">
<attribute name="title">
<string>&amp;Advanced</string>
</attribute>
<layout class="QVBoxLayout" name="verticalLayout_8">
<property name="spacing">
<number>15</number>
</property>
<property name="topMargin">
<number>15</number>
</property>
<item alignment="Qt::AlignTop">
<layout class="QVBoxLayout" name="verticalLayout_6">
<item>
<widget class="QGroupBox" name="m_pGroupNetworking">
<property name="title">
<string>Networking</string>
@ -424,7 +393,7 @@
</layout>
</widget>
</item>
<item alignment="Qt::AlignTop">
<item>
<widget class="QGroupBox" name="m_pGroupLogs">
<property name="title">
<string>Logs</string>
@ -442,7 +411,7 @@
<item row="0" column="1">
<spacer name="horizontalSpacer_5">
<property name="orientation">
<enum>Qt::Horizontal</enum>
<enum>Qt::Orientation::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
@ -526,10 +495,10 @@
<item>
<spacer name="horizontalSpacer_7">
<property name="orientation">
<enum>Qt::Horizontal</enum>
<enum>Qt::Orientation::Horizontal</enum>
</property>
<property name="sizeType">
<enum>QSizePolicy::Minimum</enum>
<enum>QSizePolicy::Policy::Minimum</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
@ -563,16 +532,6 @@
<property name="text">
<string/>
</property>
<property name="icon">
<iconset>
<normaloff>:/icons/64x64/folder.png</normaloff>:/icons/64x64/folder.png</iconset>
</property>
<property name="iconSize">
<size>
<width>20</width>
<height>13</height>
</size>
</property>
<property name="flat">
<bool>true</bool>
</property>
@ -583,7 +542,7 @@
</layout>
</widget>
</item>
<item alignment="Qt::AlignTop">
<item>
<widget class="QGroupBox" name="m_pGroupService">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Expanding">
@ -625,7 +584,7 @@
</size>
</property>
<property name="toolTip">
<string>Specify when the Windows background service should run the server or client
<string>Specify when the Windows background service should run the server or client
process at an elevated privilege level.</string>
</property>
<property name="whatsThis">
@ -664,11 +623,8 @@
</item>
<item row="0" column="0">
<widget class="QCheckBox" name="m_pCheckBoxServiceEnabled">
<property name="text">
<string>Use background service (daemon)</string>
</property>
<property name="toolTip">
<string>Whether to launch the server or client process through the Windows background
<string>Whether to launch the server or client process through the Windows background
service or direct from the GUI.</string>
</property>
<property name="whatsThis">
@ -681,31 +637,21 @@
&lt;/ul&gt;
</string>
</property>
<property name="text">
<string>Use background service (daemon)</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item alignment="Qt::AlignTop">
<item>
<widget class="QGroupBox" name="m_pGroupScope">
<property name="title">
<string>Use settings profile from</string>
</property>
<layout class="QGridLayout" name="gridLayout_2">
<property name="topMargin">
<number>5</number>
</property>
<item row="0" column="1">
<widget class="QRadioButton" name="m_pRadioSystemScope">
<property name="text">
<string>All users</string>
</property>
<property name="checked">
<bool>false</bool>
</property>
</widget>
</item>
<item row="0" column="0">
<layout class="QHBoxLayout" name="horizontalLayout_3">
<item>
<widget class="QRadioButton" name="m_pRadioUserScope">
<property name="text">
<string>Current user</string>
@ -715,22 +661,19 @@
</property>
</widget>
</item>
<item>
<widget class="QRadioButton" name="m_pRadioSystemScope">
<property name="text">
<string>All users</string>
</property>
<property name="checked">
<bool>false</bool>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<spacer name="verticalSpacer_3">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
</widget>
@ -738,12 +681,15 @@
<item>
<spacer name="verticalSpacer_2">
<property name="orientation">
<enum>Qt::Vertical</enum>
<enum>Qt::Orientation::Vertical</enum>
</property>
<property name="sizeType">
<enum>QSizePolicy::Policy::Fixed</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
<height>20</height>
</size>
</property>
</spacer>
@ -751,10 +697,10 @@
<item>
<widget class="QDialogButtonBox" name="m_pButtonBox">
<property name="orientation">
<enum>Qt::Horizontal</enum>
<enum>Qt::Orientation::Horizontal</enum>
</property>
<property name="standardButtons">
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Save</set>
<set>QDialogButtonBox::StandardButton::Cancel|QDialogButtonBox::StandardButton::Save</set>
</property>
</widget>
</item>
@ -777,6 +723,7 @@
<tabstop>m_pRadioSystemScope</tabstop>
<tabstop>m_pComboElevate</tabstop>
</tabstops>
<resources/>
<connections>
<connection>
<sender>m_pButtonBox</sender>

View File

@ -16,7 +16,6 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "DeskflowApplication.h"
#include "MainWindow.h"
#include "SetupWizard.h"
#include "common/constants.h"
@ -78,16 +77,23 @@ int main(int argc, char *argv[])
QCoreApplication::setApplicationName(kAppName);
QCoreApplication::setOrganizationName(kAppName);
QGuiApplication::setDesktopFileName(DESKFLOW_APP_ID);
QGuiApplication::setDesktopFileName(QStringLiteral("org.deskflow.deskflow"));
// used as a prefix for settings paths, and must not be a url.
QCoreApplication::setOrganizationDomain(kOrgDomain);
DeskflowApplication app(argc, argv);
QApplication app(argc, argv);
#if !defined(Q_OS_MAC)
// causes dark mode to be used on some DE's
if (qEnvironmentVariable("XDG_CURRENT_DESKTOP") != QLatin1String("KDE")) {
qApp->setStyle("fusion");
}
#endif
qInstallMessageHandler(deskflow::gui::messages::messageHandler);
QString version = QString::fromStdString(deskflow::version());
qInfo(DESKFLOW_APP_NAME " v%s", qPrintable(version));
qInfo("%s v%s", kAppName, qPrintable(version));
dotenv();
Logger::instance().loadEnvVars();
@ -95,11 +101,9 @@ int main(int argc, char *argv[])
#if defined(Q_OS_MAC)
if (app.applicationDirPath().startsWith("/Volumes/")) {
QMessageBox::information(
NULL, DESKFLOW_APP_NAME,
"Please drag " DESKFLOW_APP_NAME " to the Applications folder, "
"and open it from there."
);
QString msgBody = QStringLiteral("Please drag %1 to the Applications folder, "
"and open it from there.");
QMessageBox::information(NULL, kAppName, msgBody.arg(kAppName));
return 1;
}
@ -136,16 +140,13 @@ int main(int argc, char *argv[])
}
MainWindow mainWindow(configScopes, appConfig);
QObject::connect(&app, &DeskflowApplication::aboutToQuit, &mainWindow, &MainWindow::onAppAboutToQuit);
mainWindow.open();
#ifdef DESKFLOW_GUI_HOOK_START
DESKFLOW_GUI_HOOK_START
#endif
return DeskflowApplication::exec();
return qApp->exec();
}
#if defined(Q_OS_MAC)
@ -176,12 +177,10 @@ bool checkMacAssistiveDevices()
// now deprecated in mavericks.
bool result = AXAPIEnabled();
if (!result) {
QMessageBox::information(
NULL, DESKFLOW_APP_NAME,
"Please enable access to assistive devices "
"System Preferences -> Security & Privacy -> "
"Privacy -> Accessibility, then re-open " DESKFLOW_APP_NAME "."
);
QString msgBody = QString("Please enable access to assistive devices "
"System Preferences -> Security & Privacy -> "
"Privacy -> Accessibility, then re-open %1.");
QMessageBox::information(NULL, kAppName, msgBody.arg(kAppName));
}
return result;

View File

@ -18,6 +18,7 @@
#include "arch/unix/ArchFileUnix.h"
#include "common/constants.h"
#include <cstring>
#include <filesystem>
#include <pwd.h>
@ -90,7 +91,9 @@ std::string ArchFileUnix::getInstalledDirectory()
#if WINAPI_XWINDOWS
return "/usr/bin";
#else
return "/Applications/" DESKFLOW_APP_NAME ".app/Contents/MacOS";
std::string rtn = "/Applications/";
rtn.append(kAppName).append(".app/Contents/MacOS");
return rtn;
#endif
}
@ -121,12 +124,12 @@ std::string ArchFileUnix::getProfileDirectory()
#if WINAPI_XWINDOWS
const auto xdgDir = std::getenv("XDG_CONFIG_HOME");
if (xdgDir != nullptr) {
return std::filesystem::path(xdgDir) / DESKFLOW_APP_NAME;
return std::filesystem::path(xdgDir) / kAppName;
} else {
return homeDir / ".config" / DESKFLOW_APP_NAME;
return homeDir / ".config" / kAppName;
}
#else
return homeDir / "Library" / DESKFLOW_APP_NAME;
return homeDir / "Library" / kAppName;
#endif
}
}

View File

@ -19,6 +19,7 @@
#include "arch/unix/ArchSystemUnix.h"
#include <array>
#include <common/constants.h>
#include <sys/utsname.h>
#ifndef __APPLE__
@ -112,9 +113,8 @@ bool ArchSystemUnix::DBusInhibitScreenCall(InhibitScreenServices serviceID, bool
return false;
}
reply = screenSaverInterface.call(
"Inhibit", DESKFLOW_APP_NAME, "Sleep is manually prevented by the " DESKFLOW_APP_NAME " preferences"
);
QString msg = "Sleep is manually prevented by the %1 preferences";
reply = screenSaverInterface.call("Inhibit", kAppName, msg.arg(kAppName));
if (reply.isValid())
cookies[serviceNum] = reply.value();
} else {

View File

@ -20,6 +20,7 @@
#include "arch/IArchDaemon.h"
#include "arch/IArchMultithread.h"
#include "common/constants.h"
#include "common/stdstring.h"
#define WIN32_LEAN_AND_MEAN
@ -144,8 +145,8 @@ private:
std::string m_commandLine;
};
#define DEFAULT_DAEMON_NAME _T(DESKFLOW_APP_NAME)
#define DEFAULT_DAEMON_INFO _T("Manages the " DESKFLOW_APP_NAME " foreground processes.")
#define DEFAULT_DAEMON_NAME _T(kAppName)
#define DEFAULT_DAEMON_INFO _T("Manages the Deskflow foreground processes.")
#define LEGACY_SERVER_DAEMON_NAME _T(DESKFLOW_APP_NAME " Server")
#define LEGACY_CLIENT_DAEMON_NAME _T(DESKFLOW_APP_NAME " Client")
#define LEGACY_SERVER_DAEMON_NAME _T("Deskflow Server")
#define LEGACY_CLIENT_DAEMON_NAME _T("Deskflow Client")

View File

@ -156,7 +156,7 @@ std::string ArchFileWindows::getProfileDirectory()
}
// HACK: append program name, this seems wrong.
dir.append("\\" DESKFLOW_APP_NAME);
dir.append("\\Deskflow");
return dir;
}

View File

@ -20,6 +20,7 @@
#include "arch/win32/ArchMiscWindows.h"
#include "arch/XArch.h"
#include "common/constants.h"
#include "tchar.h"
#include <string>
@ -27,7 +28,7 @@
#include <psapi.h>
#include <windows.h>
static const char *s_settingsKeyNames[] = {_T("SOFTWARE"), _T(DESKFLOW_APP_NAME), NULL};
static const char *s_settingsKeyNames[] = {_T("SOFTWARE"), _T(kAppName), NULL};
//
// ArchSystemWindows

View File

@ -22,7 +22,8 @@
#error version was not passed to the compiler
#endif
const auto kAppName = DESKFLOW_APP_NAME;
const auto kAppName = "Deskflow";
const auto kAppId = "deskflow";
const auto kAppDescription = "Mouse and keyboard sharing utility";
const auto kVersion = DESKFLOW_VERSION;

View File

@ -26,6 +26,7 @@
#include "base/String.h"
#include "base/TMethodEventJob.h"
#include "client/Client.h"
#include "common/constants.h"
#include "deskflow/ArgParser.h"
#include "deskflow/ClientArgs.h"
#include "deskflow/Screen.h"
@ -134,7 +135,7 @@ void ClientApp::help()
#endif
<< HELP_SYS_ARGS << HELP_COMMON_ARGS << " <server-address>"
<< "\n\n"
<< "Connect to a " DESKFLOW_APP_NAME " mouse/keyboard sharing server.\n"
<< "Connect to a " << kAppName << " mouse/keyboard sharing server.\n"
<< "\n"
<< " -a, --address <address> local network interface address.\n"
<< HELP_COMMON_INFO_1 << HELP_SYS_INFO << " --yscroll <delta> defines the vertical scrolling delta,\n"
@ -165,9 +166,9 @@ void ClientApp::help()
const char *ClientApp::daemonName() const
{
#if SYSAPI_WIN32
return DESKFLOW_APP_NAME " Client";
return "Deskflow Client";
#elif SYSAPI_UNIX
return CLIENT_BINARY_NAME;
return "deskflow-client";
#endif
}

View File

@ -25,6 +25,7 @@
#include "base/Log.h"
#include "base/TMethodEventJob.h"
#include "base/log_outputters.h"
#include "common/constants.h"
#include "common/ipc.h"
#include "deskflow/App.h"
#include "deskflow/ArgParser.h"
@ -59,7 +60,7 @@
using namespace std;
const char *const kLogFilename = DAEMON_BINARY_NAME ".log";
const char *const kLogFilename = "deskflow-daemon.log";
namespace {
void updateSetting(const IpcMessage &message)
@ -77,8 +78,8 @@ bool isServerCommandLine(const std::vector<String> &cmd)
auto isServer = false;
if (cmd.size() > 1) {
isServer = (cmd[0].find(SERVER_BINARY_NAME) != String::npos) ||
(cmd[0].find(CORE_BINARY_NAME) != String::npos && cmd[1] == "server");
isServer = (cmd[0].find("deskflow-server") != String::npos) ||
(cmd[0].find("deskflow-core") != String::npos && cmd[1] == "server");
}
return isServer;
@ -178,10 +179,10 @@ int DaemonApp::run(int argc, char **argv)
} else {
#if SYSAPI_WIN32
LOG((CLOG_PRINT "daemonizing windows service"));
arch.daemonize(DESKFLOW_APP_NAME, winMainLoopStatic);
arch.daemonize(kAppName, winMainLoopStatic);
#elif SYSAPI_UNIX
LOG((CLOG_PRINT "daemonizing unix service"));
arch.daemonize(DESKFLOW_APP_NAME, unixMainLoopStatic);
arch.daemonize(kAppName, unixMainLoopStatic);
#endif
}

View File

@ -23,6 +23,7 @@
#include "base/Log.h"
#include "base/Path.h"
#include "base/TMethodEventJob.h"
#include "common/constants.h"
#include "deskflow/App.h"
#include "deskflow/ArgParser.h"
#include "deskflow/Screen.h"
@ -123,8 +124,8 @@ void ServerApp::parseArgs(int argc, const char *const *argv)
void ServerApp::help()
{
const auto userConfig = ARCH->concatPath(ARCH->getUserDirectory(), USER_CONFIG_NAME);
const auto sysConfig = ARCH->concatPath(ARCH->getSystemDirectory(), SYSTEM_CONFIG_NAME);
const auto userConfig = ARCH->concatPath(ARCH->getUserDirectory(), CONFIG_NAME);
const auto sysConfig = ARCH->concatPath(ARCH->getSystemDirectory(), CONFIG_NAME);
std::stringstream help;
help << "Usage: " << args().m_pname
@ -141,7 +142,7 @@ void ServerApp::help()
#endif
<< HELP_SYS_ARGS HELP_COMMON_ARGS "\n\n"
<< "Start the " DESKFLOW_APP_NAME " mouse/keyboard sharing server.\n"
<< "Start the " << kAppName << " mouse/keyboard sharing server.\n"
<< "\n"
<< " -a, --address <address> listen for clients on the given address.\n"
<< " -c, --config <pathname> use the named configuration file "
@ -208,7 +209,7 @@ void ServerApp::loadConfig()
path = ARCH->getUserDirectory();
if (!path.empty()) {
// complete path
path = ARCH->concatPath(path, USER_CONFIG_NAME);
path = ARCH->concatPath(path, CONFIG_NAME);
// now try loading the user's configuration
if (loadConfig(path)) {
@ -220,7 +221,7 @@ void ServerApp::loadConfig()
// try the system-wide config file
path = ARCH->getSystemDirectory();
if (!path.empty()) {
path = ARCH->concatPath(path, SYSTEM_CONFIG_NAME);
path = ARCH->concatPath(path, CONFIG_NAME);
if (loadConfig(path)) {
loaded = true;
args().m_configFile = path;
@ -844,9 +845,9 @@ int ServerApp::foregroundStartup(int argc, char **argv)
const char *ServerApp::daemonName() const
{
#if SYSAPI_WIN32
return DESKFLOW_APP_NAME " Server";
return "Deskflow Server";
#elif SYSAPI_UNIX
return SERVER_BINARY_NAME;
return "deskflow-server";
#endif
}

View File

@ -145,13 +145,9 @@ private:
ClientListener *m_listener;
EventQueueTimer *m_timer;
NetworkAddress *m_deskflowAddress;
};
// configuration file name
#if SYSAPI_WIN32
#define USER_CONFIG_NAME DESKFLOW_APP_ID ".sgc"
#define SYSTEM_CONFIG_NAME DESKFLOW_APP_ID ".sgc"
inline static const std::string CONFIG_NAME = "%s.sgc", kAppName;
#elif SYSAPI_UNIX
#define USER_CONFIG_NAME "." DESKFLOW_APP_ID ".conf"
#define SYSTEM_CONFIG_NAME DESKFLOW_APP_ID ".conf"
inline static const std::string CONFIG_NAME = "%s.conf", kAppName;
#endif
};

View File

@ -31,6 +31,7 @@
#endif
#include "base/Log.h"
#include "base/log_outputters.h"
#include "common/constants.h"
#if HAVE_LIBNOTIFY
#include <libnotify/notify.h>
@ -168,7 +169,7 @@ void AppUtilUnix::showNotification(const String &title, const String &text) cons
{
#if HAVE_LIBNOTIFY
LOG((CLOG_INFO "showing notification, title=\"%s\", text=\"%s\"", title.c_str(), text.c_str()));
if (!notify_init(DESKFLOW_APP_NAME)) {
if (!notify_init(kAppName)) {
LOG((CLOG_INFO "failed to initialize libnotify"));
return;
}

View File

@ -252,9 +252,16 @@ void AppUtilWindows::showNotification(const String &title, const String &text) c
return;
}
if (!WinToastLib::WinToast::instance()->isInitialized()) {
WinToastLib::WinToast::instance()->setAppName(L"" DESKFLOW_APP_NAME);
WinToastLib::WinToast::instance()->setAppName(L""
"Deskflow");
const auto aumi = WinToastLib::WinToast::configureAUMI(
L"" DESKFLOW_AUTHOR_NAME, L"" DESKFLOW_APP_NAME, L"" DESKFLOW_APP_NAME, L"1.14.1+"
L""
"Deskflow Developers",
L""
"Deskflow",
L""
"Deskflow",
L"1.14.1+"
);
WinToastLib::WinToast::instance()->setAppUserModelId(aumi);

View File

@ -15,9 +15,6 @@
set(target gui)
set(res_dir ${GUI_RES_DIR})
set(qrc_file ${GUI_QRC_FILE})
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_AUTOUIC ON)
@ -38,7 +35,7 @@ endif()
# generated includes
include_directories(${PROJECT_BINARY_DIR}/config)
add_library(${target} STATIC ${sources} ${qrc_file})
add_library(${target} STATIC ${sources})
target_link_libraries(
${target}

View File

@ -54,7 +54,7 @@ bool
isOSXDevelopmentBuild()
{
std::string bundleURL = [[[NSBundle mainBundle] bundleURL].absoluteString UTF8String];
return (bundleURL.find("Applications/" DESKFLOW_APP_NAME ".app") == std::string::npos);
return (bundleURL.find("Applications/Deskflow.app") == std::string::npos);
}
bool

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