Skip to content

client: keep the fullscreen gesture press off the remote, release all input after the transition - #265

Closed
jseifeddine wants to merge 2 commits into
sol1:mainfrom
jseifeddine:fix/fullscreen-gesture-release
Closed

jseifeddine wants to merge 2 commits into
sol1:mainfrom
jseifeddine:fix/fullscreen-gesture-release

Conversation

@jseifeddine

Copy link
Copy Markdown
Contributor

Stacked PR 2 of 18 — builds on #264 (fix/csp-img-src). Merge in order from #264. This PR's own change is the compare on the fork: jseifeddine/rustguac@fix/csp-img-src...fix/fullscreen-gesture-release. The Files tab here includes the PRs below it until they merge into main.

Fixes #256.

With fullscreen-on-connect the first mousedown after CONNECTED is the browser's fullscreen gesture, but Guacamole.Mouse forwarded it to guacd too, and the transition swallowed its release: the terminal selected text on every pointer move. The gesture is now taken in the capture phase and never reaches the display's handlers, and entering fullscreen releases everything (keyboard.reset(), a mouse state with no buttons at the last pointer position).

Testing

  • Manual: SSH entry with fullscreen-on-connect, click once after connect: no drag selection follows the pointer; press a key as the gesture: nothing is held on the remote.
  • Browser: the zero-click fullscreen PR covers the embedded path end to end.

The Content-Security-Policy had no img-src, so default-src 'self'
governed images and refused the data: URIs the Guacamole client draws
every tile from on browsers without WebCodecs ImageDecoder. Safari and
Firefox rendered SSH and RDP sessions black with only rect fills and the
cursor cell showing; Chrome decodes straight from the stream and never
fetches a URL, which hid it. The same directive blocks the remote mouse
cursor (cursor: url(data:...)) and blob: image URLs.

Move the policy into a documented constant, add img-src 'self' data:
blob:, and add a unit test that fails if img-src loses either source.
Document the proxy-side header replacement for releases up to v1.10.5.

Fixes sol1#249
… input after the transition

With fullscreen-on-connect, the first mousedown after CONNECTED is the
browser's fullscreen gesture, but Guacamole.Mouse forwarded it to guacd
as well, and the transition that followed swallowed its release. guacd
was left with the button held and the terminal selected text on every
pointer move; the same with a key press as the gesture.

Stop the gesture event before the display's handlers see it, and on
entering fullscreen release everything explicitly: keyboard.reset() and
a mouse state with no buttons at the last pointer position, so a release
lost for any other reason during the transition cannot stick either.

Fixes sol1#256
@jseifeddine
jseifeddine force-pushed the fix/fullscreen-gesture-release branch from 6aa82b8 to ee03b3e Compare October 12, 2026 04:20
@davekempe

Copy link
Copy Markdown
Member

Merged into main as 4133304, after #267 since rgReleaseAllInput() reads fillX/fillY, which #267 introduces. Thanks Jad.

@davekempe davekempe closed this Oct 12, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

SSH: first click after fullscreen-on-connect leaves the mouse button held, every move selects text

2 participants