mirror of
https://github.com/kunkundi/crossdesk.git
synced 2026-10-15 00:09:39 +08:00
Compare commits
3
Commits
bbbcfb9d6f
...
3d2235ad4e
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
3d2235ad4e | ||
|
|
0b2eb5b106 | ||
|
|
94760b2a3c |
@@ -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
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
Vendored
+18
-1
@@ -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)
|
||||
|
||||
@@ -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,或以管理员身份运行客户端。
|
||||
Reference in New Issue
Block a user