Merge branch 'worktree-agent-a220ca550d5f8734b' into worktree-dep-currency-wave

This commit is contained in:
2026-08-13 14:19:11 +02:00
6 changed files with 27 additions and 19 deletions
Generated
+9 -9
View File
@@ -4036,12 +4036,12 @@ checksum = "d6f6ff9a378485b298a5286656da665ba74413d36db0979633275d2e708145d4"
[[package]]
name = "reis"
version = "0.6.1"
version = "0.7.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2aee09758db35e73eb1398c6ef321973ce7f4aad86573ba08c1c8ef98d350b46"
checksum = "4b967ec6489a42067a20724f11987bb96178ea796873cbe1afd25fb93ee6f85f"
dependencies = [
"enumflags2",
"futures",
"futures-util",
"log",
"rustix",
"tokio",
@@ -6155,9 +6155,9 @@ checksum = "1ebf944e87a7c253233ad6766e082e3cd714b5d03812acc24c318f549614536e"
[[package]]
name = "x11rb"
version = "0.13.2"
version = "0.14.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9993aa5be5a26815fe2c3eacfc1fde061fc1a1f094bf1ad2a18bf9c495dd7414"
checksum = "5a8885a854a8bfdf87a301e53e41b17c5f8f33639903131338b997b1eb614f44"
dependencies = [
"gethostname",
"rustix",
@@ -6166,9 +6166,9 @@ dependencies = [
[[package]]
name = "x11rb-protocol"
version = "0.13.2"
version = "0.14.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ea6fc2961e4ef194dcbfe56bb845534d0dc8098940c7e5c012a258bfec6701bd"
checksum = "acf4d1bc32aa46eec18caa634ec3cf4c05bfa151f12b93b510b15190f69a1ca8"
[[package]]
name = "x509-parser"
@@ -6199,9 +6199,9 @@ dependencies = [
[[package]]
name = "xkbcommon"
version = "0.8.0"
version = "0.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8d66ca9352cbd4eecbbc40871d8a11b4ac8107cfc528a6e14d7c19c69d0e1ac9"
checksum = "a7a974f48060a14e95705c01f24ad9c3345022f4d97441b8a36beb7ed5c4a02d"
dependencies = [
"libc",
"memmap2",
+1 -1
View File
@@ -37,7 +37,7 @@ tokio = { version = "1", features = ["rt", "rt-multi-thread", "net", "time", "sy
# visibility from gamescope's nested Xwayland via XFixes instead and feed the existing cursor slot.
# `RustConnection` is the pure-Rust default (no libxcb link → no new C dependency on the host); the
# `xfixes` feature (auto-pulls `render` + `shape`) is what exposes GetCursorImage/SelectCursorInput.
x11rb = { version = "0.13", default-features = false, features = ["xfixes"] }
x11rb = { version = "0.14", default-features = false, features = ["xfixes"] }
[target.'cfg(target_os = "windows")'.dependencies]
# The host<->driver wire contract for the sealed frame channel (control IOCTL structs + frame header).
+1 -1
View File
@@ -147,7 +147,7 @@ libloading = "0.8"
# pure-Rust `RustConnection` — no libxcb link, so no new C dependency on any client package
# — the same stance pf-capture and pf-vdisplay already take on this crate. No extension
# features: root-window properties and an event mask are core X11.
x11rb = { version = "0.13", default-features = false }
x11rb = { version = "0.14", default-features = false }
[target.'cfg(windows)'.dependencies]
wasapi = "0.23"
+2 -2
View File
@@ -39,14 +39,14 @@ wayland-protocols = { version = "0.32", features = ["client"] }
wayland-scanner = "0.31"
wayland-backend = "0.3"
# libei (EI sender) for the portable input path on KWin/GNOME (RemoteDesktop portal) + gamescope-EI.
reis = { version = "0.6.1", features = ["tokio"] }
reis = { version = "0.7.1", features = ["tokio"] }
futures-util = "0.3"
# `macros` is for the `tokio::select!` in the libei and steam_usbip worker loops. It used to be
# absent and compile anyway, borrowed from punktfunk-core's `quic` feature via unification — i.e. an
# unrelated crate dropping it would have broken this one.
tokio = { version = "1", features = ["rt", "rt-multi-thread", "net", "time", "macros"] }
# Builds/validates the xkb keymap uploaded to the virtual keyboard + tracks modifier state.
xkbcommon = "0.8"
xkbcommon = "0.9"
# Vendored + trimmed usbip server core — presents a virtual Steam Deck over USB/IP for Steam Input.
usbip-sim = { path = "../punktfunk-host/vendor/usbip-sim" }
+1 -1
View File
@@ -58,7 +58,7 @@ wayland-backend = "0.3"
bitflags = "2"
# The gamescope bare-spawn splash client (gamescope/splash.rs): pure-Rust X11 core protocol (the
# same no-libxcb-link stance as pf-capture's XFixes cursor source), no extension features needed.
x11rb = { version = "0.13", default-features = false }
x11rb = { version = "0.14", default-features = false }
[target.'cfg(target_os = "windows")'.dependencies]
# Windows-only, all three, and gated here rather than unconditionally so the LINUX build does not
@@ -3791,11 +3791,19 @@ fn plan_bind(
/// the bind only arms for a resolved `punktfunk-gamescope`, whose patch level 2+ paints the pointer
/// into the capture node itself, so `SessionPlan::gamescope_cursor` is false and the reader is
/// never spawned (`session_plan::gamescope_needs_host_cursor`). On the ATTACH route, where the
/// reader IS spawned, it reaches the display over the ABSTRACT socket `@/tmp/.X11-unix/X<n>` —
/// x11rb tries that before the filesystem path, and an abstract socket lives in the network
/// namespace, which this unit does not get one of. If that ever fails, the reader logs and retries
/// forever; the stream runs without a composited pointer. Nothing else host-side opens an X
/// connection: capture is PipeWire, injection is libei/EIS, clipboard is Wayland.
/// reader IS spawned, we never arm this bind — the session is someone else's, started by
/// `gamescope-session-plus`, and its `/tmp` is the real one — so the filesystem socket
/// `/tmp/.X11-unix/X<n>` is exactly where `DISPLAY` says it is and the reader reaches it by path.
/// (`punktfunk-host.service` sets no `PrivateTmp`, on purpose, so the host shares that `/tmp`.)
///
/// That last sentence used to lean on x11rb trying the ABSTRACT socket `@/tmp/.X11-unix/X<n>`
/// first, which would have survived even a bind, since an abstract socket lives in the network
/// namespace and this unit gets none of its own. **x11rb 0.14 dropped the abstract attempt**
/// (`rust_connection::stream`, "Connect to this Unix socket by path"), so the filesystem path is
/// now the only one. Should the two ever have to coexist — a bind armed on a route that also
/// spawns the reader — the reader would not connect; it logs and retries forever, and the stream
/// runs without a composited pointer. Nothing else host-side opens an X connection: capture is
/// PipeWire, injection is libei/EIS, clipboard is Wayland.
struct SessionBind {
wrapper: std::path::PathBuf,
/// The user-owned directory bound over [`X11_SOCKET_DIR`], or `None` when the real one is