Compare commits

...
3 Commits
6 changed files with 47 additions and 32 deletions
+6 -14
View File
@@ -689,7 +689,8 @@ jobs:
@("crossdesk_service.exe", "crossdesk_service.exe"),
@("crossdesk_session_helper.exe", "crossdesk_session_helper.exe"),
@("crossdesk_privacy_cursor_helper.exe", "crossdesk_privacy_cursor_helper.exe"),
@("crossdesk_privacy_window.dll", "crossdesk_privacy_window.dll")
@("crossdesk_privacy_window.dll", "crossdesk_privacy_window.dll"),
@("slint_cpp.dll", "slint_cpp.dll")
)
foreach ($file in $portableFiles) {
@@ -791,23 +792,14 @@ jobs:
echo "PATCH_NUMBER=${PATCH_NUMBER}" >> $GITHUB_OUTPUT
- name: Prepare release notes
env:
RELEASE_TAG: ${{ steps.version.outputs.VERSION_WITH_V }}
VERSION_BASE: ${{ steps.version.outputs.VERSION_BASE }}
run: |
if [[ -f "docs/releases/${RELEASE_TAG}.md" ]]; then
cp "docs/releases/${RELEASE_TAG}.md" release-notes.md
elif [[ -f "docs/releases/v${VERSION_BASE}.md" ]]; then
cp "docs/releases/v${VERSION_BASE}.md" release-notes.md
else
cat > release-notes.md << 'EOF'
cat > "$RUNNER_TEMP/release-notes.md" << 'EOF'
Binary release only. Source code is not included.
## Code signing policy
Free code signing provided by [SignPath.io](https://signpath.io/), certificate by [SignPath Foundation](https://signpath.org/).
EOF
fi
- name: Rename artifacts
run: |
@@ -833,7 +825,7 @@ jobs:
prerelease: false
files: release/*
generate_release_notes: false
body_path: release-notes.md
body_path: ${{ runner.temp }}/release-notes.md
- name: Create or update 'latest' tag
run: |
@@ -851,7 +843,7 @@ jobs:
prerelease: false
files: release/*
generate_release_notes: false
body_path: release-notes.md
body_path: ${{ runner.temp }}/release-notes.md
- name: Upload artifacts to server
uses: burnett01/rsync-deployments@5.2
@@ -903,7 +895,7 @@ jobs:
}
EOF
jq --arg release_name "Release ${{ steps.version.outputs.VERSION_WITH_V }}" \
--rawfile release_notes release-notes.md \
--rawfile release_notes "$RUNNER_TEMP/release-notes.md" \
'.releaseName = $release_name | .releaseNotes = $release_notes' \
version.json > version-with-notes.json
mv version-with-notes.json version.json
+4 -2
View File
@@ -90,8 +90,10 @@ installApp:
File "..\..\..\..\build\windows\x64\release\crossdesk_session_helper.exe"
File "..\..\..\..\build\windows\x64\release\crossdesk_privacy_cursor_helper.exe"
File "..\..\..\..\build\windows\x64\release\crossdesk_privacy_window.dll"
; Bundle runtime DLLs from the release output directory
File /x crossdesk_privacy_window.dll "..\..\..\..\build\windows\x64\release\*.dll"
; Require the Slint runtime so an incomplete build cannot be packaged.
File "..\..\..\..\build\windows\x64\release\slint_cpp.dll"
; Bundle the remaining runtime DLLs from the release output directory
File /x crossdesk_privacy_window.dll /x slint_cpp.dll "..\..\..\..\build\windows\x64\release\*.dll"
; Amyuni usbmmidd_v2 virtual display driver for headless hosts. xmake
; copies apps\desktop\resources\windows\usbmmidd_v2 into the release
; output directory after building crossdesk; its License.txt ships with it.
+3 -1
View File
@@ -42,8 +42,10 @@ rule("slint")
local outputs = target:data("slint.outputs")[sourcefile]
local depfile = outputs.header .. ".d"
-- Slint writes the -o path literally into each generated #include.
-- The custom UI uses fixed light backgrounds. Keep default text and
-- standard widgets light as well, regardless of the system theme.
local argv = {sourcefile, "-f", "cpp", "-o", path.absolute(outputs.header),
"--depfile", depfile, "--style", "fluent",
"--depfile", depfile, "--style", "fluent-light",
"--embed-resources=embed-files", "--cpp-namespace", "crossdesk::ui"}
local missing_output = not os.isfile(outputs.header)
for _, cppfile in ipairs(outputs.sources) do
+16 -2
View File
@@ -38,9 +38,23 @@ function setup_targets()
local runtime_dir = path.join(slint:installdir(), "lib")
local runtime_dll = path.join(runtime_dir, "slint_cpp.dll")
assert(os.isfile(runtime_dll), "Slint runtime not found: " .. runtime_dll)
import("utils.binary.deplibs")
local dependencies = deplibs(runtime_dll, {plat = "windows", arch = target:arch()})
assert(dependencies and #dependencies > 0, "Cannot inspect Slint runtime dependencies: " .. runtime_dll)
for _, dependency in ipairs(dependencies) do
local name = path.filename(dependency):lower()
assert(not (name:match("^vcruntime%d.*%.dll$") or name:match("^msvcp%d.*%.dll$") or
name:match("^msvcr%d.*%.dll$") or name:match("^concrt%d.*%.dll$")),
"Slint runtime depends on " .. dependency .. "; rebuild the Slint package with static CRT")
end
os.cp(runtime_dll, target:targetdir())
end
-- Keep runtime deployment independent of each target's after_build callback.
rule("crossdesk.slint_runtime")
after_build(copy_slint_runtime)
rule_end()
-- Amyuni usbmmidd_v2 virtual display driver for headless Windows hosts.
-- The installer and the portable archive pick it up from the target
-- directory; the runtime looks for it next to the executables.
@@ -208,7 +222,7 @@ function setup_targets()
add_includedirs("apps/desktop/src/gui", "apps/desktop/src/gui/assets/fonts",
"apps/desktop/src/gui/assets/localization")
add_files("apps/desktop/tests/slint_ui_smoke_test.cpp")
after_build(copy_slint_runtime)
add_rules("crossdesk.slint_runtime")
target("version_checker_test")
set_kind("binary")
@@ -569,6 +583,6 @@ function setup_targets()
"apps/desktop/src/platform/linux/daemon_backend.cpp",
"apps/desktop/src/platform/linux/headless/headless_session.cpp")
end
after_build(copy_slint_runtime)
add_rules("crossdesk.slint_runtime")
after_build(copy_usbmmidd_package)
end
+18 -1
View File
@@ -8,6 +8,10 @@ package("slint")
add_versions("1.17.1", "68222567f8c70ff677cd4a98cd94fb4765ac0f797eb8f8608a646911c908dc2a")
add_configs("shared", {description = "Build the Slint runtime as a shared library", default = true, type = "boolean", readonly = true})
if is_plat("windows") then
-- Include CRT linkage in the package hash so cached /MD builds are not reused.
add_configs("static_crt", {description = "Statically link the Windows C runtime", default = true, type = "boolean", readonly = true})
end
add_deps("cmake~slint >=3.21 <4.0", {host = true, private = true, system = false})
add_deps("rust 1.92.0", {host = true, private = true, system = false})
@@ -51,13 +55,26 @@ package("slint")
"-DSLINT_STYLE=fluent",
"-DBUILD_SHARED_LIBS=ON"
}
local cmake = import("package.tools.cmake")
local envs
if package:is_plat("windows") then
local rc = assert(package:build_getenv("mrc"),
"failed to find the Windows resource compiler")
rc = rc:gsub("\\", "/")
table.insert(configs, "-DCMAKE_RC_COMPILER=" .. rc)
table.insert(configs, "-DCMAKE_MSVC_RUNTIME_LIBRARY=MultiThreaded")
-- Slint is a Rust cdylib: CMake's /MT setting alone does not affect it.
-- Encoded flags take precedence over RUSTFLAGS set by Corrosion.
envs = cmake.buildenvs(package)
local rustflags = os.getenv("CARGO_ENCODED_RUSTFLAGS")
if rustflags == nil then
rustflags = table.concat((os.getenv("RUSTFLAGS") or ""):split("%s+"), "\31")
end
envs.CARGO_ENCODED_RUSTFLAGS = (rustflags ~= "" and rustflags .. "\31" or "") ..
"-Ctarget-feature=+crt-static"
end
import("package.tools.cmake").install(package, configs)
cmake.install(package, configs, {envs = envs})
end)
on_test(function(package)
-12
View File
@@ -1,12 +0,0 @@
# **更新内容**
1. Windows 新增无显示器远程控制支持,内置虚拟显示器驱动,可自动创建 1920×1080 虚拟屏幕;无法启用时自动切换至兼容采集模式。
2. 设置中新增“强制中继”选项,方便在直连不稳定的网络中使用中继连接。
3. 主窗口新增随机密码刷新,优化密码重试时的输入体验,并统一为 6 位密码。
4. 改善断线重连,修复旧会话阻碍重新连接及已保存密码未正确复用的问题。
5. 修复 Windows 远程控制和 Web 控制中的键鼠输入、光标显示及会话路由问题。
6. 改善 Windows 显示器热插拔后的屏幕编号、鼠标定位和隐私屏稳定性。
7. 修复远程画面缩放后的鼠标位置偏差,以及部分视频帧无法正常显示的问题。
8. 修复展开网络状态后屏幕切换菜单的位置偏移。
PC 客户端版本为 v1.5.2。Windows 无屏自动适配需将采集方式设为“自动”;自动安装和插入虚拟显示器需安装并运行 CrossDesk Service,或以管理员身份运行客户端。