Skip to content

Two-screen fixes, headless visual checks, release workflow and repo cleanup - #9

Merged
linsaftw merged 27 commits into
ArkFlame:mainfrom
infectedwarelol:repo-polish-release-tests
Oct 27, 2026
Merged

linsaftw merged 27 commits into
ArkFlame:mainfrom
infectedwarelol:repo-polish-release-tests

Conversation

@infectedwarelol

@infectedwarelol infectedwarelol commented Oct 27, 2026 •

Copy link
Copy Markdown
Contributor

This branch fixes two-screen sessions and a terminal crash, adds headless visual checks and a release workflow, and cleans up the repository. Each change is its own commit.

Fixes

  • Second screen was black. Xorg's dummy driver, and some virtual heads and docks, report an enabled output as disconnected. The WM and desktop skipped it, so that screen got no wallpaper, panel or work area. Any output that scans out from a CRTC now counts, which matches how X builds its monitor list.
  • Panel and popup backdrops on the second screen blended over the wrong slice of the wallpaper: the desktop fits the wallpaper per output, but the render layer fitted one image over the whole root. The WM now publishes the per-output layout as _FLAMEWM_WALLPAPER_OUTPUTS, and panels, popups and app windows read it.
  • flamewm-terminal died with SIGHUP when started as a session leader, as setsid-style launchers do. It opened the pty slave without O_NOCTTY and became that tty's controlling process.
  • Live backdrop CPU. Dragging a translucent terminal with "show contents while dragging" cost 53.9% of a core in the terminal. The crop is now separable, and a moved window only computes the strips the move exposes. The same drag now costs about 24%. Outline drags, the default, were already cheap (11% total).
  • The light-outline, taskbar and contour passes left the build, Clippy and rustfmt failing, plus three tests that no longer matched the code. They pass again.

Testing and CI

  • tools/flamewm_visual_tests.py starts Xorg with the dummy driver on one or two 1280x800 screens and runs flamewm-session. It checks for black outputs, a panel per screen, Start popup latency and cleanup, frame shadows, drag feedback latency, black marks behind moved windows, the minimize animation restoring the desktop, and windows on the second screen. Against the build before the two-screen fixes, three checks fail. With this branch all 32 pass.
  • The Arch package workflow now runs those checks on the installed package and uploads the screenshots.
  • bench mode measures CPU and memory on the same session. docs/PERFORMANCE.md now has real numbers: idle PSS of 12.2 MiB for the WM, 16.4 MiB for the desktop and 11.5 MiB for the shell, no measurable idle CPU, Start popup in about 320 ms, drag feedback in 5 to 7 ms.

Release workflow

Pushing a v<version> tag builds the Arch package and the .deb, then attaches both with checksums to a GitHub release. It also updates the flamewm-git AUR package, but only after a maintainer adds the AUR account's SSH key as the AUR_SSH_PRIVATE_KEY secret. Until then that step is skipped. Details are in docs/PACKAGING.md. actionlint passes, but the workflow has not run on GitHub yet.

Repository and docs

  • 74 dated pass reports and handoff notes moved to docs/history/. The root symlinks into scripts/ are gone, cleanup_bloat_v1.sh moved under scripts/, and the stale MANIFEST.sha256 is removed (805 of its files no longer exist, and nothing read it).
  • The README gets a screenshot table (desktop, Start menu, minimize GIF, two screens), and the maintainers' header images stay as they are.
  • The Wayland session is no longer labelled preliminary. The docs say what was tested instead: in a nested session, native Wayland clients (foot, weston-simple-shm) and XWayland work. They also keep the open facts: no successful hardware login is on record, one reported login failure is still open, and cursor-shape, text-input and xdg-toplevel-icon are missing.
  • New issue and pull request templates. CONTRIBUTING.md now lists three starter tasks that could become good first issue issues once the label exists.

Not done or not verified

  • No run on real hardware: not for multiple monitors, and not for the native Wayland login.
  • build-deb and the release workflow were not run here; the host has no dpkg.
  • xrender_aa::clipped_runs_preserve_partial_corner_coverage fails on main as well. It comes from the taskbar pass, and this branch does not touch it.
  • The 64 failing Python tool tests are the same set as on main.

The shape-span iterator borrowed its clip bounds past the function, so
flamewm-render-x11 no longer compiled. Test-only shadow helpers are now
cfg(test), the Task Manager literals and loops satisfy the workspace
lints, and rustfmt is applied to the files that pass touched.
The shared menu frame now uses the translucent white contour, and a frame
that leaves a drag gesture re-shades as soon as it settles, as the scene
code always did. The Qt appearance test only expects the owned kdeglobals
prefix when the KDE platform theme plugin is installed.
Sixty-nine dated pass reports, handoff notes and a session transcript
move from docs/ and the repository root into docs/history/. The root
symlinks to scripts/ and the one-off cleanup script are gone or moved
under scripts/, and MANIFEST.sha256 is removed: it listed 805 files that
no longer exist and nothing read it.
Some drivers report an enabled head as disconnected because they cannot
sense a sink (virtual heads, the Xorg dummy driver, some docks). X still
lists such an output as a monitor, but the WM and desktop skipped it, so
the second screen got no wallpaper, no panel and no work area.
The WM publishes the wallpaper layout its titlebars use on the root as
_FLAMEWM_WALLPAPER_OUTPUTS. Panels, popups and the app-window fallback
canvas read it instead of fitting one wallpaper over the whole root, so
on a second screen they no longer blend over an unrelated slice of the
picture.
tools/flamewm_visual_tests.py starts Xorg with the dummy driver on one or
two 1280x800 outputs, runs flamewm-session and drives it with xdotool.
It checks for black outputs, a panel per output, Start popup latency and
cleanup, frame shadows, drag feedback latency, black marks behind moved
windows, the minimize animation restoring the desktop, and windows on the
second output. A bench mode runs bench-flamewm-cpu.py on the same session.
The installed package is exercised on one and two screens and the
screenshots are uploaded as an artifact.
Pushing a v<version> tag builds the Arch package and the .deb, attaches
both with checksums to a GitHub release and, when AUR_SSH_PRIVATE_KEY is
set, pushes the PKGBUILD and .SRCINFO to the flamewm-git AUR package.
A terminal started as a session leader, as setsid-style launchers do,
took the slave as its own controlling terminal and was killed by SIGHUP
as soon as the shell's session claimed it, so no window ever appeared.
Each crop computed taps for the whole root and blended three channels on
both axes for every pixel. It now builds taps for the cropped range only,
blends each source row horizontally once and mixes two such lines per
output row. Output is bit-identical. Dragging a translucent terminal with
live contents drops from 53.9% to 29.5% of a core in the terminal.
Each repeat left the window at the drop point, so later repeats grabbed
empty desktop and measured a rubber band instead of a window move.
A translucent window dragged with live contents recropped the whole
window from the wallpaper canvas on every motion step. The canvas is the
same, so the previous crop is shifted and only the newly exposed strips
are computed. Terminal CPU during a live drag drops from about 54% to 24%
of one core (5 s windows, median of 5).
Captured from the headless test session on Xorg's dummy driver.
The README now leads with real screenshots, lists the Wayland session
next to X11 with its known issues instead of a preliminary label, points
to the headless visual checks and the release packages, and replaces the
old memory notes with the figures in PERFORMANCE.md.
The docs and package description stop labelling the session
preliminary. They keep the facts: X11 is the default, no hardware login
is on record and one reported login failure is open. Nested runs with
native Wayland clients and XWayland are now recorded. PACKAGING.md
documents the release workflow and the AUR secret it needs.
Bug reports ask for the session, version, hardware and logs, and the
pull request template asks how a change was checked.
Test-only helpers become cfg(test), the contour coverage helper moves its
inner function out of the body and collapses a nested if, a constant
test assertion is checked at compile time, and rustfmt is applied.
@linsaftw
linsaftw merged commit a378210 into ArkFlame:main Oct 27, 2026
2 checks passed
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.

2 participants