Geoffrey McRae
d20904e3af
[client] input: stop absolute cursor feedback
...
build / client (Debug, map[cc:clang cxx:clang++], libdecor) (push) Waiting to run
build / client (Debug, map[cc:clang cxx:clang++], xdg-shell) (push) Waiting to run
build / client (Debug, map[cc:gcc cxx:g++], libdecor) (push) Waiting to run
build / client (Debug, map[cc:gcc cxx:g++], xdg-shell) (push) Waiting to run
build / client (Release, map[cc:clang cxx:clang++], libdecor) (push) Waiting to run
build / client (Release, map[cc:clang cxx:clang++], xdg-shell) (push) Waiting to run
build / client (Release, map[cc:gcc cxx:g++], libdecor) (push) Waiting to run
build / client (Release, map[cc:gcc cxx:g++], xdg-shell) (push) Waiting to run
build / module (push) Waiting to run
build / host-linux (push) Waiting to run
build / host-windows-cross (push) Waiting to run
build / host-windows-native (push) Waiting to run
build / idd (push) Waiting to run
build / obs (clang) (push) Waiting to run
build / obs (gcc) (push) Waiting to run
build / docs (push) Waiting to run
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
Quantum
19a22ac8ca
[client] core: always align mouse on uncapture
...
Previously, we only aligned the mouse in the client when the cursor is
visible. This wasn't a problem because the cursor position in the guest
took precedence and we only used relative input.
Since we now have absolute input, the absolute position of the cursor in
the client matters at all times when we exit capture, so we always call
`core_alignToGuest` now.
2026-08-09 10:32:13 +10:00
Quantum
70ae98491d
[client] core: simplify core_setCursorInView logic
...
We don't need any of that weird grabPointer stuff now that we have absolute
input. Deleting this will allow Wayland to advertise warp support without
doing any of the nasty confining stuff on grab/release.
2026-08-09 10:32:13 +10:00
Geoffrey McRae
9f2d6f6413
[client] wayland: constrain pointer only during capture
...
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
Remove the persistent confined-pointer workaround that emulated cursor
warping on Wayland. Normal pointer motion now uses absolute input only.
Create relative and locked pointer objects only during capture. Preserve
the request across pointer capability changes, and suppress relative
events until the compositor confirms the lock.
On uncapture, publish the current absolute position instead of trying to
warp the host cursor.
2026-08-09 03:32:58 +10:00
Geoffrey McRae
3e38c62050
[client] input: use absolute transport positioning
2026-08-09 01:23:30 +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
05599ffd02
[client] cursor: restore Wayland pointer convergence
...
Keep the tracked Wayland hardware position sourced only from absolute
wl_pointer events. Relative motion remains unclipped at output edges,
so accumulating it made the client believe the hardware cursor had
reached the guest position and caused the corrective warp to be
skipped.
Keep cursor coordinates in shape-origin form after absolute
realignment. Preserve the logical hotspot when a shape-only update
changes its hotspot, preventing either path from leaving a permanent
offset.
2026-08-06 22:26:14 +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
Geoffrey McRae
a0b7b12ffc
[client] tree: restore unrelated working changes
...
Restore client and test files that were already staged when the OBS
cadence commit was created. Keep that work out of the scheduler series
while leaving its working-tree contents untouched.
2026-08-06 18:02:08 +10:00
Geoffrey McRae
8a04037c9b
[obs] scheduler: serialize cadence controls
...
Track the LGMP serial for each accepted frame-schedule message and wait
for its acknowledgement before sending another. Preserve pending RESET,
IMMEDIATE, and feedback state after definite enqueue failures.
Use bounded retry polling and request one fresh immediate frame after an
ambiguous pointer-queue fault recovers.
2026-08-06 18:02:08 +10:00
Geoffrey McRae
023430da31
[client] input: defer pointer exit until release
2026-08-06 18:02:07 +10:00
Geoffrey McRae
142dc2bcef
[client] input: track pointer confinement state
2026-08-06 18:02:07 +10:00
Geoffrey McRae
1baa5a3710
[client] input: gate motion on active capture
2026-08-06 18:02:07 +10:00
Geoffrey McRae
bbb168aafd
[client] input: round warps past viewport edges
2026-08-06 18:02:07 +10:00
Geoffrey McRae
e9a16ef523
[client] input: add cursor transition diagnostics
...
Add opt-in sequence-numbered tracing across the core and Wayland
mouse paths.
2026-08-06 13:19:27 +10:00
Geoffrey McRae
08993d3e1e
[client] core: use portable alloc_sprintf instead of asprintf
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
build / client-tests (Debug, map[cc:clang cxx:clang++], libdecor) (push) Has been cancelled
build / client-tests (Debug, map[cc:clang cxx:clang++], xdg-shell) (push) Has been cancelled
build / client-tests (Debug, map[cc:gcc cxx:g++], libdecor) (push) Has been cancelled
build / client-tests (Debug, map[cc:gcc cxx:g++], xdg-shell) (push) Has been cancelled
build / client-tests (Release, map[cc:clang cxx:clang++], libdecor) (push) Has been cancelled
build / client-tests (Release, map[cc:clang cxx:clang++], xdg-shell) (push) Has been cancelled
build / client-tests (Release, map[cc:gcc cxx:g++], libdecor) (push) Has been cancelled
build / client-tests (Release, map[cc:gcc cxx:g++], xdg-shell) (push) Has been cancelled
2026-07-31 14:01:08 +10:00
Geoffrey McRae
deb447c3ce
[client] kb: add support for missing key mappings
...
Fixes #1321
2026-07-30 10:03:14 +10:00
Quantum
1af909adae
[client] main: display spice VM name in process title
2026-07-30 07:52:24 +10:00
Geoffrey McRae
36b33033a1
[client] transport: introduce pluggable frame transports
...
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
Move shared-memory ownership, LGMP session handling, queue access, and
DMA setup behind a transport interface. The LGMP backend preserves the
existing zero-copy frame and DMA paths while owning its lgmp:* options.
Expose the initialized EGL context through a versioned renderer interop
record for future accelerated decode backends. Add an LGMP-independent,
deterministic test transport for graphics-pipeline validation.
2026-07-29 13:36:49 +10:00
Geoffrey McRae
78802319e3
[client] add a MPV glsl style effect loader
2026-07-23 09:43:59 +10:00
Quantum
a164c02f9a
[client] core: resize guest to actual surface size
...
This ensures that the guest renders with the actual screen size when the
client surface is scaled when using automatic scaling.
2026-06-06 02:31:44 +10:00
Geoffrey McRae
dbb80ebd66
[client]: core: add timeout on pointerQueue wait loop
...
If the host has had a fault this loop can become infinite,
soft-locking the application. This adds a 200ms timeout to prevent this.
2026-06-03 08:59:48 +10:00
Geoffrey McRae
69f44a003d
[all] refresh copyright
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
2026-05-31 15:13:57 +10:00
Geoffrey McRae
e9b7bdfea1
Revert "[all] refresh copyright"
...
Corrupted IDD sources due to lack of UTF-8 with BOM support in the
script.
2026-05-31 15:10:44 +10:00
Geoffrey McRae
98602fb95e
[all] refresh copyright
2026-05-31 15:03:37 +10:00
Geoffrey McRae
01cae959d8
[client] core: workaround windows mouse information problem
...
Under windows there is no cursor enabled at all until it has been moved
for the fist time by the user. If our cursor information is invalid we
assume that this has occured and induce a wiggle to force windows to
create the cursor.
2025-09-07 20:24:17 +10:00
Geoffrey McRae
54d811e098
[client] keybind: add keybind to set the guest resolution
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 / obs (clang) (push) Has been cancelled
build / obs (gcc) (push) Has been cancelled
build / docs (push) Has been cancelled
2025-04-04 10:23:00 +11:00
Geoffrey McRae
9593301511
[client] config: add option to disable auto client resolution switching
2025-04-04 10:13:19 +11:00
Geoffrey McRae
d8baa62c6a
[client] core: check if the resolution already matches the window
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 / obs (clang) (push) Has been cancelled
build / obs (gcc) (push) Has been cancelled
build / docs (push) Has been cancelled
2025-04-02 14:03:48 +11:00
Geoffrey McRae
852eb6bf69
[client] core: new message event system to debounce window size events
2025-04-02 13:46:55 +11:00
Geoffrey McRae
868504d22d
[client] core: fix dynamic res switch race issue
2025-03-28 23:18:41 +11:00
Geoffrey McRae
d839a45d0b
[client] kvmfr: report the local window size to the VM
build / client (Debug, map[cc:clang cxx:clang++], libdecor) (push) Waiting to run
build / client (Debug, map[cc:clang cxx:clang++], xdg-shell) (push) Waiting to run
build / client (Debug, map[cc:gcc cxx:g++], libdecor) (push) Waiting to run
build / client (Debug, map[cc:gcc cxx:g++], xdg-shell) (push) Waiting to run
build / client (Release, map[cc:clang cxx:clang++], libdecor) (push) Waiting to run
build / client (Release, map[cc:clang cxx:clang++], xdg-shell) (push) Waiting to run
build / client (Release, map[cc:gcc cxx:g++], libdecor) (push) Waiting to run
build / client (Release, map[cc:gcc cxx:g++], xdg-shell) (push) Waiting to run
build / module (push) Waiting to run
build / host-linux (push) Waiting to run
build / host-windows-cross (push) Waiting to run
build / host-windows-native (push) Waiting to run
build / obs (clang) (push) Waiting to run
build / obs (gcc) (push) Waiting to run
build / docs (push) Waiting to run
2025-03-28 16:38:02 +11:00
Geoffrey McRae
7c285a45fb
[app] core: place the local cursor inside the window on capture
2025-03-07 12:21:20 +11:00
Geoffrey McRae
d9f2df361d
[client] cimgui: update to 1.91.8
2025-03-05 15:16:31 +11:00
Geoffrey McRae
551298ed5b
[doc] all: update copyright year
2025-03-05 12:24:38 +11:00
Geoffrey McRae
0b210a280d
[all] update the copyright to 2024
2024-02-01 17:16:31 +11:00
Geoffrey McRae
2e515657dd
[all] update/add license headers
2023-10-20 15:36:34 +11:00
Geoffrey McRae
0a768a5a7f
[client] main: add new option for integer only upscaling
...
The new option `win:intUpscale` will limit upscaling to integer sizes
only if enabled.
2022-05-09 18:23:53 +10:00
Quantum
f28084e653
[client] core: remove state tracking in core_updateOverlayState
...
The state is never updated when a message box is dismissed, so the
cursor is never displayed when a second message box shows up.
The only other caller, app_setOverlay, has state tracking already.
2022-03-19 10:04:23 +11:00
Geoffrey McRae
efa49391fc
[client] fix race segfault on pointer queue unsubscribe/timeout
2022-01-26 17:20:12 +11:00
Quantum
11800029f0
[client] core: redraw cursor after warping guest cursor
2022-01-24 17:07:15 +11:00
Quantum
71901414d1
[client] overlay: realign cursor when turning off overlay
...
This is only done in non-capture mode to avoid messing up games.
2022-01-24 17:07:15 +11:00
Quantum
7c91c922e6
[client] input: avoid reentrancy when realigning guest cursor
...
This prevents LGMP_ERR_QUEUE_FULL from happening with high polling rate
mice, which is caused by receiving many more mouse events while the
guest cursor warps, triggering more warps.
2022-01-15 19:25:30 +11:00
Geoffrey McRae
0fc87576f3
[client] core: fallback to manual realignment if the LGMP message fails
2022-01-09 21:25:40 +11:00
Geoffrey McRae
780cf5f362
[client] overlay: add modal message dialog support
2022-01-08 18:58:48 +11:00
Geoffrey McRae
952ebea2c5
[all] refresh copyright dates
2022-01-05 19:42:46 +11:00
Geoffrey McRae
65ba2e8df9
[client] spice: update submodule and refactor calls & types
2021-12-28 22:04:35 +11:00
Geoffrey McRae
95987a9c91
[client] core: set the correct cursor when exiting overlay
2021-12-27 11:52:06 +11:00
Geoffrey McRae
bbd9c84896
[client] core: invalidate the pointer state when overlay is disabled
2021-12-27 11:22:12 +11:00
Geoffrey McRae
bb74a9d9c8
[client] core: don't try to send LGMP messages if the video is stopped
...
If the video stream is stopped the LGMP session is not valid, so we
can't send messages to the client.
2021-12-27 09:55:56 +11:00