Commit Graph

68 Commits

Author SHA1 Message Date
Geoffrey McRae
20c63464a7 [client] clipboard: retain local Wayland offers 2026-08-14 12:36:43 +10:00
Geoffrey McRae
608e85fe5d [client] clipboard: preserve newer Wayland selections 2026-08-14 12:36:43 +10:00
Geoffrey McRae
dc2ab76c36 [client] clipboard: suppress Wayland self-copy feedback 2026-08-14 12:36:43 +10:00
Geoffrey McRae
c868082a7f [client/idd] fix copyright headers 2026-08-14 12:36:43 +10:00
Geoffrey McRae
be2f79a412 [client] clipboard: add direct LGMP synchronization 2026-08-14 10:22:37 +10:00
Geoffrey McRae
a8d531b797 [client] clipboard: introduce streamed transfers 2026-08-14 10:09:10 +10:00
Geoffrey McRae
4768396180 [client] transport: track video component availability 2026-08-13 04:28:09 +10:00
Geoffrey McRae
656b0995f6 [client] transport: make video waits cancellable 2026-08-13 04:08:49 +10:00
Geoffrey McRae
8fb3c4d9f6 [client] transport: stop after guest sessions end
Track unexpected loss of an admitted fallback independently from normal
stop and UUID revocation. Terminate once both primary and fallback
sessions have disappeared, regardless of notification order.

Make shutdown terminal so concurrent disconnect handling cannot replace
it with restart or running state.
2026-08-12 12:24:25 +10:00
Geoffrey McRae
9c0caca3fa [client] render: bound software surface update backlog 2026-08-12 05:31:45 +10:00
Geoffrey McRae
f68bf8f0d5 [client] render: reduce software surface queue overhead 2026-08-12 05:31:45 +10:00
Geoffrey McRae
0c21577e9e [client] render: optimize software surface fills 2026-08-12 05:31:45 +10:00
Geoffrey McRae
53dd7c8116 [client] keybind: test app dispatch lifecycle 2026-08-12 05:05:26 +10:00
Geoffrey McRae
469e0c5f02 [client] x11: test clipboard protocol lifecycle 2026-08-12 05:05:26 +10:00
Geoffrey McRae
eb8b46eac9 [client] keybind: test built-in actions and ordering 2026-08-12 05:05:26 +10:00
Geoffrey McRae
fc7c8e9cae [client] render: test X11 display paths 2026-08-12 05:05:26 +10:00
Geoffrey McRae
1f5aaa0fc3 [client] wayland: test clipboard protocol lifecycle 2026-08-12 05:05:26 +10:00
Geoffrey McRae
c68007ccd6 [client] render: test scaling and OpenGL paths 2026-08-12 05:05:26 +10:00
Geoffrey McRae
8399c38bab [client] egl: test DMA snapshot lifecycle 2026-08-12 05:05:26 +10:00
Geoffrey McRae
c6752237d9 [client] timing: test frame completion ordering 2026-08-12 05:05:26 +10:00
Geoffrey McRae
a12abedd60 [client] wayland: test presentation feedback lifecycle 2026-08-12 05:05:26 +10:00
Geoffrey McRae
6c0f8d8a28 [client] control: test config and resize messages 2026-08-12 05:05:26 +10:00
Geoffrey McRae
7dc6bc8527 [client] lgmp: test input ownership lifecycle 2026-08-12 05:05:26 +10:00
Geoffrey McRae
ff47bf6128 [client] spice: test session and surface lifecycle 2026-08-12 05:05:26 +10:00
Geoffrey McRae
0d870146b5 [client] clipboard: test provider lifecycle 2026-08-12 05:05:26 +10:00
Geoffrey McRae
28df55e51c [client] egl: test desktop damage geometry 2026-08-12 05:05:26 +10:00
Geoffrey McRae
dea5706667 [client] input: test provider handoff and rollback 2026-08-12 05:05:26 +10:00
Geoffrey McRae
223bb6fd58 [client] scheduler: test frame control lifecycle 2026-08-12 05:05:26 +10:00
Geoffrey McRae
8bf7c5b49e [client] audio: test streams and microphone consent 2026-08-12 05:05:26 +10:00
Geoffrey McRae
49fa27b573 [client] lgmp: test frame validation and leases 2026-08-12 05:05:26 +10:00
Geoffrey McRae
c0ea0368c6 [client] transport: test fallback lifecycle 2026-08-12 05:05:26 +10:00
Geoffrey McRae
b146c0168a [client] tests: cover render source queue 2026-08-12 05:05:26 +10:00
Geoffrey McRae
45429681a0 [client] spice: own transport configuration
Some checks failed
build / client (Debug, map[cc:clang cxx:clang++], libdecor) (push) Has been cancelled
build / client (Debug, map[cc:clang cxx:clang++], xdg-shell) (push) Has been cancelled
build / client (Debug, map[cc:gcc cxx:g++], libdecor) (push) Has been cancelled
build / client (Debug, map[cc:gcc cxx:g++], xdg-shell) (push) Has been cancelled
build / client (Release, map[cc:clang cxx:clang++], libdecor) (push) Has been cancelled
build / client (Release, map[cc:clang cxx:clang++], xdg-shell) (push) Has been cancelled
build / client (Release, map[cc:gcc cxx:g++], libdecor) (push) Has been cancelled
build / client (Release, map[cc:gcc cxx:g++], xdg-shell) (push) Has been cancelled
build / module (push) Has been cancelled
build / host-linux (push) Has been cancelled
build / host-windows-cross (push) Has been cancelled
build / host-windows-native (push) Has been cancelled
build / idd (push) Has been cancelled
build / obs (clang) (push) Has been cancelled
build / obs (gcc) (push) Has been cancelled
build / docs (push) Has been cancelled
Register SPICE connection and component options in the SPICE transport.
Move generic input and clipboard settings out of the SPICE namespace,
while retaining migration aliases for existing configurations.

Keep PureSpice and usbredir build requirements private to the transport,
and remove obsolete SPICE configuration state from the client core.
2026-08-11 18:31:19 +10:00
Geoffrey McRae
1a6f85eae2 [client] video: switch transport sources
Track primary and fallback video with source-specific generations, and
publish a source only after its first frame or software surface is
ready.

Route SPICE surfaces and cursors through the generic render queue. Keep
the current image across handoffs, and switch input only after the new
source has been presented.

Move fallback activation to its worker so display callbacks cannot
block or deadlock the render path.
2026-08-11 18:31:19 +10:00
Geoffrey McRae
96a5cf4ce8 [client] transport: split video provider operations 2026-08-11 15:05:00 +10:00
Geoffrey McRae
77b661194a [client] input: fix automatic keyboard capture
Treat autoCapture as keyboard ownership while the pointer is inside the
guest viewport. Predict the next local position for both absolute and
relative motion, then release the keyboard before the pointer crosses
an edge.

Keep capture, focus, and deferred evdev transitions consistent while
retaining the latest local position as the prediction baseline.
2026-08-11 14:43:48 +10:00
Geoffrey McRae
d20904e3af [client] input: stop absolute cursor feedback
Some checks failed
build / client (Debug, map[cc:clang cxx:clang++], libdecor) (push) Has been cancelled
build / client (Debug, map[cc:clang cxx:clang++], xdg-shell) (push) Has been cancelled
build / client (Debug, map[cc:gcc cxx:g++], libdecor) (push) Has been cancelled
build / client (Debug, map[cc:gcc cxx:g++], xdg-shell) (push) Has been cancelled
build / client (Release, map[cc:clang cxx:clang++], libdecor) (push) Has been cancelled
build / client (Release, map[cc:clang cxx:clang++], xdg-shell) (push) Has been cancelled
build / client (Release, map[cc:gcc cxx:g++], libdecor) (push) Has been cancelled
build / client (Release, map[cc:gcc cxx:g++], xdg-shell) (push) Has been cancelled
build / module (push) Has been cancelled
build / host-linux (push) Has been cancelled
build / host-windows-cross (push) Has been cancelled
build / host-windows-native (push) Has been cancelled
build / idd (push) Has been cancelled
build / obs (clang) (push) Has been cancelled
build / obs (gcc) (push) Has been cancelled
build / docs (push) Has been cancelled
X11's legacy guest-position synchronization warps the host cursor to
delayed guest updates. With absolute input this feeds old positions back
through cooked motion and pulls the cursor away from window edges.

Skip display-server guest synchronization when the active input is
absolute. Relative input and explicit uncapture alignment are unchanged.
2026-08-10 19:29:22 +10:00
Geoffrey McRae
89dcf56073 [client] X11: release pointer after capture
Normal input now uses absolute positioning, so retaining the XI pointer
grab after capture leaves no later path to release it.

Always release the grab so leaving the window works again and the
uncapture path can align the host cursor to the guest position.
2026-08-10 18:47:27 +10:00
Geoffrey McRae
4afb0254d1 [client] X11: test grabbed input routing
Some checks failed
build / client (Debug, map[cc:clang cxx:clang++], libdecor) (push) Has been cancelled
build / client (Debug, map[cc:clang cxx:clang++], xdg-shell) (push) Has been cancelled
build / client (Debug, map[cc:gcc cxx:g++], libdecor) (push) Has been cancelled
build / client (Debug, map[cc:gcc cxx:g++], xdg-shell) (push) Has been cancelled
build / client (Release, map[cc:clang cxx:clang++], libdecor) (push) Has been cancelled
build / client (Release, map[cc:clang cxx:clang++], xdg-shell) (push) Has been cancelled
build / client (Release, map[cc:gcc cxx:g++], libdecor) (push) Has been cancelled
build / client (Release, map[cc:gcc cxx:g++], xdg-shell) (push) Has been cancelled
build / module (push) Has been cancelled
build / host-linux (push) Has been cancelled
build / host-windows-cross (push) Has been cancelled
build / host-windows-native (push) Has been cancelled
build / idd (push) Has been cancelled
build / obs (clang) (push) Has been cancelled
build / obs (gcc) (push) Has been cancelled
build / docs (push) Has been cancelled
Keep raw and cooked event selection inside the tested X11 policy.

Exercise grab transitions and held-key normalization directly.
2026-08-10 18:19:33 +10:00
Geoffrey McRae
15e0cbbcc4 [client] X11: synchronize keyboard input state
Replay held keys after focus enters the client window.

Track modifiers and lock LEDs for cooked and grabbed raw input.

Handle external XKB indicator changes while the window stays focused.
2026-08-10 17:36:21 +10:00
Geoffrey McRae
f8c4ef3360 [client] X11: match Wayland pointer input behaviour
Make cooked mouse input independent of keyboard focus.

Preserve button state across pointer leave events.

Match Wayland event order, wheel steps, and raw motion delivery.
2026-08-10 17:20:47 +10:00
Geoffrey McRae
b8955fd012 [client] input: add display server behaviour tests
Extract input policy from the Wayland and X11 protocol handlers.

Exercise both implementations against literal Wayland event traces.
2026-08-10 17:15:35 +10:00
Geoffrey McRae
89f0311abc [client] tests: update mouse cases for direct warping
Remove confinement handshake expectations now that Wayland advertises
functional warp support. Verify immediate viewport transitions and cursor
alignment when capture is released.
2026-08-09 12:39:23 +10:00
Geoffrey McRae
008a4482d6 [client] tests: initialize debug for input manager 2026-08-09 01:57:36 +10:00
Geoffrey McRae
3e38c62050 [client] input: use absolute transport positioning 2026-08-09 01:23:30 +10:00
Geoffrey McRae
27a938e741 [client] input: send reports over LGMP
Use the LGMP input queue when the host advertises transport input,
while preserving SPICE fallback through the existing input abstraction.

Claim input lazily, publish ordered full-state keyboard and mouse
reports without blocking rendering, and keep the owner lease alive.
Reserve queue capacity for discrete transitions, coalesce only motion
under pressure, and release ownership safely during idle and disconnect.

Keep the Linux-to-HID map in the client and update LGMP to the
nonblocking data-send API required by the input worker.
2026-08-09 01:03:41 +10:00
Geoffrey McRae
f495e5b7ba [client] input: abstract guest input backends
Introduce LG_InputOps and route keyboard and mouse input through the
active video transport when it provides an input backend.

Keep SPICE as the fallback and force it while the SPICE display is
active. Add atomic shared/exclusive locking for safe backend changes.
2026-08-08 21:23:32 +10:00
Geoffrey McRae
e9d4b2f563 [client] tests: keep splash out of captures
Hide the startup splash immediately after overlay initialization when a
render-pipeline capture is requested. This occurs before the frame
thread is released, so no EGL surface buffer can contain splash pixels.
2026-08-08 01:26:42 +10:00
Geoffrey McRae
4e82af162d [client] tests: cover padded frame strides
Add a configurable stride to the synthetic transport and poison row
padding so incorrect row addressing is visible in captured output.

Cover full-frame and moving-damage BGRA uploads with 512-byte and
5120-byte pitches, and verify the advertised layout in the log.
2026-08-08 00:29:32 +10:00
Geoffrey McRae
e4874ee32d [client] cursor: restore Wayland edge synchronization
Keep guest-to-host pointer synchronization active while an attempted
surface exit is blocked by the edge of a Wayland output. Continue
forwarding relative motion and wait for wl_pointer.leave before marking
the cursor outside the window.

Distinguish whole-surface releases from exits into letterbox space so
the expected asynchronous release callback cannot disable the feedback
loop before the pointer is confined again.

Treat Wayland pointer capability loss as a real leave so an unrelated
inactive callback cannot be mistaken for the intentional release.
2026-08-06 22:26:14 +10:00