Detect wallpaper image formats from their contents so extensionless portal copies render on the desktop and lock screen. Preserve decode limits and cover extensionless files with regression tests.
Remove the Bluetooth icon from the status bar.
Use the September 30 hero on the website and README, add a shared screenshot gallery, and remove the old showcase images. Build image links locally and clean generated site output.
Back up the known development portal override during installation and report custom overrides before building. Keep source selections clear while letting blur show through unselected rows.
Resolve light, dark and automatic appearance centrally and publish live theme snapshots to native surfaces and the appearance portal. Add paired preset families, custom theme imports, accessibility transforms and contrast-safe transitions.
Refine the Settings gallery and Auto controls, move overrides under advanced customization, and share palette-aware switches and circular slider thumbs. Document configuration and include theme licenses and integration coverage.
Add adjustable lock-only inactivity delays, a smooth dimming fade and DRM display sleep without changing output layout. Input, session resume and policy changes wake displays. Pending flips retire before power-off, and protected fallback frames preserve the policy after an early locker crash while unlock ownership checks remain strict.
Reduce the password field and avatar, expose delays in Settings, document the practical swaylock comparison and remove the completed backlog.
Validation: independent review cleared; 255 compositor tests, 7 locker tests and 15 Settings tests pass; affected debug binaries rebuilt. Isolated visual smoke remains blocked by an unlocked nested screenshot timeout, matching the previously established baseline presentation limitation. Real DRM display sleep requires a live session check.
Add consent, zones and outside-edge barriers, connection-scoped leases, bounded input queues and keyboard/pointer forwarding. Restore local input on release, locking, topology or keymap changes, receiver loss and emergency escape. Preserve held-key state and distinguish finger stops from absent scroll axes.
Validation: independent review cleared; 5 native InputCapture unit tests; 32 portal tests; official D-Bus contract checks on a private bus; real installed libei receiver interoperability test. Live physical barrier and consent interaction remain to be checked in a desktop session.
Render selected toplevels through a private portal-only capture protocol, preserve logical snapshot geometry, and renegotiate PipeWire video on window resizing. Bound outstanding snapshots and retry temporary contention; stop on source closure and session locking.
Validation: portal unit tests (31), capture budget unit, private-bus portal contracts, and real nested/PipeWire isolation, workspace, resize, close and paused-lock tests pass. Independent review cleared. Monitor restore integration timed out on both this build and the unchanged previous compositor under the current nested host.
Centralize native palettes, presets, typography, controls, menus, calendar rendering, and icon assets in ferese-theme. Reuse the shared components across the shell, settings, lock screen, authentication prompt, and screen-sharing chooser.
Attach themed dialogs to compositor-owned materials, correct backdrop capture and sampling across output transforms, smooth patterned backgrounds, and prevent clipped picker buttons with the configured shell font.
The hidden-window sweep built a Vec of cloned Window handles purely to
work around the borrow checker: unmap_elem needs &mut self.space while
the iteration borrows self.window_ids. Move the space out with
mem::take instead and unmap in place, dropping the allocation and the
per-window clone.
Behaviour is unchanged. unmap_elem only removes the element passed to
it, so it cannot affect element_location for any other window, which
makes checking each window immediately before its own unmap equivalent
to testing every hidden window up front; the unmap order is the same
window_ids iteration order. The |= is deliberate so the check never
short-circuits past an unmap.
This is a cleanup, not a measured win. The sweep is dominated by the
linear scans inside element_location and unmap_elem, and a Vec only
allocated when windows were actually hidden, so the saving is small.
Verified with twelve live foot windows across forty workspace switches.
A let-chain collapse in the status menu left the battery blocks
inside the notifications arm, so the percentage, level meter, power
mode row, and power actions only rendered when notifications were
present. Close the notifications block before the battery checks so
each menu kind owns its own sections again.
Use center_x/center_y on the fixed-size icon containers rather than
align_x/align_y, which left badges and the top bar slot sitting off
center in libcosmic, and constrain the menu icon to a square 22px slot
so the battery glyph is not letterboxed by its own width. Give the
power tiles a Fill-width centering container inside their
FillPortion(1) buttons so the label and icon stay centered on hover.
Drop the two column-alignment TODO wrappers the collapse introduced.