Skip to content

pages: fit the connections, recordings and reports tables on 1710px-wide displays - #266

Closed
jseifeddine wants to merge 6 commits into
sol1:mainfrom
jseifeddine:fix/tables-1710px
Closed

jseifeddine wants to merge 6 commits into
sol1:mainfrom
jseifeddine:fix/tables-1710px

Conversation

@jseifeddine

Copy link
Copy Markdown
Contributor

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

Fixes #252.

18px cells with 20px padding and a cell each for edit/clone/delete overran a 1710px MacBook display by ~300px. The three admin actions share one cell, a max-width: 1800px breakpoint tightens padding, sidebar width, cell and header sizes; recordings and reports get the same treatment; the narrow-desktop page padding moves into rustguac.css so switching tabs does not shift the gutter. Nothing is hidden.

Also introduces the Playwright harness under tests/e2e/ (a static server for the real pages plus a stubbed API that records every request) and the CI e2e job, so each later UI PR adds one spec. See tests/e2e/README.md.

Testing

  • Browser: tables-1710.spec.mjs: no horizontal overflow and the table's right edge inside the viewport on all three pages at 1710px.
  • Manual: 1710px window, Connections as admin: the delete action is visible with room to spare.

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
The 18px table with 20px cell padding and a separate cell each for
edit, clone and delete overran the main column by ~300px on a 1710px
MacBook display, cutting "delete" off the right edge.

Put the three admin actions in one cell, and add a max-width: 1800px
breakpoint on the connections page: 20px page padding, 240-280px
sidebar, 16px cells with tighter padding, 14px headers, a 110px
Connect button and a smaller folder title. The icon-only "open in new
window" button keeps its compact size. Nothing is hidden; at 1710px the
table fits with about 250px to spare.

Fixes sol1#252
The 18px tables with 20px cell padding ran past the right edge on a
1710px MacBook display, the recording link cut off. Same treatment as
the connections table: 16px cells with tighter padding, 14px headers,
actions kept on one line. Nothing is hidden.

Part of sol1#254
The 1800px breakpoint set a tighter page gutter on the connections page
only, so switching to Sessions or any other tab snapped the content
sideways. Move it to rustguac.css so every page moves together.

Part of sol1#254
A browser test harness under tests/e2e: serve.mjs serves the real static
tree over HTTP and lib/api.mjs answers /api/* from a small fixture address
book, recording every request the page makes, so the shipped pages run
against data the test controls without Vault, guacd or a session. CI gains
an e2e job that installs Chromium and runs the suite.

The first spec pins sol1#252: at 1710px the connections, recordings and reports
tables fit inside the viewport and nothing scrolls sideways.
@davekempe

Copy link
Copy Markdown
Member

Merged into main as 24eeafb, 701f88e, 7ef4660 and c934065, thanks Jad. One addition on our side (e4fb8ee): the 1710px spec passed on main too, since its fixture names fit either way under Linux's monospace font. With realistic long dotted names the padding change alone still overran Connections and Recordings, so table cells now wrap long text (overflow-wrap: anywhere) with the buttons kept on one line, and the spec has a long-data test per page that fails on main. The README lists only the spec that exists so far.

@davekempe davekempe closed this Oct 13, 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.

Connections table overruns the page at 1710px wide

2 participants